两\多列布局优劣与选择

  • 浮动

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>浮动布局</title>
        <style>
        .box{
           overflow: hidden;
        }
        .box1 {
            float: left;
            background: red;
            width: 20%;
            height: 80px;
        }
        .box2 {
            float: right;
            background: blue;
            width: 80%;
           height: 180px;
        }
        </style>
    </head>
    
    <body>
        <div class="box">
            <div class="box1"></div>
            <div class="box2"></div>
        </div>
    </body>
    </html>

    效果:

    代码量少,能够轻松实现多列布局(父元素高度坍塌那都不叫事)。但是,无法实现各列高度自适应,设置多列宽度后,剩下一列宽度无法自适应,而且浮动原本不是用来布局的,他是用来实现文字环绕图片来着。而且无法通过父元素设置text-align:center,使得子元素居中显示,浮动是紧贴顶部的。无法设置vertical属性进行设置垂直对其方式。

    使用场景:早期布局神器,但是很多地方需要设置绝对值,导致无法自适应,或者在设置百分比的时候容易导致布局错乱

    案例:w3c官方文档

  • 绝对定位
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>绝对定位布局</title>
        <link rel="stylesheet" href="css/install.css">
        <style>
        .box {
            position: relative;
        }
        
        .box1 {
            background: red;
            width: 20%;
            height: 80px;
        }
        
        .box2 {
            position: absolute;
            display: inline-block;
            background: blue;
            width: 80%;
            height: 180px;
            top: 0px;
            left: 20%;
        }
        </style>
    </head>
    
    <body>
        <div class="box">
            <div class="box1"></div>
            <div class="box2"></div>
        </div>
    </body>
    </html>

    效果:

    高宽都不能自适应,而且position具有破坏性,脱离了文档流,具有遮罩特性。一般用作弹出层。京东、淘宝、天猫首页商品都有使用,一般不用来布局

  • display:inline-block
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>display:inline-block</title>
        <link rel="stylesheet" href="css/install.css">
        <style>
        .box{
           overflow: hidden;
           font-size: 0px;
        }
        .box1 {
            display: inline-block;
            background: red;
            width: 20%;
            height: 80px;
            font-size: 20px;
            text-align: center;
            vertical-align: top;
        }
        .box2 {
            display: inline-block;
            background: blue;
            width: 80%;
            height: 180px;
            font-size: 20px;
            text-align: center;
            vertical-align: top;
        }
        </style>
    </head>
    <body>
        <div class="box">
            <div class="box1">box1</div>
            <div class="box2">box2</div>
        </div>
    </body>
    </html>

    效果:

    没有浮动的烦恼,可以设置各列垂直水平对其,inline-block元素之间有html空白,而且inline-block元素沿着默认的基线对齐,会出现在各种奇形怪状的高度,可以通过vertical-align或者line-height进行设置

  • display:table-cell
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>绝对定位布局</title>
        <link rel="stylesheet" href="css/install.css">
        <style>
        .box {
            display: table;
            table-layout: fixed;
            width: 100%;
            text-align: center;
        }
        
        .box>div {
            display: table-cell;
        }
        
        .box1 {
            background: red;
            vertical-align: middle;
        }
        
        .box2 {
            background: blue;
            vertical-align: middle;
        }
        
        .box3 {
            background: yellow;
            vertical-align: middle;
        }
        </style>
    </head>
    
    <body>
        <div class="box">
            <div class="box1">
                <p>box1</p>
                <p>box1</p>
            </div>
            <div class="box2">
                box2
            </div>
            <div class="box3">
               box3
            </div>
        </div>
    </body>
    </html>

    效果:

    inline-block的升级版,不需要清除各列之间的空白间隙,各列宽度可以根据外边框自适应都能做到可控

  • display:flex

    未完待续..................

时间: 2024-09-29 17:53:53

两\多列布局优劣与选择的相关文章

bootstrap的栅格布局与两列布局结合使用

在工作中我们常常需要实现响应式布局,这个可以使用bootstrap的栅格系统来实现,我们在列里也需要实现一部分的响应式.比如下面的效果图,需要实现左边图标固定,右边的自适应 : 左边固定宽度,右边自适应,这个时候我就想到了两列布局,将左右设置float,左边设置固定宽度,右边的宽度为calc(100% - 左边的宽度),把这两种布局结合使用就可以实现效果.

如何通过 CSS 实现一个左边固定宽度、右边自适应的两列布局

最近在百度 IFE 训练营中看见的一道题目: 用两种不同的方法来实现一个两列布局,其中左侧部分宽度固定.右侧部分宽度随浏览器宽度的变化而自适应变化  个人总结出如下三种实现思路: 通过绝对定位实现 See the Pen absolute-two-column by xal821792703 (@honoka) on CodePen. 注意点如下: 需要套一个“positioned”的父元素 div-a 绝对定位,并将位置调整为浏览器左上角 div-b margin-left 属性值为 div-

两列布局的设置方法总结

今天看到了这样一道题 用两种不同的方法来实现一个两列布局,其中左侧部分宽度固定.右侧部分宽度随浏览器宽度的变化而自适应变化 自己感觉有好几种方法,再此总结下: 一.使用position:absolute方法,因为把元素设置为absolute,那元素就脱离了文档流,后面的元素就会占据他原来的位置: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xht

盒子模型、网页自动居中、float浮动与清除、横向两列布局

1.CSS包含:标准文档流,浮动,绝对定位 标准文档流的特点:从上到下,从左到右,输出文档内容 盒子模型:块级元素(div ui li dl dt p)与行级元素(span strong img input) 盒子模型:边框(border)外边框(margin)内边框(padding)内容(content) 盒子3D模型:border. content+padding .background-img.background-color.margin <html> <head> <

两列布局实现方法

两列布局的实现方式有很多,现根据不同需求列出常用的几种 一.两列固定布局 1.普通的浮动布局 两列固定布局,已知左列和右列内容的宽度,可以用float来实现 html: <div class="wrap clearfix"> <div class="left"> <p>左侧固定宽度</p> <p>左侧固定宽度</p> <p>左侧固定宽度</p> <p>左侧固定

两列布局中单列定宽单列自适应布局的5种思路

× 目录 [1]float [2]inline-block [3]table[4]absolute[5]flex 前面的话 说起自适应布局方式,单列定宽单列自适应布局是最基本的布局形式.本文将从float.inline-block.table.absolute和flex这五种思路来详细说明如何巧妙地实现布局 思路一: float 说起两列布局,最常见的就是使用float来实现.float浮动布局的缺点是浮动后会造成文本环绕等效果,以及需要及时清除浮动.如果各浮动元素的高度不同时,可能会出犬牙交错

两列布局方式

两列布局方式:1.float IE6 有3px偏移 在left上加 margin-left: -100px.left{ background-color: red;float: left;width: 100px } .right{background-color: green;margin-left: 110px } <div class="content"> <div class="left">left</div> <d

用绝对定位实现横向两列布局

用绝对定位实现横向两列布局 1.左边定宽列的高度>右边自适应宽度的列 2.用绝对定位会脱离标准文档流,会改变自己在原来页面中的格式,所以需要使左边的列比右边的列高,目的是可以撑开父元素,如果左边的列比右边的列低,那么右边的列会发生溢出,此时可能会想到给父元素设置overflow:hidden:但是会发现右边的列的内容被截断了,部分内容无法看到. 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 &l

两列布局,左边div固定宽度,右边宽度自适应

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Cont