木灵鱼儿
阅读:3052
给伪元素也加上box-shadow
在设置一些tag标签样式的时候,我们一般都是设置为一边箭头的标签样式,这个箭头一般都是使用伪元素before来进行模拟,但是当我们想要给这个标签加上阴影box-shadow的时候,你会发现你的阴影并不能应用的伪元素上。
我们先看下具体代码:
HTML:
<div class="div1">tag</div>
CSS:
.div1 {
display: inline-block;
line-height: 20px;
background-color: currentcolor;
color: #00AAFF;
padding: 5px 10px;
margin-left: 50px;
position: relative;
box-shadow:0 0 3px #666;
}
.div1:before {
content: "";
position: absolute;
left: 0;top: 0;
margin-left: -15px;
border-style: solid;
border-width: 15px;
border-color: transparent;
border-left: none;
border-right-color: inherit;
}
.div1:after {
content: "";
position: absolute;
top: 50%;
left: 0;
width: 5px;
height: 5px;
margin-left: -2.5px;
margin-top: -2.5px;
background-color: white;
border-radius: 50%;
box-shadow: 0 0 5px #999;
}
.div1:first-line {
color: white;
}
显示效果:
这时有人就会说了,你只是给父元素加的阴影,已经block化的伪元素是一个子元素,怎么可能会有阴影,况且box-shadow也没有继承性!
好,那么我们就以这个为突破口,进行修改!
给.div1:before添加一个box-shadow:0 0 3px #666;结果会如何呢??
显示效果:
看来我们还是不能太天真啊,我们用伪元素模拟三角形,只是利用边框的特性,而不是切割,边框还是存在,只是透明了,所以给添加了阴影后,就会把完整的形状给展示出来!
突然,我灵机移动,切割~~~emmmm....或许用clip-path: polygon();也许会有用。
那就干起来!
.div1:before {
content: "";
position: absolute;
left: 0;top: 0;bottom: 0;
margin-left: -15px;
width: 15px;
background-color: inherit;
box-shadow: 0 0 3px #666;
clip-path: polygon(100% 0,100% 100%,0 50%);
}
效果图:
你会发现根本就不会有box-shadow,因为clip-path裁剪连阴影都给裁剪了。
到了这里是不是很失望,不要担心,下面才是我们的重头戏!
filter: drop-shadow(0 0 2px #999);
我们可以使用css3的滤镜给他添加阴影,而且只用给父元素添加就可以。不过这个滤镜也有坏处,就是他的定义中有一条是这样的:
任何非透明部分都会被打上阴影
简单点来说,透明的部分都会有阴影,其中也包括div里面的文字哦!
但是我们不怕,因为我们本身就已经给这个div加了背景色,所以这个定义并不会影响到我们正常使用,于是乎,只要给div加上这个就行!
.div1 {
filter: drop-shadow(0 0 2px #999);
}
效果图:
完美达到我们的效果,而且使用的是css3效果,如果不支持,整个tag标签也不会有啥形变,只是阴影没有了,并不会影响到正常的浏览,如果你想要兼容如ie这样的浏览器,你可以试着去http://www.w3.org/TR/filter-effects/找到对应滤镜函数的svg滤镜,然后添加一条url的代码:filter:url(xxxxx.svg#drop-shadow);放在刚刚使用的代码前面!
我们再讲讲drop-shadow的属性:
filter: drop-shadow(0 0 2px #999);
- 第一个0指的是X轴的偏移量。
- 第二个0指的是Y轴的偏移量。
- 第三个2px指的是模糊程度。
- 第四个#999就是阴影的颜色。
注意:drop-shadow不支持扩张半径和内阴影inset。
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿 - 有梦就能远航站点。未经许可,禁止转载。

相关推荐
vue3 filter过滤器
vue3直接移除了filter过滤器,官方推荐,如果要使用过滤器可以使用computed计算属性和method函数来代替。如果使用了全局过滤器,官方也提供了一个属性来进行迁移修复,但是也只推荐用于迁移。const app = createApp(App) //给当前app的全局属性上挂载一个过滤器对象 app.config.globalProperties.$filters = { currencyUSD(value) { return '$' + value } }使用的时候:<template> <h1>Bank Account Bala...
vue cli 创建全局过滤器
最近遇到一个需求,希望在无内容的情况下能用--来表示无内容占位。所以,想来想去,用过滤器最好,然后既然是通用性,那么直接全局就行了。创建过滤器我们可以创建一个js文件,然后export导出,再到main文件里面导入并激活。创建一个名为globalFilters.js的过滤器文件,这个文件一般放在utils文件夹中,当然你也可以随意,只要能正确引入就行。// 全局过滤器 // 无内容占位符 const placeholder = (value) => { if (!value) return "--"; return value; }; export ...
有趣的hue-rotate滤镜
css3的滤镜真的非常强大,比如这个hue-rotate滤镜,可以让图片的一些颜色变成想要的颜色,当然黑色白色除外,因为这个滤镜的原理就是改变图片的色相,如果你用过ps的话就会知道,再ps里面可以通过改变图片的色相来改变图片的颜色,而且效果很方便,不会有颜色与颜色之前的不自然感。下面我们来看看吧!我门先找一张图片:这张应该是红宝石的壁纸,我们先用ps颜色拾取工具或者红宝石的hsl色环角度。红色hsl为4deg,那么我们试着把他变成紫色的!已知紫色hsl色环值为282deg,我们需要添加多少的角度值才能等于282deg,于是:282-4=278,我们需要添加278deg,于是代码这么写;i...

bernard
Google Chrome Windows 10牛啊,学到了,第一次给伪元素加阴影