前言
之前的實踐中我們瞭解並熟悉了background-size,以及backgroud-clip,今天我們學習並實踐的是線性漸變linear-gradient.
概念
CSS linear-gradient() 函式用於建立一個表示兩種或多種顏色線性漸變的圖片。其結果屬於<gradient>
資料型別,是一種特別的<image>
資料型別。
基本語法
linear-gradient([<angle> | to <side-or-corner>]? , <color-stop-list>)
這個函式(特性)接受的第一個引數是漸變的角度,他可以接受一個表示角度的值(可用的單位deg、rad、grad或turn)或者是表示方向的關鍵詞(top、right、bottom、left、left top、top right、bottom right或者left bottom)。第二個引數是接受一系列顏色節點(終止點的顏色)。
渲染容器
其本身沒有單獨容器概念,大小隻能是元素的border-box.不能選擇性的線性漸變內容盒等。
漸變角度
預設值 to bottom 等於 180deg,如果是目標的效果可以不再額外設定。漸變夾角為元素中心點垂直線與漸變線之間形成的夾角。(借用大漠老師的圖)
特別備註:
1:這裡的夾角不是與水平線的,我當初也以為是水平夾角;
2.就是如果你希望漸變線到元素的右上角部分,這個部分不一定是45deg,而關鍵字設定的top right 一定是右上角。
漸變線
-
圖解漸變線的變化
-
從上面的圖中我們可以看到漸變線,也就是當前中心點的垂線旋轉漸變角度之後的線,它的長度是與寬高以及角度相關的,可能會超出容器。如果角度為90,那麼漸變線長度為元素的高,如果角度為0,那麼長度為元素的寬度。其他角度自己可以根據公式去計算,
sin(a)*w+cos(a)*h
. -
有興趣的同學可以參照我的圖紙看下這個公式如何得來的,比較簡陋,嘿嘿。
-
解題過程如下:
希望你數學不是那麼差可以看懂哦。如果有更好的方法歡迎反饋。
l1=h/2/cos(a);
l2=d2*sin(a);
d2=w/2-d1;
d1=l1*sin(a);
最終計算 l=2*(l1+l2)=w*sin(a)+h*cos(a);
複製程式碼
- 漸變線的長度直接影響線性漸變的細膩程度。長度越長,過渡色越多。
漸變節點
漸變節點語法:<color> [<percentage> | <length>]?
,每一個漸變點都可以控制其開始的位置,如果你不設定那麼會按照起止進行等分過渡。可以參考我的demo截圖。
相容性
大部分現代瀏覽器支援這一特性,你可以採用auto-prefix模組支援這個hack的部分。
場景案例
在我們的案例中,我們需要實現的場景是實現中劃線背景但是內容區保持無線。
程式碼實現
實現思路很簡單,利用線性漸變實現背景的黑色線條,通過位置控制線條的粗細。
h2{
text-align:center;
line-height:50px;
background:linear-gradient( transparent 49%,#000 49%,#000 51% ,transparent 51%);
span{
padding:0 10px;
background:#fff;
}
}
複製程式碼
最終效果圖
發散思考
- 你之前的場景是如何實現的?
我之前的場景的話,也是類似的思路不過是利用的一個線性背景做x方向的重鋪,然後中間也是用span標籤做白色背景。
- 這種方案的缺點可能是什麼?不考慮相容
可能的問題有以下幾個方面吧:1 背景不是線性漸變可以實現的,還是需要背景圖去做 ;2 如果文字有兩行或者更多怎麼實現 3 元素背景是透明的時候,span的背景會對映線條,如果也設定透明,會有透明效果疊加;
- 還有什麼方案可以嘗試?
這裡建議給大家一種flex的佈局方案也可以實現,佈局更為常規,利用了flex彈性盒的原理,當然橫線背景也是漸變,但span部分沒有漸變也沒有背景色覆蓋。程式碼如下:其中flex:1就是實現利用剩餘空間的。
<h2 class="flex-demo">
<span class="line"></span>
<span class="title">立即註冊</span>
<span class="line"></span>
</h2>
.flex-demo{
display:flex;
texxt-align:center;
.line{
background:linear-gradient( transparent 49%,#000 49%,#000 51% ,transparent 51%);
flex:1
}
.title{
}
}
複製程式碼
有關連結
我的電子書
作者:RobinsonZhang
連結:https://juejin.im/post/5aa75da9f265da23994e3084
來源:掘金
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。