当前位置: 首页 > Web前端 > CSS

css秘籍-视觉效果

时间:2023-03-30 22:18:42 CSS

投影知识点box-shadow:[inset]?注意:元素正下方的投影被截掉了,没有;和text-shadow不同的是,文字下方的投影不会被裁切。box-shadow的第三个参数是模糊半径。如果设置为4px,则投影大小比元素本身大8px。box-shadow的第四个参数是扩展半径。指定整数为扩大,负数为缩小。单面投影box-shadow:010px8px-8pxblack;相邻侧投影box-shadow:6px6px12px-6pxblack;双面投影box-shadow无法指定水平或垂直方向的放大或缩小,所以只能使用两层投影来达到目的。框阴影:6px012px-6px黑色,-6px012px-6px黑色;不规则投影box-shadow非常适合用border-radius生成的矩形或形状,但它非常适合除此之外的形状,它将不起作用。例如:border:10pxdashedorange;盒子阴影:2px2px3pxrgba(0,0,0,.5);可以使用新的css属性filter,使用一些函数,比如blur()、grayscale()、drop-shadow()等,就可以达到想要的效果。drop-shadow()的参数与box-shadow相同,只是没有扩展半径和关键字inset,但不支持逗号分隔的多层投影语法。边框:10px橙色虚线;过滤器:阴影(2px2px3pxrgba(0,0,0,.5));背景:线性渐变(45deg,透明20px,橙色0)左下角/50%,线性渐变(-45deg,透明20px,orange0)rightbottom/50%,linear-gradient(135deg,transparent20px,orange0)lefttop/50%,linear-gradient(-135deg,transparent20px,orange0)righttop/50%;背景-重复:不重复;滤镜:阴影(2px2px5pxrgba(0,0,0,.5));.talkbox{背景色:橙色;边界半径:20px;位置:相对;过滤器:阴影(2px2px3pxrgba(0,0,0,.5));}.talkbox::after{content:'';显示:块;框大小:边框框;宽度:50px;高度:50px;左边框:25px纯橙色;border-top:25px实心透明;border-bottom:25px实心透明;位置:绝对;顶部:25%;left:100%;}需要注意的是,任何非透明的部分都会被drop-shadow()打上投影。(这不是很好的体验)颜色:橙色;边框:10px实心;文本阴影:2px2px黄绿色;过滤器:阴影(2px2px2px黑色);着色效果使用滤镜为图片添加滤镜效果。主要用到了sepia()、saturate()、hue-rotate()等函数。原图sepia()去饱和橙黄色染色效果saturate()增加饱和度hue-rotate()抵消每个像素的色调,如果是粉色就可以过度动画。最终的代码是.filter-img{transition:.5sfilter;过滤器:棕褐色(.5)饱和(4)色调旋转(295deg);}.filter-img:hover,.filter-img:focus{过滤器:无;}混合模式方案为了避免上面滤镜方式的淡化和不自然效果,还可以使用“混合模式”,它控制上层元素的颜色和下层元素的颜色混合的方式。染色的混合模式是luminosity,保留了上层元素的hsl高光信息,吸收了下层的色相和饱和度信息。具体来说,可以分为两种方式。方法一:

方法二:
.tinted-img{background:url(./image/花.jpg);宽度:300px;高度:300px;背景尺寸:封面;背景色:hsl(335,100%,50%);背景混合模式:亮度;transition:.5sbackground-color;}.tinted-img:hover{background-color:transparent;}这里需要澄清一点,混合模式不像滤镜那样可以设置动画。使用background-blend-mode属性允许背景的每一层与其底层背景混合。当我们只有背景图片和透明背景颜色时,不会有任何混合效果。所以动画可以按照这个原则来设置。磨砂玻璃效果场景:背景是花哨的图片,通过在文字下方使用半透明颜色,文字可读。

Loremipsumdolorsitamet...

失败案例一:.wrapper{背景:url(./image/flower.jpg)0/cover;}.main{background:hsla(0,0%,100%,.3);}字体不清晰,增加透明度:不是很漂亮...失败案例2:使用blur()过滤器。.main{filter:blur(2px);}(⊙o⊙)...连字体都模糊了。解决方案:按照之前提到的“平行四边形”方案,在不影响文字的情况下,为伪元素设置模糊滤镜。.wrapper{宽度:600px;高度:300px;背景:url(./image/flower.jpg)0/封面;显示:弹性;证明内容:居中;对齐项目:中心;}.main{宽度:70%;高度:65%;填充:1em;字体大小:1.2em;背景:hsla(0,0%,100%,.3);位置:相对;z-索引:1;当索引不是auto时,将创建级联上下文*/overflow:hidden;}.main::before{content:'';位置:绝对;顶部:0;右:0;底部:0;左:0;背景:url(./image/flower.jpg)0/封面;过滤器:模糊(20px);z-指数:-1;/*负的z-index会落在它所在层级上下文的背景之上,这里也就是.main元素的背景之上,文本之下。*/边距:-30px;/*因为边缘的模糊效果会根据模糊半径的长度进行裁切,所以要扩展模糊元素,对于扩展的部分要隐藏父元素*/},但需要说明一重点是堆叠顺序的问题。如果直接在伪元素中设置z-index为0,它会直接运行在最外层背景色的下面,所以层叠顺序很复杂。可以参考如下:深入理解CSSContext中的堆叠和堆叠顺序看完文章后发现很多属性都可以创建堆叠上下文,比如display:flex,filter,mix-blend-mode,and很快。转角效果45°转角背景:#58a;/*后备样式*/背景:线性渐变(-135deg,透明50%,rgba(0,0,0,.4)0)不重复100%0/2em2em,线性渐变(-135deg,透明1.5em,#58a0);注意1.5em是按三角形计算的,√2em四舍五入为1.5。其他角度的每个转向节都需要进行复杂的计算,这里以30°为例。非45°角和45°角的区别在于倒角的角度不同。所以实现思路不同。使用伪元素模拟角点,计算出的长宽与背景切角相反;以右下角为中心逆时针旋转30°;往上移动一定距离(需要调动初中几何基础),再添加一些装饰品更真实。.note{背景:#58a;背景:线性渐变(-150deg,透明1.5em,#58a0);位置:相对;/*装饰*/border-radius:.5em;}.note::before{content:"";宽度:1.73em;高度:3em;位置:绝对;顶部:0;右:0;背景:线性渐变(到左下角,透明50%,rgba(0,0,0,.2)0,rgba(0,0,0,.4));变换原点:右下角;变换:平移(-1.3em)旋转(-30deg);/*注意:先平移后旋转和先旋转后平移效果是不一样的!*//*装饰*/border-bottom-left-radius:inherit;box-shadow:-.2em.2em.3em-.1emrgba(0,0,0,.15);}代码不够干,现在只能使用预处理器mixin。