1、文章引言
我們在寫頁面的時候,經常會遇到多欄佈局的情況,如果欄目帶有背景色並且欄目內容高度不一樣的話,就會導致每個欄目的底部是無法不齊的,這樣在排版佈局以及給使用者的體驗不是很好!實際的問題效果如下圖所示:
2、需求如下
我們要實現的效果就是當各個欄目內容不一樣的情況下,保證各個欄目還是對齊的。想要實現的效果如下圖所示:
3、如何解決
HTML結構程式碼如下所示:
<ul class="Article">
<li class="js-article-item">
<p>
一家將客戶利益置於首位的經紀商,
為客戶提供專業的交易工具一家將客戶利益置於首位的經紀商,
為客戶提供專業的交易工具一家將客戶利益置於首位的經紀商,
為客戶提供專業的交易工具一家將客戶利益置於首位的經紀商,為客戶提供專業的交易工具
</p>
</li>
<li class="js-article-item">
<p>一家將客戶利益置於首位的經紀商,為客戶提供專業的交易工具
一家將客戶利益置於首位的經紀商,為客戶提供專業的交易工具</p>
</li>
<li class="js-article-item">
<p>一家將客戶利益置於首位的經紀商</p>
</li>
</ul>複製程式碼
1、使用負margin-bottom和正padding-bottom對衝實現
.Article {
overflow: hidden;
}
.Article>li {
float: left;
margin: 0 10px -9999px 0;
padding-bottom: 9999px;
background: #4577dc;
width: 200px;
color: #fff;
}
.Article>li>p {
padding: 10px;
}複製程式碼
元素設定的padding-bottom儘可能大一些,並且需要設定一樣大小的margin-bottom負值去抵消padding-bottom撐大的區域,正負一抵消,對於頁面佈局不會有影響。另外的話還需要設定父元素overflow:hidden把子元素多出來的色塊背景隱藏掉。
2、模仿table佈局
.Article {
display: table;
width: 100%;
table-layout: fixed;
}
.Article>li {
display: table-cell;
width: 200px;
border-left: solid 5px currentColor;
border-right: solid 5px currentColor;
color: #fff;
background: #4577dc;
}
.Article>li>p {
padding: 10px;
}
複製程式碼
table元素中的table-cell元素預設就是等高的。
3、flex佈局
.Article {
display: flex;
}
.Article>li {
flex: 1;
border-left: solid 5px currentColor;
border-right: solid 5px currentColor;
color: #fff;
background: #4577dc;
}
.Article>li>p {
padding: 10px;
}
複製程式碼
flex中的伸縮專案預設為拉伸為父元素的高度,同樣可以實現等高效果。在pc端相容性不是很好,在ie9以及ie9以下不支援。
4、grid佈局
.Article {
display: grid;
grid-auto-flow: column;
grid-gap: 20px;
}
.Article>li {
border-left: solid 5px currentColor;
border-right: solid 5px currentColor;
color: #fff;
background: #4577dc;
}
.Article>li>p {
padding: 10px;
}
複製程式碼
grid佈局的缺點和flex一樣,pc端相容性不是很好,ie9以及ie9以下不支援。
5、js計算
.Article>li {
float: left;
border: solid 5px #fff;
width: 33%;
color: #fff;
font-size: 16px;
background: #4577dc;
}
.Article>li>p {
padding: 10px;
}
複製程式碼
jQuery( document ).ready(function() {
setEqualheight();
});
jQuery(window).resize(function() {
jQuery('.js-article-item').css('height','auto');
setEqualheight();
});
function setEqualheight() {
var height = jQuery(".js-article-item").map(function() {
return jQuery(this).height();
}).get();
jQuery(".js-article-item").height( Math.max.apply(null, height) );
}
複製程式碼
6、小結
如果有什麼疑問或者更好的建議,歡迎在評論區留言。文筆有限,文中若有不正之處,萬望告知!