HTML的布局

本文详细介绍了如何使用CSS的浮动技术让两个块级元素在同一行显示,并探讨了浮动带来的父元素塌陷问题及其解决方案,包括设置固定高度、使用空盒子清除浮动以及利用伪元素`::after`。通过实例代码展示了不同方法的应用和效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

重中之重

需求:

Html默认采用文档流布局方式:浏览器会自上而下,从左到右依次显示标签元素,遇到块级元素则独占一行,行级元素同行共存。

两个块级元素如何在同一行显示?

办法1:使用display   inline  或inline-block  ----》打破默认的文档流布局方式。

        问题:

       

办法2:使用浮动技术。

float:  none 默认的文档流

      left左浮动

      right右浮动

原始素材

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
    <title>CSS的背景</title>
    <!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
    <style type="text/css">
        html,body,div{
            margin: 0px;
            padding: 0px;
        }
        #parent{
            width: 750px;
            height: 600px;
            border: 1px solid red;
        }
        #div1{
            width: 200px;
            height: 100px;
            background-color: pink;
        }
        #div2{
            width: 250px;
            height: 150px;
            background-color: gray;
        }
        #div3{
            width: 300px;
            height: 200px;
            background-color: blue;
        }
    </style>
</head>
<body>
    <div id="parent">
        <div id="div1">div1</div>
        <div id="div2">div2</div>
        <div id="div3">div3</div>
    </div>
</body>
</html>

 

需求:使用浮动技术,让div1和div2依靠左侧并排显示

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
    <title>CSS的背景</title>
    <!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
    <style type="text/css">
        html,body,div{
            margin: 0px;
            padding: 0px;
        }
        #parent{
            width: 750px;
            height: 600px;
            border: 1px solid red;
        }
        #div1{
            width: 200px;
            height: 100px;
            background-color: pink;
            /*div是一个块级元素,已经在文档流中牢牢占据了位置,这需要把文档流的位置让出来*/
            /*使用浮动(float),释放文档流空间,下面的元素上移,围绕着浮动元素显示*/
            float: left;
        }
        #div2{
            width: 250px;
            height: 150px;
            background-color: gray;
        }
        #div3{
            width: 300px;
            height: 200px;
            background-color: blue;
        }
    </style>
</head>
<body>
    <div id="parent">
        <div id="div1">div1</div>
        <div id="div2">div2</div>
        <div id="div3">div3</div>
    </div>
</body>
</html>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
    <title>CSS的背景</title>
    <!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
    <style type="text/css">
        html,body,div{
            margin: 0px;
            padding: 0px;
        }
        #parent{
            width: 750px;
            height: 600px;
            border: 1px solid red;
        }
        #div1{
            width: 200px;
            height: 100px;
            background-color: pink;
            /*div是一个块级元素,已经在文档流中牢牢占据了位置,这需要把文档流的位置让出来*/
            /*使用浮动(float),释放文档流空间,下面的元素上移,围绕着浮动元素显示*/
            float: left;
        }
        #div2{
            width: 250px;
            height: 150px;
            background-color: gray;
            /*div2使用,释放文档流,后面的元素上移,div2怎么显示?左浮,发现左边已经有一个元素,因此会挨着div显示*/
            float: left;
        }
        #div3{
            width: 300px;
            height: 200px;
            background-color: blue;
        }
    </style>
</head>
<body>
    <div id="parent">
        <div id="div1">div1</div>
        <div id="div2">div2</div>
        <div id="div3">div3</div>
    </div>
</body>
</html>

div3跑到最右边

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
    <title>CSS的背景</title>
    <!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
    <style type="text/css">
        html,body,div{
            margin: 0px;
            padding: 0px;
        }
        #parent{
            width: 750px;
            height: 600px;
            border: 1px solid red;
        }
        #div1{
            width: 200px;
            height: 100px;
            background-color: pink;
            /*div是一个块级元素,已经在文档流中牢牢占据了位置,这需要把文档流的位置让出来*/
            /*使用浮动(float),释放文档流空间,下面的元素上移,围绕着浮动元素显示*/
            float: left;
        }
        #div2{
            width: 250px;
            height: 150px;
            background-color: gray;
            /*div2使用,释放文档流,后面的元素上移,div2怎么显示?左浮,发现左边已经有一个元素,因此会挨着div显示*/
            float: left;
        }
        #div3{
            width: 300px;
            height: 200px;
            background-color: blue;
            /*div3使用float,会脱离文档流,朝着右边浮动过去*/
            float: right;
        }
    </style>
</head>
<body>
    <div id="parent">
        <div id="div1">div1</div>
        <div id="div2">div2</div>
        <div id="div3">div3</div>
    </div>
</body>
</html>

 

修改div3的宽度

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
    <title>CSS的背景</title>
    <!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
    <style type="text/css">
        html,body,div{
            margin: 0px;
            padding: 0px;
        }
        #parent{
            width: 750px;
            height: 600px;
            border: 1px solid red;
        }
        #div1{
            width: 200px;
            height: 100px;
            background-color: pink;
            /*div是一个块级元素,已经在文档流中牢牢占据了位置,这需要把文档流的位置让出来*/
            /*使用浮动(float),释放文档流空间,下面的元素上移,围绕着浮动元素显示*/
            float: left;
        }
        #div2{
            width: 250px;
            height: 150px;
            background-color: gray;
            /*div2使用,释放文档流,后面的元素上移,div2怎么显示?左浮,发现左边已经有一个元素,因此会挨着div显示*/
            float: left;
        }
        #div3{
            width: 400px;
            height: 200px;
            background-color: blue;
            /*div3使用float,会脱离文档流,朝着右边浮动过去*/
            float: right;
        }
    </style>
