欧美xxxx做受欧美_www.xxxx精品_国产一区二区三区蝌蚪_国产原创欧美精品_国产福利精品一区_亚洲精品久久久久久下一站 _久久精品国产网站_久久99精品国产_久久综合给合久久狠狠狠97色69_91久久久久久久久久久

手把手教你使用CSS實現(xiàn)酷炫六邊形網(wǎng)格背景圖-全球快消息

來源:php中文網(wǎng) | 2022-12-27 21:00:40 |

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

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


(資料圖片)

嗯?核心主體是由多個六邊形網(wǎng)格疊加形成。

那么我們該如何實現(xiàn)它呢?使用純 CSS 能夠?qū)崿F(xiàn)嗎?

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

如何繪制六邊形?

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

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

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

使用 border 實現(xiàn)六邊形使用 clip-path 實現(xiàn)六邊形

使用 border 或者 clip-path 實現(xiàn)六邊形

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

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

.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;}

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

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

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

.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,也能快速得到一個六邊形圖形:

CodePen Demo -- Two ways to achieve a hexagon

繪制多個六邊形背景

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

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

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

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

給偶數(shù)行設(shè)置一個固定的 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>

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

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

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

多了一層嵌套,代碼邏輯更為復(fù)雜

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

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

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

因此,這種方式存在非常大的弊端,我們希望能有一整布局方式,能夠滿足我們?nèi)缦聝蓚€訴求:

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

這個彈性布局中,第二行的元素最左邊,能夠?qū)崿F(xiàn)固定一個縮進

仔細思考一下,CSS 中有能夠?qū)崿F(xiàn)類似布局的方法么?

妙用 shape-outside 實現(xiàn)隔行錯位布局

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

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

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

假設(shè)我們有下面這樣的結(jié)構(gòu)存在:

<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 半徑的圓。

如此,將會產(chǎn)生一種圖文混排的效果:

CodePen Demo -- 圖文混排 shape-outside

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

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

它能夠?qū)崿F(xiàn)了文字根據(jù)圖形的輪廓,在其周圍排列

shape-outside的本質(zhì)

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

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

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

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

<p>Lorem ipsum dolor sit amet conse...</p>
p {    line-height: 36px;    font-size: 24px;}

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

現(xiàn)在,我們想利用 shape-outside,讓文本內(nèi)容的偶數(shù)行,向內(nèi)縮進 24px,怎么實現(xiàn)呢?非常簡單:

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;    }}

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

一定有小伙伴會很好奇,為什么呢?核心在于我們利用元素的偽元素實現(xiàn)了一個 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        );    }}

效果如下:

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

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

CodePen Demo -- Shape-outside achieves even line indentation

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

<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,我們就實現(xiàn)了隔行讓我們的六邊形向內(nèi)縮進的訴求!效果如下:

當然,有一些優(yōu)化點:

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

讓兩行直接貼緊,可以設(shè)置一個 margin-bottom

做完這兩點優(yōu)化之后,效果如下:

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

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

配置上色彩變換

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

是的,我們要實現(xiàn)這樣一個效果:

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

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

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

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

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

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

