成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

手把手教你使用CSS實現酷炫六邊形網格背景圖

本篇文章給大家分享不規則圖形背景排版高階技巧,介紹一下如何使用CSS實現酷炫六邊形網格背景圖,希望對大家有所幫助!

手把手教你使用CSS實現酷炫六邊形網格背景圖

今天,收到一個很有意思的提問,如何實現類似如下的背景效果圖:

手把手教你使用CSS實現酷炫六邊形網格背景圖

嗯?核心主體是由多個六邊形網格疊加形成。

那么我們該如何實現它呢?使用純 CSS 能夠實現嗎?

當然可以,下面我們就將嘗試如何使用 CSS 去實現這樣一個背景效果。【推薦學習:css視頻教程】

如何繪制六邊形?

首先,看到這樣一個圖形,如果想要使用一個標簽完成整個背景,最先想到的肯定是使用背景 background 實現,不過可惜的是,盡管 CSS 中的 background 非常之強大,但是沒有特別好的方式讓它足以批量生成重復的六邊形背景。

因此,在這個需求中,我們可能不得不退而求其次,一個六邊形實現使用一個標簽完成。

那么,就拿 1 個 DIV 來說,我們有多少實現六邊形的方式呢?這里簡單介紹 2 種方式:

  • 使用 border 實現六邊形
  • 使用 clip-path 實現六邊形

使用 border 或者 clip-path 實現六邊形

首先,使用 border 實現六邊形。這里的核心在于上下兩個三角形疊加中間一個矩形。這里,利用元素的兩個偽元素實現上下兩個三角形,從而讓這個元素看起來像一個六邊形。

思路比較簡單,直接上代碼:

.hexagon {   position: relative;   width: 200px;   height: 100px;   background-color: red; }  .hexagon:before, .hexagon:after {   content: "";   position: absolute;   width: 0;   height: 0;   border-left: 100px solid transparent;   border-right: 100px solid transparent; }  .hexagon:before {   bottom: 100%;   border-bottom: 50px solid red; }  .hexagon:after {   top: 100%;   border-top: 50px solid red; }
登錄后復制

上面的代碼會創建一個寬度為 200 像素,高度為 100 像素的六邊形,其中由兩個三角形和一個矩形組成。使用偽元素的優點是可以很方便地控制六邊形的大小、顏色等樣式。

手把手教你使用CSS實現酷炫六邊形網格背景圖

當然,上述的代碼不是一個正六邊形,這是因為正六邊形中,元素的高是元素的寬的 1.1547 倍

并且,上述的方式也稍微復雜了點,因此,在今天,我們更推薦使用 clip-path 的方式去實現一個六邊形:

.clippath {     --w: 100px;     width: var(--w);     height: calc(var(--w) * 1.1547);     clip-path: polygon(0% 25%, 0% 75%, 50% 100%, 100% 75%, 100% 25%, 50% 0%);     background: deeppink;     margin: auto; }
登錄后復制

這樣,基于 clip-path,也能快速得到一個六邊形圖形:

手把手教你使用CSS實現酷炫六邊形網格背景圖

CodePen Demo — Two ways to achieve a hexagon

繪制多個六邊形背景

好了,有了上一步的鋪墊之后,接下來我們要做的,就是繪制多個六邊形,組成背景。

但是我們仔細觀察一下由多個六邊形組成的背景,會發現每雙數行的的六邊形,需要向右側有一個明顯的縮進,寬度大概為單個六邊形的寬度的一半:

手把手教你使用CSS實現酷炫六邊形網格背景圖

這里其實是一個非常棘手的問題。首先,我們會想到這樣一種解決方案:

  • 每一行為一組,設置一個父 div 容器,填滿六邊形元素,設置元素不換行

  • 給偶數行設置一個固定的 margin-left

基于這個策略,我們的代碼,大概會是這樣:

<div class="container">     <div class="wrap">     // ... 填滿六邊形     </div>     <div class="wrap" style="margin-left: 25px">     // ... 填滿六邊形     </div>     <div class="wrap">     // ... 填滿六邊形     </div>     <div class="wrap" style="margin-left: 25px">     // ... 填滿六邊形     </div> </div>
登錄后復制

可以看到,我們給偶數行,都添加了一個 margin-left

但是這個代碼,會有幾個問題:

  • 我們的頁面寬度不一定是固定的,那么每一行設置多少個子六邊形元素比較合適呢?設置多了勢必會帶來浪費,少了又無法滿足需求

  • 多了一層嵌套,代碼邏輯更為復雜

什么意思呢?也就是效果可能在屏幕非常寬的情況下,失效。

