AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

不一樣的SVG!SVG在CSS背景平鋪中的應用

來源: 責編: 時間:2024-05-16 17:44:46 135觀看
導讀再次介紹一些你可能沒用過的SVG小技巧。再次介紹一些你可能沒用過的SVG小技巧。有時候會遇到一些完全相同的圖形,如果能用上 CSS背景平鋪,那就再合適不過了。舉個例子,有這樣一個按鈕。相比普通的按鈕,多個左右兩個小裝飾

再次介紹一些你可能沒用過的SVG小技巧。NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

再次介紹一些你可能沒用過的SVG小技巧。NVc28資訊網——每日最新資訊28at.com

有時候會遇到一些完全相同的圖形,如果能用上 CSS背景平鋪,那就再合適不過了。舉個例子,有這樣一個按鈕。NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

相比普通的按鈕,多個左右兩個小裝飾,如果是你,會怎樣實現呢?NVc28資訊網——每日最新資訊28at.com

假設這個小圖標是a.svg,想了一下,應該有以下幾種方式。NVc28資訊網——每日最新資訊28at.com

1.偽元素

剛好用上::before和::after,設置相同的背景就行了,示意如下:NVc28資訊網——每日最新資訊28at.com

button::before,button::after{%20%20content:'';%20%20background:%20url(a.svg)}

2.%20多重背景

利用 CSS背景可以疊加的特性,設置兩個背景就可以了,分別定位,示意如下:NVc28資訊網——每日最新資訊28at.com

button{%20%20background:%20url(a.svg)%2010px%20center%20no-repeat,url(a.svg)%20right%2010px%20top%20center%20no-repeat}

這兩種方式都是不錯的方式,但是感覺還是有些浪費,畢竟把兩個相同的圖案重復寫了兩遍。NVc28資訊網——每日最新資訊28at.com

為啥不能直接用背景平鋪呢?因為無法直接設置平鋪的間隔,就像這樣。NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

這時,如果能充分發揮SVG的特性,就可以僅僅使用平鋪的方式來實現我們想要的效果了,一起看看吧~NVc28資訊網——每日最新資訊28at.com

一、SVG的自適應和viewBox

就以上面的小圖標為例,從 Figma中可以復制這段svg,如下:NVc28資訊網——每日最新資訊28at.com

<svg%20width="16"%20height="16"%20viewBox="0%200%2016%2016"%20fill="none"%20xmlns="http://www.w3.org/2000/svg">%20%20%20%20<path%20d="M15.021%208.028L15%208.027c-.262-.26-.876-.747-2.008-.701.13-.314.027-1.204-.676-1.227.179.574-.803.974-1.361%201.155-.484.156-1.025.344-1.16.622l-.437-.003.002-.43-.276-.001-.004.428-.25-.002c-.028-.022-.058-.047-.091-.07a.643.643%200%200%200-.316-.29.663.663%200%200%200-.21-.22%203.071%203.071%200%200%200-.109-.157l.002-.21.43.004.003-.277-.43-.004.002-.436c.283-.127.478-.667.644-1.152.19-.555.606-1.53%201.18-1.341-.013-.704-.902-.822-1.216-.695.063-1.135-.417-1.754-.67-2.02V.977L8.036.99%208.028.977l-.001.02c-.26.263-.747.877-.701%202.009-.314-.13-1.204-.027-1.228.676.574-.179.974.803%201.155%201.362.157.484.345%201.025.622%201.159l-.003.437-.43-.002v.277l.427.003-.002.25c-.022.028-.046.058-.069.091a.643.643%200%200%200-.29.317.664.664%200%200%200-.222.21%203.07%203.07%200%200%200-.156.108l-.21-.002.004-.43-.276-.002-.004.43-.436-.002c-.127-.283-.667-.478-1.152-.644-.555-.19-1.53-.606-1.341-1.18-.704.013-.822.902-.695%201.216-1.135-.063-1.754.417-2.02.67H.977l.012.012-.012.009.02.001c.263.26.877.747%202.009.702-.13.314-.027%201.203.676%201.227-.179-.574.803-.974%201.362-1.155.484-.157%201.024-.345%201.159-.622l.437.003-.002.43h.277l.003-.427.25.002c.028.022.058.046.091.069a.643.643%200%200%200%20.317.29c.058.101.135.172.21.222.04.06.077.114.108.156l-.002.21-.43-.004-.002.276.43.004-.002.437c-.283.127-.478.666-.644%201.15-.19.556-.606%201.532-1.18%201.342.013.705.902.822%201.216.696-.063%201.134.417%201.753.67%202.02v.022l.012-.011c.004.003.006.007.009.012l.001-.021c.26-.263.747-.877.702-2.009.314.13%201.203.027%201.227-.676-.574.179-.974-.803-1.155-1.362-.157-.483-.345-1.024-.622-1.159l.003-.437.43.002v-.277l-.427-.003.002-.25c.022-.028.046-.058.069-.091a.643.643%200%200%200%20.29-.317.664.664%200%200%200%20.222-.21c.06-.04.114-.077.156-.108l.21.002-.004.43.276.002.004-.43.437.002c.127.283.666.478%201.15.644.556.19%201.532.606%201.342%201.18.705-.013.823-.902.696-1.216%201.134.063%201.753-.417%202.02-.67h.022a1.093%201.093%200%200%201-.011-.012c.003-.004.007-.006.012-.009h-.002z"%20fill="#000"/></svg>

