CSS 布局

作者: _空空 | 来源:发表于2017-07-18 16:58 被阅读18次

    常见布局示意图

    单列布局

    • 定宽
    width: 1000px; 或 max-width: 1000px;
    
    • 水平居中
    margin-left: auto; margin-right: auto;
    
    • 内部元素水平居中
    .parent { text-align: center; }
    .child { display: inline-block; }
    
    // IE6不支持inline-block
    .child { *display: inline; *zoom: 1; }  
    

    第一列第2个例子(通栏)

        <style type="text/css">
        * {
            padding: 0;
            margin: 0;
        }
    
        body {
            /* 
            若 .layout 设置宽度 width: 960px;,当窗口宽度小于 960px 时,
            header、footer的背景色会出现bug
    
            给 body 设置 min-width 去掉滚动背景色 bug 
    
            若 .layout 设置宽度 max-width: 960px;,那就不需要了
            */
            /*min-width: 960px;*/
        }
    
        .layout {
            /* 注意 max-width 和 width 的区别,若使用 width,当窗口宽度小于 960px时,会出现横向滚动条 */
            /*width: 960px; */
            max-width: 960px;
            margin: 0 auto;
            border: 1px solid black;
        }
    
        #header {
            height: 100px;
            background: teal;
            text-align: center;
            font-size: 0;
        }
    
        #header > .layout {
            padding: 10px;
        }
    
        #header .btn {
            display: inline-block;
            padding: 5px 8px;
            border: 1px solid #ccc;
            border-right: none;
            color: #fff;
            text-decoration: none;
            font-size: 15px;
        }
    
        #header .btn:first-child {
            border-radius: 5px 0 0 5px;
        }
    
        #header .btn:last-child {
            border-right: 1px solid #ccc;
            border-radius: 0 5px 5px 0;
        }
    
        #content {
            position: relative;
            height: 500px;
            background: lightcoral;
        }
    
        #footer {
            height: 80px;
            background: lightgreen;
        }
        </style>
    </head>
    <body>
    <header id="header">
        <div class="layout">
            <a href="#" class="btn">HTML</a>
            <a href="#" class="btn">CSS</a>
            <a href="#" class="btn">JavaScript</a>
        </div>
    </header>
    <main id="content" class="layout">内容</main>
    <footer id="footer">
        <div class="layout">尾部</div>
    </footer>
    </body>
    

    第一列第5个例子

        <style type="text/css">
        * {
            padding: 0;
            margin: 0;
        }
    
        .parent {
            /* 或者我们采用 flex  */
            /*display: flex;*/
            /*justify-content: center;*/
    
            max-width: 600px;
            margin: 0 auto;
            padding: 10px 0;
            border: 1px solid red;
            text-align: center;
            font-size: 0;
        }
    
        .child {
            /* 
            inline-block 要少用,一般作为父元素的唯一子元素才考虑,
            因为存在底部间距问题,需要在父元素内设置字体大小为 0
    
            这里 display: inline-block; 形成BFC,可以包含浮动元素
            */
            display: inline-block;
            border: 1px solid green;
            font-size: 15px;
        }
    
        .child > span {
            float: left;
            border: 1px solid blue;
        }
        </style>
    </head>
    <body>
    <div class="parent">
        <div class="child">
            <span>确定</span>
            <span>取消</span>
        </div>
    </div>
    </body>
    

    利用 inline-block 做到绝对居中(了解就行)

       <style type="text/css">
        * {
            padding: 0;
            margin: 0;
        }
    
        .wrapper {
            width: 600px;
            height: 600px;
            margin: 0 auto;
            border: 1px solid red;
            /* 利用 左右两个 span 和 text-align: center; 做到水平居中 */
            text-align: center;
        }
    
        .wrapper > span {
            /* 利用 span 的高度 100% 和 vertical-align: middle; 做到垂直居中 */
            display: inline-block;
            height: 100%;
            border: 1px solid pink;
            vertical-align: middle;
        }
    
        /* span 元素 我们用 ::before、::after 来代替;*/
        .wrapper:before,
        .wrapper:after 
        {
            content: "";
            display: inline-block;
            height: 100%;
            vertical-align: middle;
        }
    
        .wrapper > main {
            display: inline-block;
            width: 200px;
            background-color: #ccc;
            vertical-align: middle;
        }
    
        </style>
    </head>
    <body>
    <div class="wrapper clearfix">
        <!-- <span>12345</span> -->
        <main>main main main main main main main main main main main main</main>
        <!-- <span>12345</span> -->
    </div>
    </body>
    

    双列布局

    • 一列固定宽度,另外一列自适应高度
    • 浮动元素/定位元素 + 普通元素 margin

    第二列第1个例子

        <style type="text/css">
        * {
            padding: 0;
            margin: 0;
        }
    
       .clearfix:after {
            content: "";
            display: block;
            clear: both;
        }
    
        .content {
            /* 2、采用定位的方式 */
            /*position: relative;*/
    
            /* 3、采用flex的方式 */
            /*display: flex;*/
    
            max-width: 800px;
            margin: 0 auto;
            background-color: pink;
        }
    
        .content > .aside {
            /* 1、采用浮动的方式 */
            float: left;
    
            /* 如果侧栏在右边呢?注意:页面元素的渲染顺序 */
            /*float: right;*/
    
            /*position: absolute;*/
            /*left: 0;*/
            /*right: 0;*/
    
            width: 200px;
            height: 400px;
            background: teal;      
        }
    
        .content > .main {
           margin-left: 210px;
           /*margin-right: 210px;*/
    
           /*margin-left: 10px;*/
           /*flex-grow: 1;*/
    
           height: 600px;
           background: orange;
        }
        </style>
    </head>
    <body>
    <div class="content clearfix">
        <aside class="aside">aside</aside>
        <main class="main">content</main>
    </div>
    </body>
    

    第二列第2个例子

       <style type="text/css">
        * {
            padding: 0;
            margin: 0;
        }
    
        .card {
            max-width: 400px;
            margin: 0 auto;
            border: 1px solid green;
    
            position: relative;
    
            /*display: flex;*/
        }
    
        .card > .avator {
            /*float: left;*/
    
            /* 
            注意:如果 .text 内容撑起的高度小于 .avator 的高度怎么办呢? 
            所以 要考虑到多方面的情况,可以给 .text 设置最小高度
            */
            /* 除了 float,我们也可以使用 定位 的方式来做 */
            position: absolute;
            left: 0;
            right: 0;
    
            /* 用 flex 的方式来做 */
            /* 
            这里 .avator 会被压缩空间,通过设置其 min-width 恢复正常 
            或者给 .text 设置一个宽度 和 flex-grow: 1; 使其占据剩余空间
            */
            
            width: 40px;
            height: 40px;
            border-radius: 50%;
            border: 1px solid black;
            background-color: #ccc;
        }
    
        .card > .text {
            margin-left: 52px;
    
            /*margin-left: 10px;*/
            /*width: 100px;*/
            /*flex-grow: 1;*/
    
            min-height: 42px;
            border: 1px solid red;
        }
    
        </style>
    </head>
    <body>
    <div class="card">
        <div class="avator"></div>
        <div class="text">
            减肥的空间就看到
            反馈的风景卡及阿奎
            反馈的风景卡及阿奎罗分可了解对方
            景卡及阿奎罗分可了解对方卡拉胶的风
            景卡及阿奎罗分可了解对方卡拉胶的风
            景卡及阿奎罗分可了解对方卡拉胶的风
            <div style="text-align: right; padding: 0 5px;">
                <button style="padding: 1px 7px; border: 1px solid">赞</button>
            </div>
        </div>
    </div>
    </body>
    

    三列布局

    • 两侧两列固定宽度,中间列自适应宽度

    第三列第1个例子

        <style type="text/css">
        * {
            padding: 0;
            margin: 0;
        }
    
       .clearfix:after {
            content: "";
            display: block;
            clear: both;
        }
    
        .wrapper {
            /* 2、采用定位的方式 */
            /*position: relative;*/
    
            /* 3、采用 flex 的方式 */
            /*display: flex;*/
    
            max-width: 800px;
            margin: 0 auto;
            background-color: pink;
        }
    
        .wrapper > .menu {
            /* 1、采用浮动的方式 */
            float: left;
    
            /*position: absolute;*/
            /*top: 0;*/
            /*left: 0;*/
    
            /*order: 1;*/
    
            width: 150px;
            height: 400px;
            background-color: lightgreen;
        }
    
        .wrapper > .aside {
            float: right;
    
            /*position: absolute;*/
            /*top: 0;*/
            /*right: 0;*/
    
            /*order: 3;*/
    
            width: 200px;
            height: 300px;
            background: teal;      
        }
    
        .wrapper > .main {
           margin-left: 160px;
           margin-right: 210px;
    
           /*flex-grow: 1;*/
           /*order: 2;*/
           /*margin: 0 10px;*/
    
           height: 600px;
           background: orange;
        }
        </style>
    </head>
    <body>
    <div class="wrapper clearfix">
        <!-- 为什么不是 main 在前面?还是跟渲染顺序有关 -->
        <div class="menu">menu</div>
        <aside class="aside">aside</aside>
        <main class="main">main</main>
    </div>
    </body>
    

    相关文章

      网友评论

        本文标题:CSS 布局

        本文链接:https://www.haomeiwen.com/subject/xuotkxtx.html