這篇文章,咱們來整理一下 CSS 佈局相關內容css
佈局是把頁面分紅一塊一塊,按左中右、上中下等排列。瀏覽器
注意: 使用 float 佈局 和 flex 佈局時,必要時採用負 margin 。ide
float: left
和 width
.clearfix
.clearfix{
content: '';
display:block;
clear: both;
}
複製代碼
使用 float 佈局,通常會留一些空間或者最後一個不設 width。佈局
注意: IE 6/7 存在雙倍 margin 的bug,經過以下辦法解決flex
display: inline-block
tips:優化
margin: 0 auto;
能夠設置居中。能夠優化爲 margin-left: auto; margin-right: auto;
。若是是一個塊級元素,左右外邊距 auto 能夠直接讓元素居中關於 flex 佈局,咱們經過兩部分樣式來介紹ui
.container{/* 讓元素變成一個 flex 容器 */
display: flex | inline-block;
}
複製代碼
.container{/* 改變 item 流動方向(主軸),默認 row */
flex-direction: row | row-reverse | column | column-reverse;
}
複製代碼
.container{/* 改變折行,默認 nowrap 。折行不會把元素斷開 */
flex-wrap: nowrap | wrap | wrap-reverse;
}
複製代碼
.container{/* 主軸對齊方式,默認 flex-start */
justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly;
}
複製代碼
.container{/* 次軸對齊方式,默認 stretch ,子元素拉到最長的元素同樣高 */
align-items: stretch | flex-start | flex-end | center | baseline;
}
複製代碼
.container{/*多行內容,決定了行之間的間隔*/
align-content: flex-start | flex-end | center | stretch | space-between | space-around;
}
複製代碼
補充:flex-flow 能夠合併 flex-direction 和 flex-wrap 使用spa
flex-grow: 1
,寬度剩餘全給導航欄flex-shrink: 0
防止變瘦,默認是 1flex: flex-grow flex-shrink flex-basis
items 設置 margin-left: auto
,效果和 justify-content: space-between
同樣,可使 items 靠右,推薦使用 margin-leftcode
注意:永遠不要把高度和寬度寫死ip
Grid 也分爲 container 和 items
.container{
display: grid | inline-grid;
}
複製代碼
.container{/*行和列*/
grid-template-columns: 40px 50px auto 50px 40px;
gird-template-rows: 25% 100px auto;
}
複製代碼
.container{/*等比分佈局*/
grid-template-columns: 1fr 1fr 1fr;
}
複製代碼
.container{/*固定一塊佈局列寬,其他等比分配剩餘寬度*/
grid-template-columns: 1fr 50px 1fr 1fr;
}
複製代碼
.container{/*還能夠給每條線設置名字*/
grid-template-columns:[first] 40px [line2] 50px [line3] auto [col4-start] 50px [five] 40px [end];
grid-template-rows:[row1-start] 25% [row1-end] 100px [third-line] auto [last-line];
}
複製代碼
.item-a{/*針對上述設置,item能夠設置範圍*/
grid-column-start: line2;
grid-column-end: five;
grid-row-start: row1-start;
}
複製代碼
經過 grid-template-areas
設置分區
.container{
display: grid;
grid-template-columns: repeat(4, 50);/*重複設置*/
gird-template-rows: auto;
grid-template-areas:
"header header header header"
"main main sider"
". footer footer footer";/*不但願出現內容的區域,一般用 . 命名*/
}
.item-a{
grid-area: header;
}
.item-b{
grid-area: main;
}
.item-c{
grid-area: sider;
}
複製代碼
空隙 gap
.container{
grid-template-columns: 100px 50px 100px;
grid-template-rows: 80px auto 80px;
grid-column-gap: 10px;
grid-row-gap: 15px;
}
複製代碼
結語:一維佈局選 Flex ,二維佈局選Grid,Grid 尤爲適合不規則的佈局。