嗯,看著非常亂,沒關系,我們不必關注里面的細節。NVc28資訊網——每日最新資訊28at.com

我們直接放在 html 中來展示這段svg,效果是這樣的。NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

因為這段 svg有自帶的尺寸,最后展示的就是16%20*%2016的大小。NVc28資訊網——每日最新資訊28at.com

如果我們手動改變這個svg的尺寸呢?為了方便觀察,我們給svg添加一個邊框,如下:NVc28資訊網——每日最新資訊28at.com

svg{ width:%20200px;%20%20height:%20100px;%20%20outline:%201px%20dashed;}

你猜會是什么樣的?NVc28資訊網——每日最新資訊28at.com

下面有%203%20個選項。NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

思考一分鐘...NVc28資訊網——每日最新資訊28at.com

思考完成,答案是A,你猜對了嗎?NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

為什么會這樣呢?有點類似于object-fit:contain的效果。其實這是viewBox造成的,viewBox會按照尺寸等比放大從而鋪滿整個svg。NVc28資訊網——每日最新資訊28at.com

有關 viewBox的更多介紹,可以參考張鑫旭老師的這篇文章:理解SVG%20viewport,viewBox,preserveAspectRatio縮放。NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

如果去除viewBox,svg內部該是什么樣就是什么樣,也就是仍然是16*16的大小。NVc28資訊網——每日最新資訊28at.com

<!--去除viewBox屬性--><svg%20width="16"%20height="16"%20fill="none"%20xmlns="http://www.w3.org/2000/svg">%20%20...</svg>

結果如下:NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

也就是說,在去除viewBox之后,無論svg尺寸是多少,里面的圖標都不會變化。NVc28資訊網——每日最新資訊28at.com

看似好像沒什么用?NVc28資訊網——每日最新資訊28at.com

其實用處可大了,可以讓背景以我們想要的方式平鋪,那就來看接下來的應用。NVc28資訊網——每日最新資訊28at.com

二、自適應尺寸與背景平鋪

現在來簡單實現文章開頭所示的按鈕效果。html很簡單,就一個標簽。NVc28資訊網——每日最新資訊28at.com

<button>召喚卡牌</button>

然后簡單裝飾一下,繪制圓角和背景。NVc28資訊網——每日最新資訊28at.com