看看,正常情況,我們設置了每行 20 個六邊形,下圖是正常的

手把手教你使用CSS實現酷炫六邊形網格背景圖

但是如果我們的屏幕特別寬,那么,可能會得到這樣一種效果:

手把手教你使用CSS實現酷炫六邊形網格背景圖

因此,這種方式存在非常大的弊端,我們希望能有一整布局方式,能夠滿足我們如下兩個訴求:

  • 所有六邊形代碼寫在一個父容器下

  • 這個彈性布局中,第二行的元素最左邊,能夠實現固定一個縮進

仔細思考一下,CSS 中有能夠實現類似布局的方法么?

妙用 shape-outside 實現隔行錯位布局

有的!在 CSS 中,有一個神奇的元素能夠讓元素以非直線形式排布。它就是 shape-outside

如果你對 shape-outside 不太了解,也可以先看看我的這篇文章 — 奇妙的 CSS shapes

shape-outside 是 CSS 中的一個屬性,用于控制元素的浮動方式。它允許你定義一個元素浮動時周圍元素的形狀。例如,你可以使用 shape-outside 屬性來定義一個元素浮動時周圍元素的形狀為圓形、六邊形等。

它和 clip-path 的語法非常類似,很容易觸類旁通。看看實例,更易理解:

假設我們有下面這樣的結構存在:

<div class="container">     <div class="shape-outside">       <img src="image.png">     </div>     xxxxxxxxxxx,文字描述,xxxxxxxxx </div>
登錄后復制

定義如下 CSS:

.shape-outside {     width: 160px;     height: 160px;     shape-outside: circle(80px at 80px 80px);     float: left; }
登錄后復制

注意,上面 .shape-outside 使用了浮動,并且定義了 shape-outside: circle(80px at 80px 80px) ,表示在元素的 (80px, 80px) 坐標處,生成一個 80px 半徑的圓。

如此,將會產生一種圖文混排的效果:

手把手教你使用CSS實現酷炫六邊形網格背景圖

CodePen Demo — 圖文混排 shape-outside

總得來說,shape-outside 有兩個核心特點:

  • shape-outside 屬性僅在元素定義了 float 屬性且不為 none 時才會生效

  • 它能夠實現了文字根據圖形的輪廓,在其周圍排列

手把手教你使用CSS實現酷炫六邊形網格背景圖

shape-outside 的本質

劃重點,劃重點,劃重點。

所以,shape-outside 的本質其實是生成幾何圖形,并且裁剪掉其幾何圖形之外周圍的區域,讓內容能排列在這些被裁剪區域之內

所以,了解了這個本質之后,我們再將他運用在上面的六邊形布局之中。

為了方便理解,我們首先使用文字代替上面的六邊形,假設我們有這樣一段文本內容:

<p> Lorem ipsum dolor sit amet conse... </p>
登錄后復制

p {     line-height: 36px;     font-size: 24px; }
登錄后復制

非常平平無奇的一段代碼,效果如下:

手把手教你使用CSS實現酷炫六邊形網格背景圖

現在,我們想利用 shape-outside,讓文本內容的偶數行,向內縮進 24px,怎么實現呢?非常簡單:

