我想用CSS給一個圖像圓形的不透明度。
我知道我可以在這樣的圖像上實現不透明:
.circle img {
opacity: 0.4;
filter: alpha(opacity=40);
}
我知道我可以實現這樣的圓形圖像:
.circle {
border-radius: 50%;
display: inline-block;
}
.circle img {
border-radius: 50%;
display: block;
}
我想以某種方式合并上面的兩個東西,并只對圖像的邊緣應用不透明度,這樣圖像的中心幾乎不會從不透明度標簽中得到任何東西。我已經找了幾個小時,但什么也沒找到。
不透明:http://jsfiddle.net/8w6szf84/47
不透明度:http://jsfiddle.net/8w6szf84/48/->不透明度差,只希望邊緣褪色...
我需要在這上面使用Javascript嗎?有什么建議嗎?
好,我們可以做的是創建一個:after元素,它的大小等于父元素的大小。使用這個,我們可以設置一個背景漸變,當圖像漸隱到純色背景時,這個漸變就會出現。
注意:在這個例子中,我將漸變元素放大了一點,并將其移動到1px以上,以防止其周圍出現邊框。從這里開始,你可以隨意擺弄,以獲得你想要的完美效果。
.circle {
border-radius: 50%;
display: inline-block;
position: relative;
}
.circle img {
border-radius: 50%;
display: block;
border:1px solid #fff;
}
.circle:after {
content: "";
display: block;
width: 100%;
height: 100%;
background: radial-gradient(ellipse at center, rgba(255,255,255,0) 0%,rgba(255,255,255,1) 70%,rgba(255,255,255,1) 100%);
border-radius: 50%;
position: absolute;
top: 0; left: 0;
}
<div class="circle">
<img src="http://placekitten.com/200/200?image=2" />
</div>
你也可以使用方框陰影
.shadow {
border-radius: 50%;
display: inline-block;
position: relative;
}
.shadow img {
border-radius: 50%;
display: block;
border: 1px solid #fff;
}
.shadow:after {
content: "";
display: block;
width: 100%;
height: 100%;
border-radius: 50%;
position: absolute;
top: 0;
left: 0;
box-shadow: inset 10px 24px 40px 0px white,
inset -10px -24px 40px 0px white,
inset 20px -10px 40px 0px white,
inset -20px 10px 40px 0px white;
}
<div class="shadow">
<img src="http://placeimg.com/200/200/any" />
</div>
你可以使用兩張(相同的)圖片,上面的那張小一點,透明一點。
.circle-opaque {
border-radius: 50%; /* Make it a circle */
display: inline-block;
position: absolute; /* Able to position it, overlaying the other image */
left:0px; /* Customise the position, but make sure it */
top:0px; /* is the same as .circle-transparent */
z-index: -1; /* Makes the image sit *behind* .circle-transparent */
}
.circle-opaque img {
border-radius: 50%; /* Make it a circle */
z-index: -1;
}
.circle-transparent {
border-radius: 50%; /* Make it a circle */
display: inline-block;
position: absolute; /* Able to position it, overlaying the other image */
left: 0px; /* Customise the position, but make sure it */
top: 0px; /* is the same as .circle-transparent */
z-index: 1; /* Makes the image sit *on top of* .circle-transparent */
}
.circle-transparent img {
width: 200px;
opacity: 0.4; /* Make the second image transparent */
filter: alpha(opacity=40); /* For IE8 and earlier; optional */
z-index: 1; /* And on top of the first */
}
<div class="circle-opaque">
<img src="http://www.catchannel.com/images/articles/0805/orange-kitten-200px.jpg" />
</div>
<div class="circle-transparent">
<img src="http://www.catchannel.com/images/articles/0805/orange-kitten-200px.jpg" />
</div>
雖然這種方法不如其他方法干凈(可能是因為缺少時間),但我相信它可以被清理干凈。然而,它只是使用了方框陰影來實現你想要的外觀。(徑向梯度可能是首選,雖然如果你需要一個后備,這可能是一個選項)
div {
height: 300px;
width: 300px;
background: url(http://placekitten.com/g/300/400);
border-radius: 50%;
box-shadow:
inset -5px -5px 100px white,
inset 0 0 90px white,
inset 0 0 80px white,
inset 0 0 70px white,
inset 0 0 60px white,
inset 0 0 50px white,
inset 0 0 40px white,
inset 0 0 30px white,
inset 0 0 20px white,
inset 0 0 10px red;
}
<div></div>
下面是Ruddy回答的修改版,只是漸變的直徑匹配圖像的寬度(或高度)而不是對角線。不需要邊界半徑。80%的圖像原樣顯示,剩余的20%從透明漸變為白色。
.circle {
display: inline-block;
position: relative;
}
.circle img {
display: block;
}
.circle:after {
content: "";
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-image: radial-gradient(circle closest-side at center,
rgba(255, 255, 255, 0) 0,
rgba(255, 255, 255, 0) 80%,
rgba(255, 255, 255, 1) 100%
);
}
<div class="circle">
<img src="http://www.catchannel.com/images/articles/0805/orange-kitten-200px.jpg">
</div>
我喜歡簡單,所以以下可能就足夠了:
.circle {
background-image: radial-gradient(ellipse at center center, rgba(0, 0, 0, 0) 0%, rgba(255, 255, 255, 1) 70%, rgba(255, 255, 255, 1) 100%);
display: inline-block;
}
.circle img {
border-radius: 50%;
mix-blend-mode: lighten;
}
<div class="circle">
<img src="http://www.catchannel.com/images/articles/0805/orange-kitten-200px.jpg" />
</div>
下一篇python 最大的數