沐鳴總代平台_CSS屬性*-gradient的實用價值

先介紹一下一個有趣的屬性 —— conic-gradient

圓錐漸變

對其感興趣是因為我發現它竟然可以用來做圓餅圖
比如這樣的:

這樣的:

其原理也很簡單:就是以起始點為中心,然後以順時針方向繞中心實現漸變效果。其必須接收多種顏色值參數,每個顏色值后可以跟兩個百分比,為當前顏色值的起始點和終止點(中間用空格隔開):

background: conic-gradient(pink 0 30%, yellow 0 70%, lime 0 100%);

還可以分開來寫:

background: conic-gradient(pink 0, pink 30%, yellow 30%, yellow 70%, lime 70%, lime 100%);

(第二種方式兼容性比第一種好一點)

慢着!上面第二張圖片不就是我們想要的嗎?
根據圖片,我們不難得出下面的代碼:

{
    width: 200px;
    height: 200px;
    background: conic-gradient(deeppink 0, deeppink 30%, yellowgreen 30%, yellowgreen 70%, teal 70%, teal 100%);
    border-radius: 50%;
}

But,這裏面完全是“靜態”的。

我們大概大部分人都用過echarts繪製圖形:根據後端傳來的數據渲染到echarts的Map對象的指定參數(數組)中就能得到一個符合要求的不同顏色显示的圓餅圖了。這用css怎麼做呢?

我們當然要藉助js的幫助 —— 因為css3推出了 自定義變量 ,它可以很好的讓css屬性與JavaScript變量相結合:
經過探索,目前比較好的實踐應該就是給gradient的顏色開始與結束位置設置為自定義變量,然後當JavaScript拿到數據后通過改變其值從而改變圓餅圖中的顏色分佈!

放一個以前寫過的演示demo:

:root{
	--zero:0;
	--one:50%;
}
.circle{
	width: 300px;
	height: 300px;
	border-radius: 50%;
	/* background: conic-gradient(red, yellow, lime, aqua, blue, fuchsia, red); */
	background: conic-gradient(red var(--zero) var(--one),yellow var(--one) 100%);
}
<div class="circle"></div>
<button id="but">點我改變圓餅圖分佈</button>
<script>
	but.onclick=function(){
		document.documentElement.style.setProperty('--zero', '10%');
		document.documentElement.style.setProperty('--one', '70%');
	}
</script>

如果要動態增加顏色值(比如新增調查對象),可以動態修改style中的屬性:

xxx.style.xxx="xxx";   //改變

這要比用“::after偽元素”實現起來方便多了!

偽元素的方式可能很多人也玩過:利用transform的rotate屬性將一個content盒子旋轉並显示部分以達到目的。

還有很多“騷操作”網上應該一搜一堆,這裏就不再贅述了(:相比於前兩年瀏覽器對此屬性的“漠不關心”到現在的部分支持,也是很大進步了,讓我們繼續期待吧)

關於 linear-gradient

這個屬性除了在一些網站上用作某個元素的背景以外,似乎並沒有什麼值得關注的地方:
比如 條紋背景
“如果多個色標具有相同的位置,它們會產生一個無限小的過渡區域,
過渡的起止色分別是第一個和最後一個指定值。從效果上看,顏色會在那
個位置突然變化,而不是一個平滑的漸變過程。”
因為漸變是一種由代碼生成的圖像,我們能像對待其他任何背景圖像那樣對待它,而且還可以通過 background-size 來調整其尺寸;並且由於背景在默認情況下是重複平鋪的,整個容器其實已經被填滿了水平條紋:

