這篇文章給大家分享的是有關(guān)使用css grid構(gòu)建復(fù)雜布局的方法的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
在繁峙等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),營銷型網(wǎng)站建設(shè),外貿(mào)網(wǎng)站建設(shè),繁峙網(wǎng)站建設(shè)費(fèi)用合理。
網(wǎng)格布局是現(xiàn)代CSS中最強(qiáng)大的功能之一。使用網(wǎng)格布局可以幫助我們在沒有任何外部 UI 框架的情況下構(gòu)建復(fù)雜的、快速響的布局。在這篇文章中,將會介紹所有我們需要了解的 CSS 網(wǎng)格知識 。
我們直接進(jìn)入代碼,如下所示,先寫些標(biāo)簽,源碼在這個鏈接里面:https://codepen.io/Shadid/pen/zYqNvgv
<p class="container"> <header>Header</header> <aside>Aside 1</aside> <section>Section</section> <aside>Aside 2</aside> <footer>Footer</footer> </p>
在上面,我們創(chuàng)建了一個header
、兩個aside
和一個footer
元素,并將它們包裝在一個container
元素中。我們?yōu)槿萜髟刂械乃性靥砑颖尘吧妥煮w大小。
.container > * { background: aquamarine; font-size: 30px; }
運(yùn)行的網(wǎng)頁如下:
現(xiàn)在我們添加一些網(wǎng)格屬性:
.container { display: grid; grid-gap: 5px; grid-template-areas: "header" "aside-1" "aside-2" "section" "footer" } /* Assign grid areas to elements */ header { grid-area: header; } aside:nth-of-type(1) { grid-area: aside-1; } aside:nth-of-type(2) { grid-area: aside-2; } section { grid-area: section; } footer { grid-area: footer; }
首先,我們定義了display:grid
,它將啟用網(wǎng)格布局,然后我們使用grid-gap
在網(wǎng)格元素中增加間隙。
接下來,我們?yōu)槊總€html元素分配了一個網(wǎng)格區(qū)域名稱。在container 類中,我們可以使用
grid-template-areas`屬性定 義html 模板的外觀,注意網(wǎng)格模板區(qū)域是如何排列的。
grid-template-areas: "header" "aside-1" "aside-2" "section" "footer"
元素的順序與 dom 結(jié)構(gòu)不同。但是,最終按我們網(wǎng)絡(luò)區(qū)域的順序來展示。
下一步是使我們的頁面具有響應(yīng)性。我們希望在更大的屏幕上使用不同的布局。CSS網(wǎng)格使得處理媒體查詢和創(chuàng)建響應(yīng)式布局變得非常容易??聪旅娲a:
@media (min-width: 670px) { .container { grid-template-areas: "header header header" "aside-1 section aside-2" "footer footer footer" } }
我們所要做的就是在媒體查詢中重新排序網(wǎng)格模板區(qū)域。
如何使用 CSS 網(wǎng)格來組織列和? 先從下面的代碼開始:
<p class="container"> <p class="item">One</p> <p class="item">Two</p> <p class="item">Three</p> <p class="item">Four</p> <p class="item">Five</p> <p class="item">Six</p> </p>
添加一些基本的 css
.container { display: grid; height: 100vh; grid-gap: 10px; } .item { background: lightcoral; }
我們?yōu)樯厦娴?dom 結(jié)構(gòu)使用了網(wǎng)格布局,并使用grid-gap
增加了風(fēng)格之間的間距。 現(xiàn)在,我們使用grid-template-columns
屬性來添加一些列。
.container { display: grid; height: 100vh; grid-gap: 10px; grid-template-columns: 100px 200px auto auto; }
就像這樣,我們使用了列。 我們指定第一列為100px
,第二列為200px
。 由于我們在第3
列和第4
列中應(yīng)用了auto
,因此剩余的屏幕長度將在其中分成兩半。
可以看到現(xiàn)在頁面中有一個空白。 如果我想將第六列
移至第三列
和第四列
怎么辦? 為此,我們可以使用grid-column-start
和grid-column-end
屬性。
.item:nth-of-type(6) { grid-column-start: 3; grid-column-end: 5; }
注意,我們使用grid-column-end: 5
,值5
指向列線。 第四列在網(wǎng)格的第五行結(jié)束。 grid-column-start
和grid-column-end
值是指網(wǎng)格線。
如果你覺得網(wǎng)格線的值讓人困惑,你也可以使用span
,下面的效果與上面一樣:
.item:nth-of-type(6) { grid-column-start: 3; grid-column-end: span 2; }
對于span 2
,指定p
占用網(wǎng)格中的兩個插槽。 現(xiàn)在,假設(shè)要擴(kuò)展第二列
填充下面的空白區(qū)域。 我們也可以通過grid-column-start
屬性輕松地做到這一點(diǎn)。
.item:nth-of-type(2) { grid-row-start: span 2; }
我們使用span
和grid-row-start
來指定我們想要占據(jù)兩個插槽。
如上所見,我們已經(jīng)能夠使用少量的CSS網(wǎng)格屬性來構(gòu)建非常復(fù)雜的布局。
現(xiàn)在來看看grid-templates
,在本節(jié)中,我們將討論如何為不同的屏幕大小創(chuàng)建不同的布局。
首先,還是先來一段 dom 結(jié)構(gòu):
<p class="container"> <header>header</header> <aside>Left</aside> <section>Section</section> <aside>Right</aside> <footer>Footer</footer> </p>
接著,添加一些樣式:
`` .container { display: grid; height: 100vh; grid-gap: 10px; } .container > * { background: coral; display: flex; justify-content: center; align-items: center; }` ``
我們給元素添加了背景色。從上面的代碼中可以看到,我們也使用了flex
屬性。我們可以將flex
和grid
結(jié)合在一起。在這個特殊的例子中,我們使用flex
屬性中心對齊內(nèi)容。
對于移動端,我們希望section
在header
下面,right
在 section
下面,我們可以使用網(wǎng)格區(qū)域來完成。首先,我們定義網(wǎng)格區(qū)域:
.container { display: grid; height: 100vh; grid-gap: 10px; grid-template-areas: "header" "section" "right" "left" "footer" } aside:nth-of-type(1) { grid-area: left; } aside:nth-of-type(2) { grid-area: right; } section { grid-area: section; } footer { grid-area: footer; } header { grid-area: header; }
在 grid-template-areas
中可以看到,我們先有header
,然后是section
,然后是right
,最后是left
。此外,我們希望我們的section
比 left
和 right
都大點(diǎn)。為了實(shí)現(xiàn)這一點(diǎn),我們可以使用rid-template-rows
屬性
.container { display: grid; height: 100vh; grid-gap: 10px; grid-template-areas: "header" "section" "right" "left" "footer"; grid-template-rows: 1fr 6fr 2fr 2fr 1fr; }
我們可以根據(jù)需要設(shè)置移動端的視圖,接下我們使用媒體查詢來適配一下大屏幕:
@media (min-width: 500px) { .container { grid-template-areas: "header header header" "left section right" "footer footer right"; grid-template-rows: 1fr 6fr 1fr; grid-template-columns: 1fr 6fr 1fr; } }
minmax
函數(shù)動態(tài)跟蹤元素的大小假設(shè)我們有兩列,它們均勻地占據(jù)了屏幕上的可用空間。通過使用 grid-template-columns
,我們可以很容易地做到這一點(diǎn)。但是,如果我們想要其中一個在200px
到500px
之間呢?我們的列可以適應(yīng)不同的屏幕尺寸,但其中一個永遠(yuǎn)不會大于500px
或小于200px
。
對于這些類型的場景,我們使用minmax
函數(shù)。 讓我們來看看它的實(shí)際效果。
<p class="container"> <p class="one">One</p> <p class="two">Two</p> </p>
.container { display: grid; height: 100vh; grid-template-columns: minmax(200px, 500px) minmax(100px, auto); } .one { background: cyan; } .two { background: pink; }
在這個例子中,第一列總是在200px
到500px
之間。然而,第二列的最小值可以是100px
,對于更大的屏幕,它將覆蓋屏幕的其余部分。
我們討論一下元素中的重復(fù)模式。我們?nèi)绾翁幚硭鼈?我們可以重復(fù)我們的代碼或使用javascript。不過,還有另一種方法可以用css來實(shí)現(xiàn)。repeat
函數(shù)表示軌道列表的一個重復(fù)片段,允許以更緊湊的形式編寫顯示重復(fù)模式的大量列或行。
<p id="container"> <p> This item is 50 pixels wide. </p> <p> Item with flexible width. </p> <p> This item is 50 pixels wide. </p> <p> Item with flexible width. </p> <p> Inflexible item of 100 pixels width. </p> </p>
#container { display: grid; grid-template-columns: repeat(2, 50px 1fr) 100px; grid-gap: 5px; box-sizing: border-box; height: 200px; width: 100%; background-color: #8cffa0; padding: 10px; } #container > p { background-color: #8ca0ff; padding: 5px; }
我還可以將網(wǎng)格嵌套在另一個網(wǎng)格中, 來看看如何實(shí)現(xiàn)這一點(diǎn):
<p class="container"> <p class="item">One</p> <p class="item">Two</p> <p class="item">Three</p> <p class="item inner-grid"> <p class="item">i</p> <p class="item">ii</p> <p class="item">iii</p> <p class="item">iv</p> <p class="item">v</p> <p class="item">vi</p> </p> <p class="item">Five</p> <p class="item">Six</p> </p>
我們首先在外部container
上聲明網(wǎng)格:
.container { display: grid; height: 100vh; grid-gap: 10px; grid-template-columns: repeat(auto-fill, minmax(200px, auto)) }
注意,我們在網(wǎng)格模板中有一個repeat
函數(shù),并將其與一個minmax
函數(shù)組合在一起。我們現(xiàn)在也可以將網(wǎng)格屬性應(yīng)用到內(nèi)部網(wǎng)格。
.inner-grid { display: grid; background: white; height: 100%; grid-gap: 5px; grid-template-columns: repeat(3, auto); }
這樣,我們網(wǎng)格中嵌套了一個網(wǎng)格。
感謝各位的閱讀!關(guān)于使用css grid構(gòu)建復(fù)雜布局的方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
新聞名稱:使用cssgrid構(gòu)建復(fù)雜布局的方法
鏈接URL:http://www.rwnh.cn/article46/jsdheg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、面包屑導(dǎo)航、網(wǎng)站策劃、Google、小程序開發(fā)、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)