您現在的位置是:首頁 > 動作武俠首頁動作武俠
常用九宮格佈局的幾大方法彙總
- 2021-11-28
九宮陣法怎麼擺
對,就是類似這樣的佈局~
作者:郭菊鋒
轉發連結:https://mp。weixin。qq。com/s/4_fJvrluWPC_mO2dXctD_g
前言
小夥伴們是否還記得,之前小編也釋出了幾篇關於CSS相關文章不妨一起來回顧回顧:
《手把手整理CSS3知識彙總【思維導圖】》
《關於前端CSS寫法104個知識點彙總(一)》
《關於前端CSS寫法104個知識點彙總(二)》
《前端開發規範:命名規範、html規範、css規範、js規範》
《手把手教你55 個提高CSS 開發效率的必備片段》
更多的CSS實現技巧相關文章請見文章底部
目錄
1 margin負值實現
2 祖父和親爹的裡應外合
3 換個思路 - li生個兒子幫大忙
4 藉助absolute方位值,實現自適應的網格佈局
5 cloumn多欄佈局
6 grid網格佈局
7 display:table偽表格佈局
8 css3選擇器nth-child()
除非特別說明,以下幾種方式的
通用html結構
如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
除特別說明,佈局中用到的
css reset程式碼
如下:
/* 基礎 */ 。box{ background: #e4f7fd61; border: 2px solid #0786ada1; border-radius: 8px; } ul{ padding: 0; } 。box li{ list-style: none; text-align: center; line-height: 200px; background: rgba(146, 203, 230, 0。65); border-radius: 8px; }
方法一、margin負值實現
原理
原理:margin負邊距
關鍵點
1。 最外層的包裹元素等於:li寬度*3+li右間距*22。 如果li是右間距,則ul的margin-right為負的li間距值。3。 父元素ul使用overflow:hidden;形成bfc,以清除浮動帶來的影響(父元素塌陷)。 4。 margin-bottom和margin-top的配合,是同right的理的,消除最後一排li撐開的底邊距。5。 li要浮動。外邊距方向和ul設定負值的外邊距方向一致。
關鍵程式碼
。box{ width: 940px; } ul{ overflow: hidden; margin-right: -20px; margin-bottom: -20px; margin-top: 0; } 。box li{ float: left; width: 300px; height: 200px; margin-right: 20px; margin-bottom: 20px; }
方法二、祖父和親爹的裡應外合
原理
原理:外層box盒子overflow和ul元素寬度死值相結合
其實換一種角度和思路,又是一個解決方法,不用margin負值,我們想要li要對其ul兩端效果,之所以糾結是因為li又需要margin-right,而右邊最後一個li的margin又會撐開和父親ul的距離,讓我們頭疼。 那既然是節外生枝,我們直接讓祖父砍掉多出來的那一節不就行了?父親ul設定寬度,堅持讓兒子佔他的位置,而box祖父就做一個壞人,使用overflow砍掉多餘出來的一個margin-right的距離。
關鍵點
1。 box使用overflow:hidden;無情的砍掉li的右margin2。 ul唱白臉,設定寬度堅持讓三個li並排站,而不讓最後一個li因為沒地方擠到下一排。3。 li 做最真誠的自己
關鍵程式碼
。box{ width: 640px; overflow: hidden; } ul{ width: 660px; overflow: hidden; margin-bottom: -20px; margin-top: 0; } 。box li{ float: left; width: 200px; height: 200px; margin-right: 20px; margin-bottom: 20px; }
方法三、換個思路 - li生個兒子幫大忙。
間距不一定要加在父元素li身上的,父元素li可以只負責流體佈局,內部用padding或第一層子元素來控制和相鄰元素的間距
原理
原理:圖片中的紅色邊框,是li元素,紅色邊框總的深紅區域是li元素內部的子元素。紅邊框和子元素之間的白色距離是子元素的margin生成。
關鍵點
1。 父元素box以前20的內邊距,這次改成10,因為外孫li>div會幫忙的。2。 li不再設定margin-right來撐開多個li之間的距離3。 li內部的div設定左右margin來撐開li和li以及li和父元素之間的距離。
關鍵程式碼
這裡html結構就要變化一下,除了之前的結構,li內部要多加一個div結構了,作用就是撐開間距。
裡應外合-li的邊距交給孩子們來做,自己只負責一排站三個人的排列工作
- 123
- 456
- 789
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
box{ padding: 20px 10px; display: inline-block; background: #ff000026; } ul{ overflow: hidden; width: 600px; margin-bottom: -10px; margin-top: 0; background: none; } li{ list-style: none; float: left; width: 198px;/*可以用百分比*/ height: 198px;/*可以用百分比*/ margin-bottom: 10px; border: 1px solid red; } li > div{ background: rgba(255, 0, 0, 0。24); margin: 0 10px; border-radius: 8px; text-align: center; line-height: 198px; }
去掉紅色border後的效果
li與嫡長子的左邊距作用於淺紅和深紅之間的左邊距, li嫡長子的右邊距和下一個li嫡長子的左邊距綜合 構成了兩個li之間的間距。
方法四、藉助absolute方位值,實現自適應的網格佈局
自適應?先來一波效果圖:
原理
原理:absolute+四個方位值撐開局面、float+寬度百分比實現橫向排列。高度百分比實現自適應。
關鍵點
1。 page最外層的父元素使用absolute負責佔位,給子元素們把空間拉開。或者用寬高也行
2。 每一個塊的父元素list利用浮動和33。33%的寬度百分比實現橫向自適應排列3。 本案例中,list元素內部用了偽元素+absolute的方式做了效果展示,實際專案中,list元素裡邊就可以填充自己個各式各樣的業務程式碼了。
關鍵程式碼
html,body{ height:100%; margin:0;} 。page{ position:absolute; left:0; top:180px; right:0; bottom:0;} 。list{ float:left; height:33。3%; width:33。3%; position:relative;} 。list:before{ content:‘’; position:absolute; left:10px; right:10px; top:10px; bottom:10px; border-radius:10px; background-color:#cad5eb;} 。list:after{ content:attr(data-index); position:absolute; height:30px; left:0; right:0; top:0; bottom:0; margin:auto; text-align:center; font:24px/30px bold ‘microsoft yahei’;}
方法五、cloumn多欄佈局
原理
原理:cloumn設定三欄佈局,這種還是自適應效果的
關鍵點
1。 box依舊做了最嚴格的祖父,又是寬度限制,又是overflow決絕設卡。2。 ul這次挑了大梁,針對內部的li使用column多欄佈局,設定為三欄顯示,且每一欄之間3。 而有了ul的操心,li則美滋滋的做起了公子哥,只管自己的寬高和下邊距就好,右邊距他爹都給他處理好了。
關鍵程式碼
。box{ width: 640px; overflow: hidden;}ul { /* display: flex; */ -webkit-column-count: 3; -moz-column-count: 3; -webkit-column-gap: 20px; -moz-column-gap: 20px; margin-bottom: -20px; margin-top: 0;}li { width: 200px; height: 200px; /*margin-right: 20px;*/ margin-bottom: 20px;}
方法六、grid網格佈局
原理
原理:用CSS Grid 建立網格佈局,是最簡單也是最強大的方法。
關鍵點
1。 九個單元的父元素wrapper設定display為grid型別(注意相容寫法)
預設九個元素就會堆疊排序。
2。 設定每一行中單個元素的寬度: grid-template-columns,每個寬度值100px根據業務需要設定。
給三個設定了寬度就長這樣了。
3。 設定每一列中單個元素的高度: grid-template-rows,每個高度值100px根據業務需要設定。
最後出現我們想要的效果:
關鍵程式碼
。wrapper{ display: grid; grid-template-columns: 100px 100px 100px; grid-template-rows: 100px 100px 100px;} 。list{ background: #eee;} 。list:nth-child(odd){ background: #999; }
方法七、display:table;
原理
原理:其實他是table的css版本處理方式。原諒我只能想到加結構、模擬tr+td的方式實現了。好處:也是唯一能用來安慰自己的地方就是,不用table標籤少了很多reset樣式~
關鍵點
1。 三行li,每個li裡三列div(模擬表格的結構)2。 父元素ul使用display: table(此元素會作為塊級表格來顯示(類似
和 | )) 關鍵程式碼 html: css: 。table { display: table; } 。table li { display: table-row; background: #beffee; } 。disTable li:nth-child(odd) { background: #bec3ff; } 。table li div { width: 200px; line-height: 200px; display: table-cell; text-align: center; } 。table li:nth-child(odd) div:nth-child(even) { background: #beffee; } 。table li:nth-child(even) div:nth-child(even) { background: #bec3ff; } 方法八、css3選擇器nth-child() 原理 原理:利用css的選擇器,選擇對應個數的li,設定特殊樣式。 不足 缺點:li必須要設定固定的寬高,且ul也要設定固定寬高,以強制似的li“歸位”。 關鍵點 1。 li。nth-child(3n):控制第3以及3的倍數的li的右邊距不存在。 關鍵程式碼 ul,li{ list-style: none; overflow: hidden; } ul{ width: 620px;} li。list{ float: left; width: 200px; height: 200px; margin-right: 10px; margin-bottom: 10px; background: #eee; } li:nth-child(3n){ margin-right: 0; } 以上,幾乎都沒有考慮相容性。因為很多css3方法,掰著腳指頭想相容性也不會如你意。 如果pc求穩,就用前幾招。 如果移動求快準狠,就用後幾招。 至此,佈局篇告一段落~ 推薦關於CSS使用技巧知識點相關文章 《手把手整理CSS3知識彙總【思維導圖】》 《關於前端CSS寫法104個知識點彙總(一)》 《關於前端CSS寫法104個知識點彙總(二)》 《前端開發規範:命名規範、html規範、css規範、js規範》 《手把手教你55 個提高CSS 開發效率的必備片段》 《手把手教你常見的CSS佈局方式【實踐】》 《你未必知道的49個CSS知識點》 《手把手教你css 中多種邊框的實現小竅門【實踐】》 《手把手教你深入CSS實現一個粒子動效的按鈕》 《CSS變數實現暗黑模式,我的小鋪頁面已經支援》 《手把手教你利用CSS控制文字溢位截斷省略解決方案合集》 《今天全國哀悼日,手把手教你一段css讓全站變灰》 《讓CSS flex佈局最後一行左對齊的N種方法》 作者:郭菊鋒 轉發連結:https://mp。weixin。qq。com/s/4_fJvrluWPC_mO2dXctD_g 相關文章 |
---|