background: linear-gradient(#fb3 50%, #58a 50%);
background-size: 100% 30px;

垂直條紋的代碼跟水平條紋幾乎是一樣的,差別主要在於:我們需要在
開頭加上一個額外的參數來指定漸變的方向。在水平條紋的代碼中,我們其
實也可以加上這個參數,只不過它的默認值 to bottom 本來就跟我們的意
圖一致,於是就省略了。最後,我們還需要把 background-size 的值顛倒
一下:

background: linear-gradient(to right, #fb3 50%, #58a 0);
background-size: 30px 100%;

需要注意的是:linear-gradient如果加了第一個參數,則其默認方向就會變為“從下向上”的,為此,筆者還向菜鳥教程投過郵件建議他們在文檔中修改措辭。

“傳統的”僅僅改變linear-gradient第一個參數——角度值的方式或者通過background-size增加“精確度”的方式都不能有效的達到真正意義上完美的傾斜背景:它們總是會在大小改變或者換一個傾斜度時把整個圖案搞亂!
幸運的是,我們還有更好的方法來創建斜向條紋:一個鮮為人知的真相是 linear-gradient() 和 radial-gradient() 還各有一個循環式的加強版:repeating-linear-gradient() 和 repeating-radial-gradient()。
它們的工作方式跟前兩者類似,只有一點不同:色標是無限循環重複的,直
到填滿整個背景!

background: repeating-linear-gradient(45deg, #fb3, #58a 30px);


哦,對了,同上面一樣,所有的“-gradient”屬性在沒有限制起始位置和終止位置時都會有“漸變光暈”,如果我們改為下面這樣:

background: repeating-linear-gradient(60deg, #fb3 0 15px, #58a 0 30px);

看到這張圖你有沒有想到一個著名的案例——三角形?

background: #eee;
background-image: linear-gradient(45deg, transparent 75%, #bbb 0);

而我們以前用CSS一般是像這樣寫的:

width: 0;
height: 0;
border: 50px solid transparent;
border-top-color: black ;

其實,linear-gradient用處還遠遠不止這些…

radial-gradient及整體應用

我們大概都知道:滾動條是一種常見的界面控件,用來提示一個元素除了可以看到的內容之外,還包含了更多內容。但是,它往往太過笨重,在視覺上喧賓奪主,因此現代操作系統已經開始簡化它的外觀,當用戶不與可滾動的元素交互時,滾動條就會被完全隱藏。
目前已知的“去除滾動條”的方法中,最常用的有:::-webkit-scrollbar{display:none;} ,但是很顯然,IE上無法使用 —— 它只允許改變滾動塊的顏色。

在CSS3的時代,我們可以在想要加滾動條的地方外包裹一層div,為其設置overflow:hidden,內部用calc()函數動態計算width使其溢出!這可以有效解決IE下兼容性問題。

我們現在已經很少通過滾動條來滾動頁面了(更多的是使用觸摸手勢),但滾動條對於元素內容可滾動的提示作用仍然是十分有用的,哪怕對於那些沒有發生交互的元素也是如此;而且這種提示方式十分巧妙。
據說曾經 Google 推出了一款 RSS 閱讀器(已經沒了),它的用戶體驗設計師找到了一種非常優雅的方式來作出類似的提示:當側邊欄的容器還有更多內容時,一層淡淡的陰影會出現在容器的頂部和底部。就像這樣:

讓我們首先從一段簡單的結構代碼開始,一個帶有示意性內容的普通無序列表:

<ul>
	<li>Ada Catlace</li>
	<li>Alan Purring</li>
	<li>Schrödingcat</li>
	<li>Tim Purrners-Lee</li>
	<li>WebKitty</li>
	<li>json</li>
	<li>Void</li>
	<li>Neko</li>
	<li>NaN</li>
	<li>Cat5</li>
	<li>Vector</li>
	<li>Ada Catlace</li>
	<li>Alan Purring</li>
	<li>Schrödingcat</li>
	<li>Tim Purrners-Lee</li>
	<li>WebKitty</li>
	<li>Json</li>
	<li>Void</li>
	<li>Neko</li>
	<li>NaN</li>
	<li>Cat5</li>
	<li>Vector</li>
	<li>Ada Catlace</li>
	<li>Alan Purring</li>
	<li>Schrödingcat</li>
	<li>Tim Purrners-Lee</li>
	<li>WebKitty</li>
	<li>Json</li>
	<li>Void</li>
	<li>Neko</li>
	<li>NaN</li>
	<li>Cat5</li>
	<li>Vector</li>
	<li>Ada Catlace</li>
	<li>Alan Purring</li>
	<li>Schrödingcat</li>
	<li>Tim Purrners-Lee</li>
	<li>WebKitty</li>
	<li>Json</li>
	<li>Void</li>
	<li>Neko</li>
	<li>NaN</li>
	<li>Cat5</li>
	<li>Vector</li>
</ul>

我們可以給 <ul> 元素設置一些基本的樣式,讓它的高度略短於內容,從而讓其內容可以滾動:

overflow: auto;
width: 10em;
height: 8em;
padding: .3em .5em;
border: 1px solid silver;

接下來,有趣的事情即將發生。我們用一個徑向漸變在頂部添加一條陰影:

background: radial-gradient(at top, rgba(0,0,0,.2),transparent 70%) no-repeat;
background-size: 100% 15px;

現在,當我們滾動列表時,這條陰影會一直停留在相同的位置。這正是背景圖像的默認行為:它的位置是相對於元素固定的!不論元素的內容是否發生了滾動。這一點也適用於 background-attachment: fixed 的背景圖像。它們唯一的區別是,當頁面滾動時,後者是相對於視口固定的。有沒有辦法讓背景圖像跟着元素的內容一起滾動呢?

現在常見的值只有inherit、scroll、fixed,但是從W3C文檔中可以看到:後來為background-attachment 屬性增加了一個新的關鍵字,叫作 local !
如果將此屬性應用到這條陰影上,它會帶給我們正好相反的效果:當我們滾動到最頂端時,能看到一條陰影;但當我們向下滾動時,這條陰影就消失了。

但這不重要,我們的思路對了!

我想到了一個很常用的hack:我們需要兩層背景:一層用來生成那條陰影,另一層基本上就是一個用來遮擋陰影的白色矩形,其作用類似於遮罩層。生成陰影的那層背景將具有默認的 background-attachment 值(scroll),因為我們希望它總是保持在原位。我們把遮罩背景的 background-attachment 屬性設置為 local,這樣它就會在我們滾動到最頂部時蓋住陰影,在向下滾動時跟着滾動,從而露出陰影。

background: linear-gradient(white 30%, transparent),
 			radial-gradient(at 50% 0, rgba(0,0,0,.2),transparent 70%);
background-repeat: no-repeat;
background-size: 100% 50px, 100% 15px;
background-attachment: local, scroll;

沒錯,這就是linear-gradient的另一個應用 —— 漸變遮罩層!

但是現在我們會發現:現在只有上邊有,下邊怎麼搞?
這就需要用到css中的“簡寫”以及對*-gradient的理解了:如果不加第一個參數(不指明方向),則默認是從上到下漸變的,但是如果加了第一個參數但是沒有指明to bottom或100%,那麼它默認是從下向上漸變的!

background: linear-gradient(white 30%, transparent) top / 100% 50px,
	radial-gradient(at 50% 0, rgba(0,0,0,.2),transparent 72%) top / 100% 15px,
	linear-gradient(to top, white 15px, hsla(0,0%,100%,0)) bottom / 100% 50px,
 	radial-gradient(at bottom, rgba(0,0,0,.2), transparent 72%) bottom / 100% 15px;
background-repeat: no-repeat;
background-attachment: local, scroll,local, scroll;

來自:https://yunxiaomeng.blog.csdn.net/article/details/108784246

站長推薦

1.雲服務推薦: 國內主流雲服務商,各類雲產品的最新活動,優惠券領取。地址:阿里雲騰訊雲華為雲

2.廣告聯盟: 整理了目前主流的廣告聯盟平台,如果你有流量,可以作為參考選擇適合你的平台點擊進入

鏈接: http://www.fly63.com/article/detial/10047