</head>
<body>
    <div id="parent">
        <div id="div1">div1</div>
        <div id="div2">div2</div>
        <div id="div3">div3</div>
    </div>
</body>
</html>

 

现象:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
    <title>CSS的背景</title>
    <!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
    <style type="text/css">
        html,body,div{
            margin: 0px;
            padding: 0px;
        }
        #parent{
            width: 500px;
            /*没有设置高度*/
            border: 1px solid red;
        }
        #div1{
            width: 100px;
            height: 100px;
            background-color: pink;
        }
        #div2{
            width: 150px;
            height: 120px;
            background-color: gray;
        }
    </style>
</head>
<body>
    <div id="parent">
        <div id="div1">div1</div>
        <div id="div2">div2</div>
    </div>
</body>
</html>

 父容器被自动撑满

Div1和div2作用float  ,背后就是脱离文档流

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
    <title>CSS的背景</title>
    <!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
    <style type="text/css">
        html,body,div{
            margin: 0px;
            padding: 0px;
        }
        #parent{
            width: 500px;
            /*没有设置高度*/
            border: 1px solid red;
        }
        #div1{
            width: 100px;
            height: 100px;
            background-color: pink;
            float: left;
        }
        #div2{
            width: 150px;
            height: 120px;
            background-color: gray;
            float: left;
        }
    </style>
</head>
<body>
    <div id="parent">
        <div id="div1">div1</div>
        <div id="div2">div2</div>
    </div>
</body>
</html>

 

父容器坍塌成一条线,也就是所谓的坍塌问题

塌陷问题的解决办法:

(1)给父容器设置高度

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
    <title>CSS的背景</title>
    <!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
    <style type="text/css">
        html,body,div{
            margin: 0px;
            padding: 0px;
        }
        #parent{
            width: 500px;
            height: 120px;
            border: 1px solid red;
        }
        #div1{
            width: 100px;
            height: 100px;
            background-color: pink;
            float: left;
        }
        #div2{
            width: 150px;
            height: 120px;
            background-color: gray;
            float: left;
        }
    </style>
</head>
<body>
    <div id="parent">
        <div id="div1">div1</div>
        <div id="div2">div2</div>
    </div>
</body>
</html>

 

简单,但是需要计算最高的那个

(2)借助空盒子

因为使用了浮动才引起了塌陷的负面效果,因此要消除负面效果

clear:both(不允许左右有浮动元素)   left(不允许左边有浮动元素)  right(不允许右边有浮动元素)。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
    <title>CSS的背景</title>
    <!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
    <style type="text/css">
        html,body,div{
            margin: 0px;
            padding: 0px;
        }
        #parent{
            width: 500px;
            border: 1px solid red;
        }
        #div1{
            width: 100px;
            height: 100px;
            background-color: pink;
            float: left;
        }
        #div2{
            width: 150px;
            height: 120px;
            background-color: gray;
            float: left;
        }
        .empty{
            height: 0px;
            clear: both;
        }
    </style>
</head>
<body>
    <div id="parent">
        <div id="div1">div1</div>
        <div id="div2">div2</div>
        <div class="empty"></div>
    </div>
</body>
</html>

 

优点:不需要计算盒子内部最大的内容高度

缺点:如果网页中大量使用浮动技术,那么会产生大量的空盒子

(3)在父容器的最后一个子元素的位置动态的添加一个空盒子。

不会,抄牛人的网站

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
    <title>CSS的背景</title>
    <!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
    <style type="text/css">
        html,body,div{
            margin: 0px;
            padding: 0px;
        }
        #parent{
            width: 500px;
            border: 1px solid red;
        }
        #parent:after{
            content: "hello";
        }
        /*在父元素的最后一个子元素位放一个文本*/
        #div1{
            width: 100px;
            height: 100px;
            background-color: pink;
            float: left;
        }
        #div2{
            width: 150px;
            height: 120px;
            background-color: gray;
            float: left;
        }
    </style>
</head>
<body>
    <div id="parent">
        <div id="div1">div1</div>
        <div id="div2">div2</div>
    </div>
</body>
</html>

 

最终的解决方案:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
    <title>CSS的背景</title>
    <!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
    <style type="text/css">
        html,body,div{
            margin: 0px;
            padding: 0px;
        }
        #parent{
            width: 500px;
            border: 1px solid red;
        }
        #parent:after{
            content: ".";
            height: 0px;
            visibility: hidden;
            display: block;
            clear: both;
        }
        /*在父元素的最后一个子元素位放一个文本*/
        #div1{
            width: 100px;
            height: 100px;
            background-color: pink;
            float: left;
        }
        #div2{
            width: 150px;
            height: 120px;
            background-color: gray;
            float: left;
        }
    </style>
</head>
<body>
    <div id="parent">
        <div id="div1">div1</div>
        <div id="div2">div2</div>
    </div>
</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FairyKunKun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值