天天看點

多列等高及自适應布局

多列等高是常見的布局之一。

即讓内容高度不一樣的每一列保持高度一緻。

解決方案:

利用table的自适應,将每個div變成td,td自然都是等高的。

html:

<div class="wrapper">
    <div>生活如酒,或芳香,或濃烈,因為誠實,它變得醇厚;生活如歌,或高昂,或低沉,因為守信,它變得悅耳; 生活如畫,或明麗,或素雅,因為誠信,它變得美麗。</div>
    <div>若能掬起一捧月光,我選擇最柔和的;若能采來香山紅葉,我選擇最豔麗的;若能摘下滿天星辰,我選擇最明亮的。也許你會說,我的選擇不是最好,但我的選擇,我相信。</div>
    <div>當三闾大夫抱着石頭與江水相擁,當西楚霸王自刎時的鮮血染紅了整片夕陽,當普羅米修斯裸着身體被巨鷹啄食,當拉奧孔扭曲着身體仍想保衛自己的兒子,曆史的悲風中發出陣陣悲鳴,但他們生命的結尾卻那麼響亮有力,數千年來仍叩擊着人們的心靈,播放出永不低沉的生命絕唱!</div>
    <div>人生彎彎曲曲水,世事重重疊疊山。</div>
</div>
           

css:

.wrapper{
            display: table;
            border-spacing: 20px; /* td的間距 */
            padding: 0;
            margin: 0;
            box-sizing: border-box;
        }
.wrapper > div {
            display: table-cell;
            width: 1000px;  /* 設定寬度,table自動平分 */
            border-radius: 5px;
            background: #eeedf2;
            padding: 10px;
            border: 1px solid #ccc;
            box-sizing: border-box;
        }
           

展示效果:

多列等高及自适應布局

這樣一個多列等高已經實作了。

但是一個好的頁面要有好的自适應響應式布局。

當在移動端的時候,我們希望變成單列布局。利用媒體查詢改一下樣式覆寫表格屬性即可。

/*寬度小于500時單列顯示 适用于移動端*/
        @media (max-width: 500px) {
            .wrapper{
                display: block;
            }
            .wrapper > div{
                display: block;
                width: 100%;
                margin-bottom: 20px;
            }
        }
           

展示效果:

多列等高及自适應布局

而當在中螢幕1024px裝置上希望兩行布局呢?

加一個tr就行。

<div class="wrapper">
    <div>生活如酒,或芳香,或濃烈,因為誠實,它變得醇厚;生活如歌,或高昂,或低沉,因為守信,它變得悅耳; 生活如畫,或明麗,或素雅,因為誠信,它變得美麗。</div>
    <div>若能掬起一捧月光,我選擇最柔和的;若能采來香山紅葉,我選擇最豔麗的;若能摘下滿天星辰,我選擇最明亮的。也許你會說,我的選擇不是最好,但我的選擇,我相信。</div>
    <span class="tr"></span>
    <div>當三闾大夫抱着石頭與江水相擁,當西楚霸王自刎時的鮮血染紅了整片夕陽,當普羅米修斯裸着身體被巨鷹啄食,當拉奧孔扭曲着身體仍想保衛自己的兒子,曆史的悲風中發出陣陣悲鳴,但他們生命的結尾卻那麼響亮有力,數千年來仍叩擊着人們的心靈,播放出永不低沉的生命絕唱!</div>
    <div>人生彎彎曲曲水,世事重重疊疊山。</div>
</div>
           
.tr{
            display: none;
        }
@media (max-width: 1024px) and (min-width: 501px) {
            .tr{
                display: table-row;
            }
        }
           

展示效果:

多列等高及自适應布局

但是這個時候會有一個問題,就是中螢幕拉大大螢幕時tr的display:none已經沒用了,因為table的布局已經計算好了。但是這個也不用考慮,重新整理頁面即可,如果真要解決,那就需要用到js了。

這樣一個多列等高并且自适應的布局就做好了。

下面是完整代碼demo。

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>多列等高</title>
    <style>
        .wrapper{
            display: table;
            border-spacing: 20px; /* td的間距 */
            padding: 0;
            margin: 0;
            box-sizing: border-box;
        }
        .wrapper > div {
            display: table-cell;
            width: 1000px;  /* 設定寬度,table自動平分 */
            border-radius: 5px;
            background: #eeedf2;
            padding: 10px;
            border: 1px solid #ccc;
            box-sizing: border-box;
        }

        /*寬度小于500時單列顯示 适用于移動端*/
        @media (max-width: 500px) {
            .wrapper{
                display: block;
            }
            .wrapper > div{
                display: block;
                width: 100%;
                margin-bottom: 20px;
            }
        }
        .tr{
            display: none;
        }
        @media (max-width: 1024px) and (min-width: 501px) {
            .tr{
                display: table-row;
            }
        }
    </style>
</head>
<body>
<div class="wrapper">
    <div>生活如酒,或芳香,或濃烈,因為誠實,它變得醇厚;生活如歌,或高昂,或低沉,因為守信,它變得悅耳; 生活如畫,或明麗,或素雅,因為誠信,它變得美麗。</div>
    <div>若能掬起一捧月光,我選擇最柔和的;若能采來香山紅葉,我選擇最豔麗的;若能摘下滿天星辰,我選擇最明亮的。也許你會說,我的選擇不是最好,但我的選擇,我相信。</div>
    <span class="tr"></span>
    <div>當三闾大夫抱着石頭與江水相擁,當西楚霸王自刎時的鮮血染紅了整片夕陽,當普羅米修斯裸着身體被巨鷹啄食,當拉奧孔扭曲着身體仍想保衛自己的兒子,曆史的悲風中發出陣陣悲鳴,但他們生命的結尾卻那麼響亮有力,數千年來仍叩擊着人們的心靈,播放出永不低沉的生命絕唱!</div>
    <div>人生彎彎曲曲水,世事重重疊疊山。</div>
</div>

</body>
</html>
           

繼續閱讀