摘要:
根据需要的内容不同,可能会有些棘手,但基本的方法是相当简单明了的。
这种方法与我的第一个想法有点不同...但是结果相同。
- 我为圆形制作了一个黑色/透明的图案,并将其设置为
:before
。
- 然后将圆形变换
rotate(180deg)
并移动到适合<div>
角落的位置。
- 然后我将该圆形的
opacity
设置为0.6
。
<div>
本身不受opacity
的影响。
- 接下来,我添加了
:after
元素,并将图像作为background
(如果需要,可以通过js控制)
- 我对图像添加了一些效果(
border-radius
,box-shadow
,border
),以展示这个元素可以轻松独立地进行控制。
- 我使用了较浅的背景,并将
opacity
设置为0.3
以显示结果
这里是FIDDLE的链接: http://jsfiddle.net/pixelass/nPjQh/4/
看看这个版本,会有一些疯狂的结果: http://jsfiddle.net/pixelass/nPjQh/5/
每个例子都只使用一个div
元素
基本规则。(这些规则“可以”用于创建与js动态行为)
position = absolute;
top = circleHeight / -2;
left = circleHeight / -2; //(left = top)
rotation = 180度;
opacity = 背景值;
bgColor = 背景的RGB值;
#inner {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
z-index: -1;
background-color: rgba(0, 0, 0, 0.3);
padding:20px;
border-radius: 20px;
border-top-left-radius: 0;
}
#inner:before {
content: "";
background-image: -webkit-linear-gradient(transparent 50%, rgb(0, 0, 0) 50%, rgb(0, 0, 0)),
-webkit-linear-gradient(0deg, transparent 50%, rgb(0, 0, 0) 50%, rgb(0, 0, 0));
height: 40px;
width: 40px;
border-radius: 40px;
position: absolute;
top: -20px;
left: -20px;
-webkit-transform: rotateZ(180deg);
opacity:0.3;
}
#inner:after {
content: "";
background: url('http://lorempixel.com/10/10/sports/1/') no-repeat;
background-position:0;
height: 10px;
width: 10px;
border-radius: 10px;
position: absolute;
top: -6px;
left: -6px;
-webkit-box-shadow: 0 0 10px rgb(255,255,255);
border: 1px rgb(255,255,255) solid;
}
更好的解释
原始的注释版本
http://jsfiddle.net/pixelass/nPjQh/10/
请查看下面代码中的注释
#inner {
background: rgba(0,0,0,0.5)
}
#inner:before {
background-image: -webkit-linear-gradient(transparent 50%, rgb(0, 0, 0) 50%, rgb(0, 0, 0)),
-webkit-linear-gradient(0deg, transparent 50%, rgb(0, 0, 0) 50%, rgb(0, 0, 0));
opacity: 0.5;
}
这个例子有一个完全透明的 div
...圆形是“吃豆人”形状:http://jsfiddle.net/pixelass/nPjQh/14/
![pacman shaped circle](https://istack.dev59.com/w37jj.webp)
管理圆的偏移量
看一下这些处理圆形偏移的例子(不使用伪元素)
OP代码的1:1复制(15像素偏移):http://jsfiddle.net/pixelass/nPjQh/12/
更小的偏移量(5像素):http://jsfiddle.net/pixelass/nPjQh/13/
(内容与圆形具有相同的不透明度)
偏移是如何工作的?
控制background-size
与top
和left
之间的关系
规则:
top = left;
background-size = elementHeight * 2 + top * 2;
看这朵花(它也只是一个带伪元素的
<div>
),
background-size
比圆形大,从而在底部创建了绿色的叶子。
http://jsfiddle.net/pixelass/nPjQh/15/
![one div makes a flower](https://istack.dev59.com/b3QXA.webp)
当前问题
请查看这个代码片段:http://jsfiddle.net/pixelass/nPjQh/16/
如果不像帖子顶部的示例那样使用另一层,则内容将是透明的。因此,如果您只需要在圆圈内放置图像,则上面的示例将很好地解决问题。
![conent is transparent](https://istack.dev59.com/DrwbU.webp)
如何解决这个问题
如果您需要在圆形内部放置画布或另一个div,则必须将圆形放在div上,并将所需的div层叠在圆形上方
请参见此fiddle:http://jsfiddle.net/pixelass/nPjQh/17/
稍作更改即可正常工作。从FIDDLE获取代码
![correcting the opacity issue](https://istack.dev59.com/Qv5Ip.webp)
不同的形状/高级样式
如果您使用具有平面边的不同形状,甚至可以在两个div的总和周围添加边框...或者甚至添加一个盒子阴影
仍然使用简单的标记...
<div id="foo">
<div id="bar">
</div>
</div>
请查看以下 jsfiddle 链接以获取 box-shadow 的代码示例: http://jsfiddle.net/pixelass/nPjQh/21/
![adding a box-shadow](https://istack.dev59.com/C0PKz.webp)
给圆形添加边框
使用-webkit-mask-image
,我们可以为圆形添加边框。
http://jsfiddle.net/pixelass/nPjQh/24/
![border on round element](https://istack.dev59.com/NPPxJ.webp)
更多例子:
周围四个圆圈
http://jsfiddle.net/pixelass/nPjQh/25/
标记:
<div id="foo">
<div id="bar1"></div>
<div id="bar2"></div>
<div id="bar3"></div>
<div id="bar4"></div>
</div>
![4 circles](https://istack.dev59.com/LjAjH.webp)
使用这种技术制作工具提示
http://jsfiddle.net/pixelass/nPjQh/31/
标记:
<div id="foo">
<div id="bar"></div>
I am a pure css tooltip with a semi-transparent background and a black border. <br/>
My width is static an my height is dynamic...
</div>
![css tooltip](https://istack.dev59.com/k95JN.webp)