button{%20%20border:%200;%20%20outline:%200;%20%20padding:%208px%2036px;%20%20font-size:%2012px;%20%20line-height:%2016px;%20%20border-radius:%2030px;%20%20color:%20#FFEFDB;%20%20background:%20#FF2A2A;}

效果如下:NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

接下來,我們要用上前面的那段svg,先去除viewBox屬性,為了能夠通過背景尺寸控制svg大小,我們可以將svg的尺寸改成100%。NVc28資訊網——每日最新資訊28at.com

示意如下:NVc28資訊網——每日最新資訊28at.com

<svg%20width="100%"%20height="100%"%20fill="none"%20xmlns="http://www.w3.org/2000/svg">%20%20...</svg>

然后將這段svg轉換成css內聯格式,推薦用張鑫旭老師的在線轉換工具。NVc28資訊網——每日最新資訊28at.com

SVG在線壓縮合并工具。NVc28資訊網——每日最新資訊28at.com

可以得到這樣一段。NVc28資訊網——每日最新資訊28at.com

--icon:%20url("data:image/svg+xml,%3Csvg%20width='16'%20height='16'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3E%3Cpath%20d='M15.021%208.028L15%208.027c-.262-.26-.876-.747-2.008-.701.13-.314.027-1.204-.676-1.227.179.574-.803.974-1.361%201.155-.484.156-1.025.344-1.16.622l-.437-.003.002-.43-.276-.001-.004.428-.25-.002c-.028-.022-.058-.047-.091-.07a.643.643%200%200%200-.316-.29.663.663%200%200%200-.21-.22%203.071%203.071%200%200%200-.109-.157l.002-.21.43.004.003-.277-.43-.004.002-.436c.283-.127.478-.667.644-1.152.19-.555.606-1.53%201.18-1.341-.013-.704-.902-.822-1.216-.695.063-1.135-.417-1.754-.67-2.02V.977L8.036.99%208.028.977l-.001.02c-.26.263-.747.877-.701%202.009-.314-.13-1.204-.027-1.228.676.574-.179.974.803%201.155%201.362.157.484.345%201.025.622%201.159l-.003.437-.43-.002v.277l.427.003-.002.25c-.022.028-.046.058-.069.091a.643.643%200%200%200-.29.317.664.664%200%200%200-.222.21%203.07%203.07%200%200%200-.156.108l-.21-.002.004-.43-.276-.002-.004.43-.436-.002c-.127-.283-.667-.478-1.152-.644-.555-.19-1.53-.606-1.341-1.18-.704.013-.822.902-.695%201.216-1.135-.063-1.754.417-2.02.67H.977l.012.012-.012.009.02.001c.263.26.877.747%202.009.702-.13.314-.027%201.203.676%201.227-.179-.574.803-.974%201.362-1.155.484-.157%201.024-.345%201.159-.622l.437.003-.002.43h.277l.003-.427.25.002c.028.022.058.046.091.069a.643.643%200%200%200%20.317.29c.058.101.135.172.21.222.04.06.077.114.108.156l-.002.21-.43-.004-.002.276.43.004-.002.437c-.283.127-.478.666-.644%201.15-.19.556-.606%201.532-1.18%201.342.013.705.902.822%201.216.696-.063%201.134.417%201.753.67%202.02v.022l.012-.011c.004.003.006.007.009.012l.001-.021c.26-.263.747-.877.702-2.009.314.13%201.203.027%201.227-.676-.574.179-.974-.803-1.155-1.362-.157-.483-.345-1.024-.622-1.159l.003-.437.43.002v-.277l-.427-.003.002-.25c.022-.028.046-.058.069-.091a.643.643%200%200%200%20.29-.317.664.664%200%200%200%20.222-.21c.06-.04.114-.077.156-.108l.21.002-.004.43.276.002.004-.43.437.002c.127.283.666.478%201.15.644.556.19%201.532.606%201.342%201.18.705-.013.823-.902.696-1.216%201.134.063%201.753-.417%202.02-.67h.022a1.093%201.093%200%200%201-.011-.012c.003-.004.007-.006.012-.009h-.002z'%20fill='%23FFEFDB'/%3E%3C/svg%3E")

接著,將這段svg背景放到按鈕中。NVc28資訊網——每日最新資訊28at.com

button{%20%20background:%20var(--icon)%20#FF2A2A;}

效果如下:NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

很明顯,此時這個svg圖標背景默認尺寸是充滿整個容器的,也就是100%%20*%20100%。如果希望右邊也出現平鋪一個圖標,可以減小背景尺寸,比如。NVc28資訊網——每日最新資訊28at.com

button{%20%20background:%20var(--icon)%20#FF2A2A;%20%20background-size:%20calc(100%%20-%2048px)}

效果如下:NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

然后改變水平位置。NVc28資訊網——每日最新資訊28at.com

button{%20%20background:%20var(--icon)%20#FF2A2A;%20%20background-size:%20calc(100%%20-%2048px);%20%20background-position:%2016px;}

效果如下:NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

左右已經出現圖標了,現在只需要垂直居中就可以了,這個也很好實現,設置尺寸為圖標本身大小,然后改變背景位置就行了。NVc28資訊網——每日最新資訊28at.com

button{%20%20background:%20var(--icon)%20#FF2A2A;%20%20background-size:%20calc(100%%20-%2048px)%2016px;%20%20background-position:%2016px%20center;}

效果如下:NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

垂直方向也平鋪了,所以還需要改變一下平鋪方式,僅限水平方向。NVc28資訊網——每日最新資訊28at.com

button{%20%20background:%20var(--icon)%20#FF2A2A;%20%20background-size:%20calc(100%%20-%2048px)%2016px;%20%20background-position:%2016px%20center;%20%20background-repeat:%20repeat-x;}

這樣就僅僅使用平鋪完成了想要的效果!NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

是不是有些不可思議?下面是一個示意圖,紫色圓圈代表圖標,紫色邊框代表svg尺寸,也就是背景尺寸,設置為100%%20-%2036px后,水平方向的平鋪就可以顯示兩個圓圈了,然后適當移動背景位置,就可以看到左右兩邊的圖標了。NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

當然這種實現也是完全是自適應的,無論什么尺寸都可以完美適配。NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

完整代碼可以查看以下鏈接:NVc28資訊網——每日最新資訊28at.com

CSS%20&%20SVG%20repeat%20button%20(juejin.cn)[1]CSS%20&%20SVG%20repeat%20button%20(codepen.io)[2]

三、有時候可替代徑向漸變

里面有提到用徑向漸變的方式來繪制內凹圓角,但是漸變一直都是一個非常難學的技巧,語法非常多,一般同學表示接受不了。NVc28資訊網——每日最新資訊28at.com

這里就采用 SVG來代替徑向漸變的方式來實現這樣的優惠券效果。NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

首先,我們用設計軟件隨便畫個圓,這里以Figma為例,然后復制出SVG。NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

其實就是這樣一段代碼。NVc28資訊網——每日最新資訊28at.com

<svg%20width="40"%20height="40"%20viewBox="0%200%2040%2040"%20fill="none"%20xmlns="http://www.w3.org/2000/svg"><circle%20cx="20"%20cy="20"%20r="20"%20fill="#FF336F"/></svg>

非常簡單吧。NVc28資訊網——每日最新資訊28at.com

然后去除viewBox,并且設置寬高為100%,這是為了讓SVG畫布尺寸撐滿整個容器。NVc28資訊網——每日最新資訊28at.com

<svg%20width="100%"%20height="100%"%20viewBox="0%200%2040%2040"%20fill="none"%20xmlns="http://www.w3.org/2000/svg"><circle%20cx="20"%20cy="20"%20r="20"%20fill="#FF336F"/></svg>

接著轉換成CSS內聯格式。NVc28資訊網——每日最新資訊28at.com

--icon:%20url("data:image/svg+xml,%3Csvg%20width='100%'%20height='100%'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle%20cx='20'%20cy='20'%20r='20'%20fill='%23FF336F'/%3E%3C/svg%3E")

然后用在 CSS 背景中。NVc28資訊網——每日最新資訊28at.com

div{%20%20background:%20var(--icon);}

目前效果是這樣的。NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

我們需要將這個圓分割到4個角落上,可以直接用背景平移的方式。NVc28資訊網——每日最新資訊28at.com

div{%20%20background:%20var(--icon);%20%20background-position:%20-20px%20-20px;}

這樣就可以了,演示如下:NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

不過這樣還沒完,我們需要實現的反向圓角,所以這里需要用遮罩的方式,減去 4 個角落。NVc28資訊網——每日最新資訊28at.com

回到這里,我們只需要一個完整的背景,減去剛才的圓角就可以了,具體實現如下:NVc28資訊網——每日最新資訊28at.com

.coupon{  background: linear-gradient(red,orange);  -webkit-mask:linear-gradient(red,red), var(--icon);  -webkit-mask-position: -20px -20px;  -webkit-mask-composite: xor;}

效果如下,其實和前面幾乎一致。NVc28資訊網——每日最新資訊28at.com

NVc28資訊網——每日最新資訊28at.com

是不是沒有用到徑向漸變?NVc28資訊網——每日最新資訊28at.com

完整代碼可以查看以下鏈接:NVc28資訊網——每日最新資訊28at.com

  • CSS & SVG coupon (juejin.cn)[3]
  • CSS & SVG coupon (codepen.io)[4]

四、SVG還可以更靈活

有時候徑向漸變還是有很多局限的,復雜的圖形繪制不了或者成本很高。而 SVG就沒有這樣的限制了,如果能有一定的自適應特性,相信可以更方便的解決問題。NVc28資訊網——每日最新資訊28at.com

比如這樣一個帶圓角的自適應聚焦框,可能在大屏可視化比較常見,如下(CSS表示無能為力

本文鏈接:http://www.tebozhan.com/showinfo-26-88726-0.html不一樣的SVG!SVG在CSS背景平鋪中的應用

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 我們一起聊聊結構體及其方法的使用法門

下一篇: Hive SQL底層執行過程詳細剖析

標簽:
  • 熱門焦點
  • SpringBoot中使用Cache提升接口性能詳解

    環境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架從 3.1 開始,對 Spring 應用程序提供了透明式添加緩存的支持。和事務支持一樣,抽象緩存允許一致地使用各
  • 如何正確使用:Has和:Nth-Last-Child

    我們可以用CSS檢查,以了解一組元素的數量是否小于或等于一個數字。例如,一個擁有三個或更多子項的grid。你可能會想,為什么需要這樣做呢?在某些情況下,一個組件或一個布局可能會
  • 三分鐘白話RocketMQ系列—— 如何發送消息

    我們知道RocketMQ主要分為消息 生產、存儲(消息堆積)、消費 三大塊領域。那接下來,我們白話一下,RocketMQ是如何發送消息的,揭秘消息生產全過程。注意,如果白話中不小心提到相關代
  • 一文搞定Java NIO,以及各種奇葩流

    大家好,我是哪吒。很多朋友問我,如何才能學好IO流,對各種流的概念,云里霧里的,不求甚解。用到的時候,現百度,功能雖然實現了,但是為什么用這個?不知道。更別說效率問題了~下次再遇到,
  • 最“俊美”淘寶賣家,靠直播和短視頻圈粉,上架秒光,年銷3000萬

    來源 | 電商在線文|易琬玉編輯|斯問受訪店鋪:Ringdoll戒之人形圖源:微博@御座的黃山、&ldquo;Ringdoll戒之人形&rdquo;淘寶店鋪有關外貌的評價,黃山已經聽累了。生于1985年的他,哪
  • 得物寵物生意「狂飆」,發力“它經濟”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過得物App內的&ldquo;在線鑒別&rdquo;,可找到鑒別寵物的選項。通過上傳自家寵物的部位細節,就能收獲擁有專業資質認證的得物鑒
  • 騰訊蓋樓,字節拆墻

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之&ldquo;想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗嗎?一起上晶核,即刻暴打!&rdquo;曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • 華為發布HarmonyOS 4:更好玩、更流暢、更安全

    在8月4日的華為開發者大會2023(HDC.Together)大會上,HarmonyOS 4正式發布。自2019年發布以來,HarmonyOS一直以用戶為中心,經歷四年多的發展HarmonyOS已
  • 三翼鳥智能家居亮相電博會,讓用戶體驗更真實

    2021電博會在青島國際會展中心開幕中,三翼鳥直接把“家”搬到了現場,成為了展會的一大看點。這也是三翼鳥繼9月9日發布了行業首個一站式定制智慧家平臺后的
Top