淘宝双飞翼布局

Author Avatar
Roojay 9月 16, 2017
  • 在其它设备中阅读本文章

淘宝双飞翼布局

淘宝双飞翼布局和圣杯布局在前半部分的思路都差不多,只是在解决中间栏内容被挡住时所采用的方法不同。双飞翼布局在 main 下多一个增加 div,不使用相对定位,只用浮动和负边距,解决三栏液态式布局。

DOM 结构

在 DOM 中按照主列、子列、附加列的顺序排列,保证主列优先加载。

<div class="header">
        <strong>三栏布局之双飞翼布局</strong>
    </div>
    <div class="container">
        <div class="col main">
             <div class="main-wrap">我是一个宽度自适应的主列。</div>
        </div>
        <div class="col sub">我是一个子列。</div>
        <div class="col extra">我是一个附加列。</div>
    </div>
    <div class="footer"></div>

以上 DOM 结构中,在 main 中添加了一个子 div,用来解决中间列内容被遮挡问题。

CSS 样式

去掉相对定位的使用,去掉了父容器的 padding,使用中间栏新增 div 的 margin 解决遮挡问题。

        body {
            padding: 0;
            margin: 0;
            min-width: 440px;
        }
        .header,
        .footer {
            background-color: ##1c262f;
            color: white;
            text-align: center;
            font-size: 1.5em;
        }
        .container {
            width: 100%;
            min-height: 200px;
        }
        .col {
            float: left;
            color: white;
            text-align: justify; /* 文字两端对齐 */
            min-height:120px;
        }
        .main{
            width: 100%;
        }
        .sub {
            background-color: ##ea4335;
            width: 120px;
            margin-left: -100%;
        }
        .extra {
            background-color: ##34a853;
            width: 200px;
            margin-left: -200px;
        }
        .main-wrap {
            margin-left: 120px;
            margin-right: 200px;
            background-color: ##4285f3;
        }
        .footr {
            clear: both;
        }

为 body 加上一个最小宽度(2 * sub width + extra width),避免网页放大时中间栏被挤到消失。

The MIT License (MIT)
Copyright (c) 2019, Roojay.

本文链接:https://roojay.com/pages/ff1e4b17/