整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          CSS filter 生成不規則邊框

          CSS filter 生成不規則邊框

          前做過很多特殊的布局,比如在這兩篇文章 CSS 實現優惠券的技巧 (juejin.cn)[1]、CSS 實現支持漸變的提示框(tooltips) (juejin.cn)[2],如下

          但是一直有一個痛點就是:無法給這些圖形加上邊框

          今天帶來一個小技巧:利用 drop-shadow 一行代碼搞定所有不規則邊框

          一、投影

          這里需要利用投影 drop-shadow, 不太了解的可以參考 這篇文章: 被低估的CSS濾鏡:drop-shadow[3],這里簡單介紹一下

          語法其實很簡單

          filter: drop-shadow(offset-x offset-y blur-radius color)

          并不是一個單獨的屬性,而是 filter 濾鏡下的一個方法

          這里 offset-xoffset-y為偏移量,blur-radius為模糊半徑,color為投影顏色。實際作用就是可以模擬真實世界的投影(透明的部分不會投影),區別如下

          可惜的是,雖然和 box-shadow 比較類似,但是少了擴展半徑。試想一下,如果支持了擴展半徑,那不規則邊框是不是很容易了(應該不會支持了,因為真實世界的投影也沒有擴展半徑)?

          那么,drop-shadow如何生成邊框呢?

          二、多重投影

          box-shadow 可以很輕易的實現多重陰影

          box-shadow: 0 0 3px #333, 1px 1px 5px #666, ...

          可以無限疊加下去。

          但是,drop-shadow可就不行了,比如

          filter: drop-shadow(0 0 3px #333, 1px 1px 5px #666, ...)

          可以看到瀏覽器直接認為非法了

          不過可以換一種思路,雖然 drop-shadow不支持,但是filter支持多種濾鏡,所以可以這樣來實現

          filter: drop-shadow(0 0 3px #333) drop-shadow(0 0 3px #333) drop-shadow(0 0 3px #333)...

          這樣就可以生效了

          是不是有點像邊框了?如果只設置 0.5px 的模糊,多疊加幾次,模糊的部分會變清晰,這個就有點像一個比較軟的筆觸,多畫幾筆就變清晰了,于是可以得到這樣的效果

          這樣就更加接近了,實踐下來,可能需要微調,這里給出一個比較完美的方案(重點來了~

          .wrap{
            filter: drop-shadow(0px 0px 0.5px #333) drop-shadow(0px 0px 0px #333) drop-shadow(0px 0px 0px #333) drop-shadow(0px 0px 0px #333) drop-shadow(0px 0px 0px #333)
          }

          這樣實現的邊框已經足夠清晰,基本可以日常使用了

          這段代碼中顏色比較多,可以優化一下,投影的顏色默認是跟隨當前文字顏色的,所以可以簡化為

          .wrap{
            filter: drop-shadow(0 0 0.5px)drop-shadow(0 0 0)drop-shadow(0 0 0)drop-shadow(0 0 0)drop-shadow(0 0 0);
            color: #333;
          }

          線上示例可訪問 coupon-border[4],還有這個 tooltips-border[5]

          三、使用和局限

          使用方式簡單,在容器的最外層加上這一行 CSS 就行了,比如之前的優惠券例子,得到的邊框效果這樣的

          還有這樣的

          邊框還算不錯,幾乎看不出投影

          不過這里需要注意的是,經過 mask 裁剪的圖形需要在外層嵌套一層父級,不然投影會被 mask 直接裁剪掉

          <div class="wrap">
            <div class="coupon">
             <!--優惠券--> 
            </div>
          </div>

          另外,這個方案進適合比較小的邊框,如果較大的邊框,可能會比較圓滑,而且需要疊加更多的濾鏡,效果也不太好,如下

          這些就需要自行取舍了(一般情況下不會有太粗的邊框)

          四、總結和說明

          本文介紹了一個實現不規則邊框的通用方案,成本非常低,效果也非常不錯,這里總結一下:

          1.drop-shadow只會對不透明部分生成投影,符合真實物理世界2.drop-shadow不支持多重投影,filter支持多重濾鏡,可以間接實現多重投影3.邊框的實現原理是投影的多重疊加4.有些通過mask裁剪生成的圖形,需要在外包裹一層容器,再生成邊框5.適合比較小的邊框,過大的邊框不太理想6.濾鏡其實是一個比較耗費性能的屬性,不適合太范圍使用

          可能大部分同學最后可能還是會選擇 “切圖.png”,不過這也算是一個解決方案 ,多一種方案總是沒錯的。最后,如果覺得還不錯,對你有幫助的話,歡迎點贊、收藏、轉發???

          References

          [1] CSS 實現優惠券的技巧 (juejin.cn): https://juejin.cn/post/6945023989555134494
          [2] CSS 實現支持漸變的提示框(tooltips) (juejin.cn):
          https://juejin.cn/post/6971261516284690468
          [3] 這篇文章: 被低估的CSS濾鏡:drop-shadow:
          https://zhuanlan.zhihu.com/p/195792157
          [4] coupon-border:
          https://codepen.io/xboxyan/pen/jOmeoPd
          [5] tooltips-border:
          https://codepen.io/xboxyan/pen/wvdQgXK

          SS3 的邊框屬性可以給創建圓角的盒子,也可以給盒子設置陰影,用圖片美化盒子。

          border-radius 圓角

          border-radius可以給元素設置圓角。

          如下,一個div元素:

          <div class="box">border-radius可以給元素設置圓角。</div>

          我們給它加一點樣式,并設置它的border-radius為15px:

          .box{

          width: 284px;

          height: 28px;

          line-height: 28px;

          text-align: center;

          color: #fff;

          font-size: 14px;

          background: #999;

          border:2px solid #333;

          border-radius: 15px;

          }

          瀏覽器中查看效果:

          border-radius也可以給它四個角分別設置角度,四個值依次代表左上,右上,右下,左下:

          border-radius: 15px 15px 0px 0px;

          box-shadow 邊框陰影

          box-shadow可以為元素設置邊框陰影。box-shadow設置的屬性如下:

          box-shadow: h-shadow v-shadow blur spread color inset;

          h-shadow 水平陰影的位置,可以是負值。

          v-shadow 垂直陰影的位置,可以是負值。

          blur 模糊距離。

          spread 陰影的尺寸。

          color 陰影的顏色。

          inset 將外部陰影 (outset) 改為內部陰影。

          以上 h-shadow ,v-shadow是必須要設置的,其他的可以根據需要去設置。

          我們給上面的div元素添加陰影:

          <div class="box"></div>

          css樣式:

          .box{

          width: 284px;

          height: 100px;

          background: #f60;

          box-shadow: 10px 10px 5px #ccc;

          }

          瀏覽器中查看效果:

          border-image 圖片

          border-image 使用圖片設置邊框。

          如下:

          <div class="box"></div>

          我們先給div元素的邊框顏色設置為透明(transparent),然后在使用圖片設置邊框:

          .box{

          width: 284px;

          height: 100px;

          border:15px solid transparent;

          width:300px;

          padding:10px 20px;

          -webkit-border-image:url(images/border.png) 30 30 round; /* Safari 5 */

          -o-border-image:url(images/border.png) 30 30 round; /* Opera */

          border-image:url(images/border.png) 30 30 round;

          }

          看一下效果:

          童靴們可能不懂為啥屬性的前邊會有-webkit-、-o-這樣的前綴呢?這是因為好多瀏覽器都不支持CSS的新特性,所以寫這些專屬的前綴是為了兼容各瀏覽器。

          上一篇CSS3文章最后也講過各瀏覽器的前綴,童靴們自己去看一下。

          css3 入門簡介 ——css3開課啦!

          當你感到悲哀痛苦時,最好是去學些什么東西。學習會使你永遠立于不敗之地。

          關注小白前端,持續收到文章推送!

          人在校生一枚,希望可以找到志同道合的小伙伴一起進步,不定期的更新自己的收獲,如果有大神的話可以指出我的不足,我用的是VS code軟件來寫代碼的

          什么是 HTML

          HTML 是個縮寫,全稱Hyper Text Markup Language,譯為超文本標記語言。它是一種標識性的語言。它包括一系列標簽.通過這些標簽可以將網絡上的文檔格式統一,使分散的Internet資源連接為一個邏輯整體。HTML文本是由HTML命令組成的描述性文本,HTML命令可以說明文字,圖形、動畫、聲音、表格、鏈接等。

          HTML的結構

          • html的后綴名有兩種 一種是.html,另一種是.htm (兩種并無區別)
          • 快捷創建基本結構的方法:方法一:可以在開頭打一個“!”號,方法二:打一個html,智能提示會出現html:5 選中即可。

          HTML的頭部

          在<hard>頭部標簽中你可以 插入腳本(scripts),樣式文件(CSS),以及各種meta信息??梢蕴砑釉陬^部區域的元素有:<title>,<style>,<meta>,<link>等等

          • ? <title>定義網頁標題</title>
          • <meta>元素:描述了一些基本的元數據,元數據不顯示在頁面上,但會被瀏覽器解析,<meta>通常用于指定網頁的描述,關鍵詞,作者。


          注釋快捷鍵:CTRL+? (注釋是不被運行的,作用就是幫助程序員記東西)

           <!--這是一個注釋-->

          HTML屬性

          • 通用屬性:幾乎所有元素都可以使用的屬性,例如 id、name、style等
          • 私有屬性:某個一個/類元素所具備的屬性
          • 事件屬性:為某個元素綁定事件(DOM學習)
          • 自定義屬性:開發者為某個元素設置的屬性,一般都是在前端框架中使用
          • 參考介紹https://developer.mozilla.org/zh-CN/

          HTML完整結構

           <!DOCTYPE html>
           <html lang="en">
           <head>
               <meta charset="UTF-8">
               <meta name="viewport" content="width=device-width, initial-scale=1.0">
               <title>Document</title>
          			<!--頭部,js和css寫在這里面-->
           </head>
           <body>
                 <!--內容主體-->
           </body>
           </html>


          可能我寫的會有些不清楚,到后面有代碼的時候就會清楚了


          主站蜘蛛池模板: 国产一区二区三区电影| 无码精品久久一区二区三区| 国模私拍一区二区三区| 夜色阁亚洲一区二区三区| 国产成人一区二区三区高清| 秋霞日韩一区二区三区在线观看 | 国产在线无码一区二区三区视频| 久久一区二区三区99| 中文字幕永久一区二区三区在线观看| 国精产品一区一区三区| 精品香蕉一区二区三区| 欧洲精品码一区二区三区免费看 | 亚洲一区二区高清| 久久人妻内射无码一区三区| 乱精品一区字幕二区| 八戒久久精品一区二区三区| 久久久综合亚洲色一区二区三区| 人妻久久久一区二区三区| 精品一区二区高清在线观看| 亚洲国产精品第一区二区| 日本精品高清一区二区2021| 高清一区二区三区日本久| 日本人的色道www免费一区| 国产高清视频一区三区| 制服美女视频一区| 久久久av波多野一区二区| 免费一区二区无码视频在线播放 | 欧洲精品码一区二区三区| 中文字幕在线播放一区| 无码aⅴ精品一区二区三区| 三上悠亚亚洲一区高清| 精品国产高清自在线一区二区三区 | 毛片无码一区二区三区a片视频| 成人精品一区二区三区中文字幕| 精品国产一区二区三区香蕉| 国产在线aaa片一区二区99| 国产欧美一区二区精品仙草咪| 精品国产亚洲一区二区三区| 日韩十八禁一区二区久久| 精品深夜AV无码一区二区老年| 亚洲一区二区三区在线观看精品中文|