全目錄
本系列文章,主要是圍繞css3屬性,實現我們常見的各種效果,這些效果都是我們實戰開發中經常可以用到的效果:
- css揭祕實戰技巧- 背景與邊框 [一]
- css揭祕實戰技巧- 形狀 [二]
- css揭祕實戰技巧 - 視覺效果[三]
- css揭祕實戰技巧 - 字型排印[四]
- css揭祕實戰技巧 - 使用者體驗[五]
- css揭祕實戰技巧 - 結構與佈局[六]
- css揭祕實戰技巧 - 過渡與動畫[七]
前言
- 單側投影
- 不規則投影
- 染色效果
- 毛玻璃效果
- 折角效果
一:單側投影
首先,我們來說明一下box-shadow 屬性值的含義:
box-shadow: 0px 0px 3px red inset;
第一個從引數:表示陰影水平向右的偏移量
第二個引數:表示陰影垂直向下的偏移量
第三個引數:表示陰影的模糊半徑
第四個引數:表示陰影的顏色
第五個引數:表示擴張半徑,根據該值對陰影進行擴大和縮寫
第六個引數:表示陰影向內還是向外,預設是outset向外,也可以設定為inset。
複製程式碼
我們來看一下具體效果,首先是一個矩形:
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/467dab7bd5d3385ab8c35e2867c016c84073ba77c71452f8ea0796070d9e2e3c.png)
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/daa8fcb9327f44f9238bf0997f439c3f9b37c5a299c5fd32e243f0ffb20d0635.png)
width: 200px;
height: 100px;
background: yellow;
box-shadow: 0px 0px 10px red;
複製程式碼
效果2: 兩側陰影
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/76dbdf6257c7bd9c90fbd970072c633c8fa0d226d8517758e97902bc75fe6ea4.png)
width: 200px;
height: 100px;
background: yellow;
box-shadow: 5px -5px 10px red;
複製程式碼
效果3:單側投影 這時,我們可能直接會想到,只設定垂直或者水平一個方向的偏移量不就可以了嘛, 程式碼如下:
width: 200px;
height: 100px;
background: yellow;
box-shadow: 0px 5px 10px red;
複製程式碼
實現的效果如下:
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/834077f3a2367e9a41a75f3c7cfa31c8d6634a09c7a258abe3945b273b8d5f36.png)
這時,我們才醒悟過來,我們設定的陰影寬度為10px, 對於垂直方向,因為我們設定了向下偏移10px, 所以看上去,top方向是沒有任何陰影的,但是left和right方向不管怎麼偏移,肯定會有其中一個方向是有陰影的,那麼,怎麼樣才可以實現真正的單側陰影呢?
啦啦啦,box-shadow的第四個長度引數隆重登場:它排在 模糊半徑引數之後,稱作擴張半徑。這個引數會根據你指定的值去擴大或 (當指定負值時)縮小投影的尺寸。舉例來說,一個 -5px 的擴張半徑會把投 影的寬度和高度各減少 10px(即每邊各 5px)。 程式碼如下:
width: 200px;
height: 100px;
background: yellow;
box-shadow: 0px 10px 10px -5px red;
複製程式碼
最終的效果如下:
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/d91bbb12ebf66af33aa204d4b340aab71dde9d5b1bdf2cb06d3c96ed7d106b22.png)
效果4: 雙側投影
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/c6d023a749f5f04a2220e24c8f1bd12b806fa7aa9be2dd14a251c0fe6e2bedb0.png)
width: 200px;
height: 100px;
background: yellow;
box-shadow: 0px 10px 10px -10px red, 0px -10px 10px -10px red;
複製程式碼
二:不規則投影
首先,說明一下,什麼是不規則投影,我們平時設定陰影可能大多數都是給一個正方形或者長方形,甚至圓來設定陰影,這些情況下,box-shadow的表現是非常好的,但是如何遇到一些不規則的圖形呢?例如如下效果:
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/7f6ddb78d65abdc53c131516d0d1478350363ceea2c2f9544768e699115c7243.png)
這裡以氣泡的效果為例:
首先,我們可以想到,這是由一個正方形加一個三角形實現的(三角形可以實現原理可以檢視 第二節形狀篇 ),我們先實現此效果:
程式碼如下:
div {
width: 200px;
height: 200px;
background: #dfb311;
position: relative;
border-radius: 10px;
font-size: 30px;
display: flex;
align-items: center;
justify-content: center;
}
div::after {
content: '';
display: inline-block;
border: 20px solid #dfb311;
border-color: transparent transparent transparent #dfb311;
position: absolute;
right: -40px;
top: calc(50% - 20px);
}
複製程式碼
效果如下:
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/3588bc21a29e6aac329cb1c99573b890e8244ab3dc439667fe3f8416d9268d0c.png)
接下來,我們來設定陰影效果,我們很直接的想到box-shadow,我們在div元素中新增該屬性:
div {
box-shadow: 2px 2px 10px rgba(0, 0, 0, .5)
}
複製程式碼
效果如下:
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/6c39922e5b8e3183c0cea49209d4a38534fa7541302caeeefa8a11c1948cb990.png)
此時,我們可以看到正方形的陰影效果有了,但是三角形還沒有,那麼我們再給三角形加一個box-shadow試試看
div::after{
box-shadow: 2px 2px 10px rgba(0, 0, 0, .5)
}
複製程式碼
效果如下:
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/3940802ffe75f97eaeb1e1e3e8871b118e385709333bedd413c0141d4fa1f5c0.png)
怎麼成這樣了?原來三角形的實現原理其實本身就是一個正方形,只不過另外三條邊框的顏色為透明,那麼,接下來該如何給這種不規則的圖形加陰影效果呢?答案就是採用css濾鏡:drop-shadow();
div {
filter: drop-shadow(2px 2px 10px rgba(0,0,0,.5));
}
複製程式碼
啦啦啦,這樣就得到我們想要的效果啦。
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/4cb558d5ec291ba6bf9d8ecad15dbc33cd623488e6dbb39848af7dc8caf43df8.png)
三:染色效果
我們來看一下比較常見的一個效果:
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/26712e8c560a36364fb7d73767fa025b738a3dc7bb4a5b0193ad918030945be7.png)
方案一:讓ui給兩種場景的圖片,然後切換即可,但是很顯然這樣會增加網路請求,而且如果要替換成另外一種效果,就要把所有圖片全部替換,成本有點高。
方案二:給圖片上層新增一層元素,並且設定透明度,這樣看上去有染色效果,但是並不是真正的對圖片進行了染色,同時也大大削弱了圖片的對比度。
方案三: 採用濾鏡的方案
首先,這是一張正常的圖片:
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/5a7e8bdd64bbf7be7ba492dbf021131a766b5e2637a8b463d0b9c4768b378f6a.png)
我們來降低一下飽和度:
程式碼如下:
filter: sepia(1);
複製程式碼
效果如下:
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/64a451732214ffaba306ac53bbc81cc0ac63603bb8a344007eeab4a30a64b0a2.png)
我們再來提升一下飽和度:
程式碼如下:
filter: saturate(4);
複製程式碼
效果如下:
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/3b5046f44397d1b343a0304378c568dcefadeed22649a23ae8a7c2d142dd95b5.png)
我們再來對每個畫素的色相進行指定角度進行偏移
程式碼如下:
filter: hue-rotate(295deg);
複製程式碼
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/d6f9fb8dc1f1832c5d78e66ac96f2b8ec3529eece718e41b3794c9b853f595db.png)
以上三種濾鏡我們一起來使用:
filter: sepia(1) saturate(4) hue-rotate(295deg);
複製程式碼
效果如下:
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/85daf7fb6267e8d0e6beca3de6f5687c2c9689e3107d3f62c256e313cb6ef754.png)
這就是我們想要的效果(可能效果沒有原圖好哈,這裡只是說明一下這幾種濾鏡的作用),而且,此時你可能有個疑問,到底我該設定多少的飽和度,或者色相呢?這就涉及到我們的色彩模型,參考連結:HSL色彩模型
四:折角效果
首先,我們來看一下,比較常見的一個折角效果:
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/ccf67ed65a34518ec912e74ccaff9dc7f0f415874730d76612921fd02111b33a.png)
方案一:直接讓設計給一張背景
方案二:採用border去實現三角形,然後定位到右上角
方案三:採用漸變去實現
div {
width: 300px;
height: 200px;
background: green;
background:
linear-gradient(to left bottom,
transparent 50%, rgba(0,0,0,.4) 0)
no-repeat 100% 0 / 2em 2em,
linear-gradient(-135deg,
transparent 1.5em, green 0);
}
複製程式碼
效果如下:
![css揭祕實戰技巧 - 視覺效果[三]](https://i.iter01.com/images/7cd764a5855ad8d185187fcf3674928171d21b4e5ddbb99099097f82903d44a0.png)