CSS常用布局实现05-圣杯布局和双飞翼布局

1. 简介

其实对于三列布局的实现,之前网上使用最多的还是这两种。它们有一个共同的优点,就是可以使主内容优先加载。当然,如果不考虑兼容,flex和grid还是优先推荐的。

2.实现

我们直接上代码,代码中有详细注释:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>圣杯布局vs双飞翼布局</title>
    <style>
        * {
            margin:0;
            padding: 0;
        }
        section {
            margin-bottom: 10px;
        }
        /*虽然清除了浮动,但需要注意的是负margin引发的副作用,section其实包含了left和right负margin前的内容高度*/
        .clearfix:after {
            display: table;
            content: '.';
            visibility: hidden;
            clear: both;
        }
    </style>
</head>
<body>
<!--圣杯布局-->
<!--优点:主内容优先展示-->
<!--缺点:屏幕宽度缩太小时,样式会乱-->
<section class="holy-grail clearfix">
    <style>
        .holy-grail .wrap {
            padding: 0 200px;
        }
        .holy-grail .main {
            width: 100%;
            float: left;
            background: red;
        }
        .holy-grail .left {
            width: 200px;
            float: left;
            background: green;
            margin-left: -100%;
            position: relative;
            left: -200px;
        }
        /*这里设置margin-right可以代替注释的三行代码的效果*/
        .holy-grail .right {
            width: 200px;
            float: left;
            background: blue;
            /*margin-left: -200px;*/
            /*position: relative;*/
            /*left: 200px;*/
            margin-right: -200px;
        }
    </style>
    <article class="wrap">
        <div class="main">
            <p>main content</p>
            <p>main content</p>
            <p>main content</p>
        </div>
        <div class="left">left content</div>
        <div class="right">right content</div>
    </article>
</section>
<!--双飞翼布局-->
<!--优点:主内容优先显示,兼容性好-->
<!--缺点:需要增加一层html结构-->
<section class="double-wings clearfix">
    <style>
        .double-wings .main {
            width: 100%;
            float: left;
        }
        .double-wings .left {
            width: 200px;
            float: left;
            background: green;
            margin-left: -100%;
        }
        .double-wings .right {
            width: 200px;
            float: left;
            background: blue;
            margin-left: -200px;
        }
        .double-wings .inner {
            background: red;
            margin: 0 200px;
        }
    </style>
    <article class="wrap">
        <div class="main">
            <div class="inner">
                <p>main content</p>
                <p>main content</p>
                <p>main content</p>
            </div>
        </div>
        <div class="left">left content</div>
        <div class="right">right content</div>
    </article>
</section>
</body>
</html>
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,394评论 1赞 92
  • 前言 温馨提示:本文较长,图片较多,本来是想写一篇 CSS 布局方式的,但是奈何 CSS 布局方式种类太多并且实现...
    sunshine小小倩阅读 3,321评论 0赞 59
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 180,883评论 25赞 708
  • 1关于兴趣 喜欢的事一定去做,并且做到尽善尽美 应该的事一定坚持,绝不半途而废 不喜欢的事一定了解,这样才有资格说...
    北辰拾年阅读 532评论 8赞 1
  • 最近市场行情非常差,boss货都压在库里压力甚大,那脸色真是阴晴不定,每天都会出现间歇性情绪波动。 和他一沟通...
    k承龙阅读 801评论 0赞 51

友情链接更多精彩内容