.wrap {    position: relative;    // 代碼與上述保持一致    &::before {        content: "";        // ... 實現(xiàn) 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;    }}

效果如下:

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

.wrap {    position: relative;    // 代碼與上述保持一致    &::before {        content: "";        // ... 實現(xiàn) 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);    }}

這樣,我們就完美的實現(xiàn)了我們想要的效果:

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

擴展延伸

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

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

CodePen Demo -- Hexagon Gradient Layout

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

CodePen Demo -- Hexagon Gradient & MASK Layout

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

CodePen Demo -- 3D Hexagon Gradient Layout

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

作者:ChokCoco

(學(xué)習(xí)視頻分享:web前端)

以上就是手把手教你使用CSS實現(xiàn)酷炫六邊形網(wǎng)格背景圖的詳細內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!

關(guān)鍵詞: CSS3

欧美xxxx做受欧美_www.xxxx精品_国产一区二区三区蝌蚪_国产原创欧美精品_国产福利精品一区_亚洲精品久久久久久下一站 _久久精品国产网站_久久99精品国产_久久综合给合久久狠狠狠97色69_91久久久久久久久久久
天天综合天天综合色| 亚洲国产欧美一区二区三区丁香婷| 中文字幕制服丝袜一区二区三区| 欧美久久久久久蜜桃| www.欧美.com| 国内精品视频666| 一区二区国产盗摄色噜噜| 欧美韩国日本综合| ww久久中文字幕| 日韩欧美综合一区| 91 com成人网| 7777精品久久久大香线蕉| 欧美亚洲愉拍一区二区| 91一区在线观看| 91蜜桃视频在线| 色婷婷av久久久久久久| 99re在线视频这里只有精品| 99久久99久久精品国产片果冻| 夫妻av一区二区| 成人久久18免费网站麻豆| 成人av网址在线观看| 国产传媒欧美日韩成人| 成人综合婷婷国产精品久久蜜臀| 国产精品一品视频| 成人黄色小视频在线观看| 成人午夜免费视频| 91久久精品一区二区三| 欧美另类高清zo欧美| 欧美挠脚心视频网站| 精品人伦一区二区色婷婷| 久久久一区二区| 亚洲色图另类专区| 亚洲国产另类av| 激情五月婷婷综合| 91欧美一区二区| 欧美一级久久久| 国产精品污www在线观看| 亚洲午夜久久久久久久久久久 | 成人激情校园春色| 欧洲在线/亚洲| 精品久久久网站| 亚洲精品成人精品456| 五月天亚洲婷婷| 九九精品视频在线看| 99综合影院在线| 日韩午夜三级在线| 综合欧美一区二区三区| 男女视频一区二区| 在线观看亚洲精品视频| 国产亚洲精品中文字幕| 亚洲综合区在线| 国产高清不卡二三区| 在线精品国精品国产尤物884a| 26uuu亚洲| 亚洲成人综合视频| 成人一区二区三区中文字幕| 制服丝袜激情欧洲亚洲| 成人免费在线播放视频| 极品少妇xxxx精品少妇偷拍 | 欧美午夜片在线观看| 久久影院电视剧免费观看| 亚洲一区二区三区美女| 国产成人综合在线观看| 日韩一区二区免费电影| 亚洲一区成人在线| 色综合一区二区| 国产欧美一区二区三区在线老狼| 一区二区三区四区中文字幕| www.亚洲在线| 国产视频不卡一区| 国产精品77777| 久久伊99综合婷婷久久伊| 青青草视频一区| 日韩午夜电影在线观看| 蜜桃久久久久久| 精品福利一二区| 久久99精品久久久| 日韩精品一区二区三区视频播放| 亚洲国产精品嫩草影院| 欧美老肥妇做.爰bbww视频| 亚洲最色的网站| 欧美日韩在线三区| 日韩激情av在线| 日韩天堂在线观看| 国产成人综合网站| 亚洲色大成网站www久久九九| 不卡的av网站| 亚洲摸摸操操av| 欧美日韩一级大片网址| 日韩精彩视频在线观看| 26uuu成人网一区二区三区| 国产成人综合亚洲网站| 亚洲黄色小视频| 日韩情涩欧美日韩视频| 国产精品亚洲一区二区三区妖精| 亚洲欧洲日韩女同| 7777精品伊人久久久大香线蕉最新版| 蜜桃av一区二区| 国产精品久久久久久福利一牛影视| 色婷婷久久99综合精品jk白丝| 亚洲成av人片www| 国产欧美日韩久久| 欧美视频第二页| 国内成人免费视频| 亚洲国产日韩a在线播放性色| 日韩欧美国产一区二区在线播放| 国产精品亚洲а∨天堂免在线| 亚洲欧美福利一区二区| 日韩亚洲欧美高清| 在线观看视频一区二区| 国产精品综合二区| 奇米综合一区二区三区精品视频| 国产精品午夜电影| 精品黑人一区二区三区久久| 色哟哟国产精品免费观看| 精品在线播放免费| 亚洲超丰满肉感bbw| 日韩一级免费观看| 成人免费视频app| 亚洲欧美成人一区二区三区| 91精品国产综合久久香蕉麻豆| 国产69精品久久久久毛片| 午夜一区二区三区在线观看| 久久久夜色精品亚洲| 欧美日本国产一区| 91国在线观看| www.av亚洲| 成人av在线资源网| 国产白丝网站精品污在线入口| 青青草国产成人av片免费| 一区二区三区四区视频精品免费 | 91在线视频网址| 国产精品77777| 国产一区二区三区免费看| 日韩经典一区二区| 喷白浆一区二区| 婷婷综合另类小说色区| 亚洲一区二区精品视频| 有码一区二区三区| 亚洲免费在线视频| 一区二区三区日韩| 亚洲午夜精品在线| 午夜在线电影亚洲一区| 婷婷久久综合九色国产成人| 亚洲综合激情网| 亚洲国产日韩a在线播放| 亚洲sss视频在线视频| 亚洲国产精品久久一线不卡| 一区二区国产视频| 亚洲成a人片综合在线| 男男gaygay亚洲| 国模无码大尺度一区二区三区| 免费一级片91| 激情五月激情综合网| 岛国一区二区三区| 99精品欧美一区| 欧美日韩国产小视频在线观看| 欧美午夜精品一区二区三区| 欧美日韩久久久一区| 日韩欧美在线影院| 国产精品久久久久久久裸模| 日韩美女久久久| 日韩国产欧美三级| 成人午夜免费电影| 欧美日韩精品系列| 国产拍欧美日韩视频二区| 亚洲激情图片qvod| 久久福利资源站| 91久久精品一区二区三区| 日韩欧美一卡二卡| 亚洲欧美色图小说| 紧缚捆绑精品一区二区| 99国产精品久久久久久久久久久 | 成人av在线一区二区三区| 在线观看视频一区| 久久精品欧美一区二区三区麻豆| 国产精品盗摄一区二区三区| 人人狠狠综合久久亚洲| 91亚洲国产成人精品一区二三| 91精品国产乱码| 樱花影视一区二区| 国产成人精品影院| 日韩你懂的在线播放| 一区二区三区视频在线观看| 成人福利视频在线| 久久蜜桃av一区精品变态类天堂| 一区二区三区久久| 国产成人免费视| 久久精品一区蜜桃臀影院| 亚洲h在线观看| 欧美日韩一级大片网址| 一区二区在线观看视频| 成人精品高清在线| 欧美极品aⅴ影院| 激情综合色综合久久| 精品卡一卡二卡三卡四在线| 免费成人av在线| 精品久久久久久久久久久久久久久 | 粉嫩av一区二区三区粉嫩| 亚洲精品一区二区三区蜜桃下载|