p {     position: relative;     line-height: 36px;     font-size: 24px;      &::before {         content: "";         height: 100%;         width: 24px;         shape-outside: repeating-linear-gradient(             transparent 0,             transparent 36px,             #000 36px,             #000 72px         );         float: left;     } }
登錄后復制

這樣,我們就實現了文字隔行縮進 24px 的效果:

手把手教你使用CSS實現酷炫六邊形網格背景圖

一定有小伙伴會很好奇,為什么呢?核心在于我們利用元素的偽元素實現了一個 shape-outside 圖形,如果我們把這個圖形用 background 繪制出來,其實它長這樣:

p {     position: relative;     line-height: 36px;     font-size: 24px;      &::before {         content: "";         height: 100%;         width: 24px;         shape-outside: repeating-linear-gradient(             transparent 0,             transparent 36px,             #000 36px,             #000 72px         );         float: left;         background: repeating-linear-gradient(             transparent 0,             transparent 36px,             #f00 36px,             #f00 72px         );     } }
登錄后復制

效果如下:

手把手教你使用CSS實現酷炫六邊形網格背景圖

因為文本的行高是 36px,這樣我們以 72 為一段,每 36px 繪制一段透明,另外 36px 繪制一段寬為 24px 的內容,這樣,結合 shape-outside 的特性,我們就實現了隔行將內容向里面擠 24px 的效果!

非常的 Amazing 的技巧!完整的代碼你可以戳這里:

CodePen Demo — Shape-outside achieves even line indentation

基于這個技巧,我們就可以實現上述我們想要的效果了。我們回到正題,重新實現一個充滿六邊形的背景:

<ul class="wrap">   <li></li>   //... 非常多個 li <ul>
登錄后復制

:root {   --s: 50px;  /* size  */   --m: 4px;    /* margin */   --perHeight: calc(calc(var(--s) * 2 * 1.1547) + calc(var(--m) * 4) - 0.4px) }  .wrap {     position: relative;     height: 100%;     font-size: 0;      &::before {         content: "";         height: 100%;         width: 27px;         shape-outside: repeating-linear-gradient(             transparent 0,             transparent 70px,             #000 70px,             #000 var(--perHeight)         );         float: left;     } }  li {     width: var(--s);     height: calc(var(--s) * 1.1547);      background: #000;     clip-path: polygon(0% 25%, 0% 75%, 50% 100%, 100% 75%, 100% 25%, 50% 0%);     margin: var(--m);     display: inline-block; }
登錄后復制

借助 shape-outside,我們就實現了隔行讓我們的六邊形向內縮進的訴求!效果如下:

手把手教你使用CSS實現酷炫六邊形網格背景圖

當然,有一些優化點:

  • 為了讓兩邊不那么空,我們可以讓整個容器更寬一點,譬如寬度為父元素的 120%,然后水平居中,這樣,兩側的留白就解決了

  • 讓兩行直接貼緊,可以設置一個 margin-bottom

做完這兩點優化之后,效果如下:

手把手教你使用CSS實現酷炫六邊形網格背景圖

可以做到任意屏幕寬度下的六邊形完美平鋪布局:

手把手教你使用CSS實現酷炫六邊形網格背景圖

完整的代碼你可以戳這里:CodePen Demo — Hexagon Layout

配置上色彩變換

有了上述的鋪墊后,要實現文章一開頭的效果就不難了。

是的,我們要實現這樣一個效果:

手把手教你使用CSS實現酷炫六邊形網格背景圖

如何讓它們動態的實現顏色變換呢?是給每一個六邊形一個單獨的顏色,然后進行動畫嗎?不,借助混合模式,我們可以非常快速的實現不同的顏色值。

首先,我們將上述效果,改成白底黑色六邊形色塊:

手把手教你使用CSS實現酷炫六邊形網格背景圖

然后,利用父容器剩余的一個偽元素,我們疊加一層漸變層上去:

.wrap {     position: relative;     // 代碼與上述保持一致      &::before {         content: "";         // ... 實現 shape-outside 功能,代碼與上述保持一致     }          &::after {         content: "";         position: absolute;         inset: 0;         background: linear-gradient(45deg, #f44336, #ff9800, #ffe607, #09d7c4, #1cbed3, #1d8ae2, #bc24d6);     } }
登錄后復制

這樣,我們就疊加了一層漸變色彩層在原本的六邊形背景之上:

手把手教你使用CSS實現酷炫六邊形網格背景圖

接著,只需要一個混合模式 mix-blend-mode: darken,就能實現六邊形色塊與上層漸變顏色的融合效果:

.wrap {     position: relative;     // 代碼與上述保持一致      &::before {         content: "";         // ... 實現 shape-outside 功能,代碼與上述保持一致     }          &::after {         content: "";         position: absolute;         inset: 0;         background: linear-gradient(45deg, #f44336, #ff9800, #ffe607, #09d7c4, #1cbed3, #1d8ae2, #bc24d6);         z-index: 1;       + mix-blend-mode: darken;     } }
登錄后復制

效果如下:

手把手教你使用CSS實現酷炫六邊形網格背景圖

好, 我們再給上層的漸變色塊,添加一個 filter: hue-rotate() 動畫,實現色彩的漸變動畫:

.wrap {     position: relative;     // 代碼與上述保持一致      &::before {         content: "";         // ... 實現 shape-outside 功能,代碼與上述保持一致     }          &::after {         content: "";         position: absolute;         inset: 0;         background: linear-gradient(45deg, #f44336, #ff9800, #ffe607, #09d7c4, #1cbed3, #1d8ae2, #bc24d6);         z-index: 1;         mix-blend-mode: darken;       + animation: change 10s infinite linear;     } } @keyframes change {     100% {         filter: hue-rotate(360deg);     } }
登錄后復制

這樣,我們就完美的實現了我們想要的效果:

手把手教你使用CSS實現酷炫六邊形網格背景圖

完整的代碼,你可以戳這里:CodePen Demo — Hexagon Gradient Layout

擴展延伸

當然,有了這個基礎圖形之后,其實我們可以基于這個圖形,去做非常多有意思的效果。

下面我是嘗試的一些效果示意,譬如,我們可以將顏色放置在六邊形背景的下方,制作這樣一種效果:

手把手教你使用CSS實現酷炫六邊形網格背景圖

CodePen Demo — Hexagon Gradient Layout

配合 mask 的蒙版效果及鼠標定位,我們還能實現這樣一種有趣的交互效果:

手把手教你使用CSS實現酷炫六邊形網格背景圖

CodePen Demo — Hexagon Gradient & MASK Layout

當然,3D 效果也不在話下:

手把手教你使用CSS實現酷炫六邊形網格背景圖

CodePen Demo — 3D Hexagon Gradient Layout

原文地址:https://www.cnblogs.com/coco1s/p/17005071.html

作者:ChokCoco

(學習視頻分享:web前端)

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
亚洲AV无码国产精品久久| 加比勒色综合久久| 国产精品无码永久免费888| 国产麻花豆剧传媒精品MV | 欧美精品亚洲精品日韩专区VA| 人妻无码久久精品人妻| 少妇精品久久久久www| 亚洲AⅤ永久无码精品AA| 亚洲无线观看国产高清| AⅤ成年女人毛片免费观看| 亚洲熟女www一区二区三区| 亚洲AV无码国产剧情| 亚洲中文字幕无码久久综合网| 99国内精品久久久久久久漫画| 在线精品亚洲一区二区绿巨人| JAVA强行VIDEOS| 国产成年无码久久久久下载| 精产国品一二三产品99| 男男野战爆了我的菊BL| 少妇高潮潮喷到猛进猛出小说| 亚洲AV永久无码精品无码电影| 在线天堂资源WWW在线中文| 成人区人妻精品一区二区不卡| 国产欧美久久久久久精品一区二区| 精品国产乱码久久久久APP下载 | 久久人人爽人人爽人人片AV不| 欧美狂野乱码一二三四区| 我的妈妈和黑人群交小说| 亚洲色精品AⅤ一区区三区 | 欧美最猛黑人XXXⅩ猛男爽| 我的大胸继拇在线观看| 一区无码在线观看的| 亚洲一线二线三线品牌精华液| BBBBBB嫩BBBBBB| 国产女人好紧好爽| 免费无码AV片流白浆在线观看| 少妇伦子伦精品无码STYLES| 亚洲色欲综合一区二区三区| 成 人 综合 亚洲另类| 成人精品视频一区二区三区尤物| 国内精品免费视频自在线拍 | 1313午夜精品理论片| 国产精品久久福利新婚之夜| 开心亚洲五月丁香五月| 色婷婷五月综合丁香中文字幕 | 久久久亚洲欧洲日产无码AV | 日本插槽X8插槽怎么用的| 人与动人物XXXXAV片| 亚洲AV无码片VR一区二区三区| CAOPOREN超碰| 极品教师第二季免费观看| 人人妻人人澡人人| 亚洲人成色A777777在线观| 尤物在线视频.YW163.成年| 最新精品国偷自产在线下载| 国产精品后入内射日本在线观看 | 成年轻人电影免费 视频| 久久99久久99精品免观看| 色惰日本视频网站WWW| 野兽的夜晚第四季忘不掉的前任 | 特区爱奴在线观看| 中文字幕人妻无码一夲道| A级毛片毛片免费观的看久| 韩漫无羞遮无删减漫免费| 人人妻人人澡人人爽秒播| 亚洲中文无码成人片在线观看| 国产成 人 黄 色 网 站 小说| 蜜桃传媒在线观看免费版7| 亚洲AⅤ国产成人AV片妓女| 波多野结衣TORRENT| 久久婷婷人人澡人人爽人人爱| 我跟闺蜜公交车被弄到高潮| 99久久亚洲综合精品成人网| 精品欧洲AV无码一区二区男男| 免费看人妻丰满熟妇AV无码片| 亚洲AV无码精品色午夜蛋壳| 纯肉无遮挡H肉动漫在线观看3D| 脔到她哭H粗话H好爽五星视频| 亚洲AV日韩AV永久无码电影| 成熟丰满熟妇高潮XXXXX视频| 巨RU麻麻奶水雪白肥美喷| 亚洲 中文字幕 日韩 无码| 暴躁少女CSGO图片| 毛茸茸BBWBBW中国妓女| 亚洲精品无码寂寞少妇AV| 国产精品99久久久久| 日本成熟少妇喷浆在线观看| 自拍偷自拍亚洲精品10P | 亚洲国产一卡2卡3卡4卡5公司| 中文字幕热久久久久久久| 国内精品自线一区二区三区2| 熟妇人妻不卡无码一区| JIZZ中国JIZZ在线观看| 免费观看电视剧全集在线播放高清| 亚洲成AV人无码| GOGO人体GOGO西西大尺度| 久久久久久A亚洲欧洲AⅤ | 专干老肥女人88AV| 久久久久精品国产三级美国美女| 亚洲AV无码国产精品色午| 国产精品白丝JK白祙喷水视频 | 亚洲女人操BB在线| 国精产品一二二线网站| 无码国产精品一区二区VR老人| 成人综合婷婷国产精品久久蜜臀| 欧美妆和日韩妆区别777CCC| 2022一本久道久久综合狂躁| 国产精品高潮呻吟AV久久无码| 任你躁X7X7X7X7在线观看| A级毛片毛片免费观看丝瓜| 内射中出无码护士在线| 在线播放亚洲第一字幕| 久久精品女人天堂AV麻| 亚洲欧美在线一区中文字幕| 极品AV麻豆国产在线观看| 亚洲AV无码成人精品区伊人小说| 国产精品无码A∨果冻传媒| 天天拍夜夜添久久精品| 国产成人精品午夜福利APP色多| 色欲香天天天综合网站小说| 在人间电影在线观看完整版| 久久久久久久99精品免费观看| 亚洲熟妇无码AV在线播放| 精人妻无码一区二区三区蜜桃| 少妇无码AV无码专区线Y| 纯净模式怎么关闭| 少妇MM被擦出白浆液视频| 俄罗斯大荫蒂女人毛茸茸| 色欲色欲天天天WWW亚洲伊| 高清粉嫩无套内谢国语播放| 四虎国产精品永久在线| 国产精品久久精品国产| 性丰满ⅩXXOOO性HD| 好吊妞人成视频在线观看27DU| 亚洲成A人片在线观看WWW| 精品无码一区二区三区电影 | 亚洲AⅤ无码日韩AV中文AV伦| 国产在线拍揄自揄拍免费下载| 亚洲国产成人无码网站大全| 久久精品成人欧美大片| 尤物193在线人妻精品免费| 男男GV白嫩小受GV在线播放| CHINESE熟女熟妇1乱| 日本午夜精品理论片A级APP发| 中文字幕V亚洲ⅤV天堂| 国产亚洲欧洲综合5388| 亚洲大胸美女被操喷水| 久久精品A一国产成人免费网站 | 40岁大乳的熟妇在线观看| 欧美亚洲日韩国产区三| 车上震动A级作爱视频| 天堂VA欧美ⅤA亚洲VA老司机| 国产美女被遭高潮免费网站| 亚洲精品乱码久久久久66| 老子影院午夜精品无码| FREE性中国熟女HD交换| 少妇无码一区二区二三区| 国产午夜福利在线观看红一片| 亚洲欧美日韩中文字幕一区二区三 | 男人靠女人免费视频网站| 八戒午夜理论片影院| 无码AV片在线观看免费 | 亚洲国产成人精品福利在线观看 | 熟妇无码乱子成人精品| 国产偷国产偷亚洲高清人| 亚洲一区二区三区丝袜| 欧美激情精品久久| 国产A三级久久精品| 肉身避风港1978大米星球| 国产精品久久久久久久久免费| 亚洲国产美女久久久久| 美女无遮挡直播软件免费看| 成人AV无码乱码在线观看无码 | 日日摸夜夜添夜夜添影院| 国产熟妇XXXXXⅩ性Ⅹ交| 一本大道在线无码一区| 全部孕妇毛片丰满孕妇孕交| 国产对白videos麻豆高潮 | 超碰CAO已满18进入| 性生大片免费观看网站蜜芽| 久久亚洲精品无码观看| 把腿扒开让我舔免费视频| 亚洲AV无码AV吞精久久| 男女18禁啪啪无遮挡激烈网站| 高清不卡亚洲日韩AV在线| 亚洲色成人四虎在线观看| 秋霞鲁丝AV一区二区三区| 国产品无码一区二区三区在线蜜桃| 孕妇特级毛片WW无码内射| 色在线 | 国产| 久久99精品久久久久婷婷暖| 啊灬啊灬啊灬快灬少妇软件| 亚洲AV无码成人精品网站| 欧美成人一区二区三区在线观看| AV国内精品久久久久影院| 无码精品A∨在线观看中文 | 色婷婷五月色综合AⅤ小说| 久久久国产精品亚洲一区| 成人无码H动漫在线播放| 亚洲色欲久久久综合网东京热|