CSS——浮动布局

一、脱离文档流

盒子设置 float 属性浮动后,将脱离其原本位置,文档流后面的元素会自动递补其位置。

盒子浮动起来后,会生成一个与父盒等宽的浮层。

1、左浮动、右浮动

左浮动:第一个设置左浮动的盒子浮至浮层,其它设置左浮动的盒子紧跟其后,从左到右排列,直到放不下才换行。

右浮动:第一个设置右浮动的盒子浮至浮层,其它设置右浮动的盒子紧跟其后,从右到左排列,直到放不下才换行。

#div1 {
    width: 300px;
    height: 50px;
    background-color: lightblue;
    border: black 5px solid;
    margin-bottom: 5px;
    float: left;
}

如果五个盒子都将 float 属性设置为左,便会呈现:

同理右浮动的呈现方式:

 浮动盒排布规则

1.向上向左 or 向上向右 排列

2.若空间无法容纳,则先向下移动,直到高度足够后再向左/向右(取决于该盒子被设置为左浮动还是右浮动)

3.当前浮动盒的顶边,不得高于上一个浮动盒的顶边

二、浮动带来的影响

(一)父盒的高度塌陷

概念:当父盒高度没有设置时,其高度由子盒撑开。若了盒全部浮走,则高度场陷为0。

最简单的解决方案如果场景允许:

        可直接给父盒设置个明确的高度值。但比方法不灵活,通常不推荐,除非确实需要固定高度(因为有时候我们确确实实希望父盒高度由子盒决定,比如说有时候我们确动态渲染的场景就不适合)

图像示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>

        #div1 {
            width: 100px;
            height: 30px;
            background-color: red;
            border: black 5px solid;
            margin-bottom: 5px;
            float: right;
        }
        #div2 {
            width: 300px;
            height: 50px;
            background-color:green;
            border: black 5px solid;
            margin-bottom: 5px;
            float: left;
        }
        #div3 {
            width: 200px;
            height: 70px;
            background-color:royalblue ;
            border: black 5px solid;
            margin-bottom: 5px;
            float: left;
        }
        #div4 {
            width: 100px;
            height: 50px;
            background-color: purple;
            border: black 5px solid;
            margin-bottom: 5px;
            float: right;
        }
        #div5 {
            width: 100px;
            height: 80px;
            background-color: yellow;
            border: black 5px solid;
            margin-bottom: 5px;
            float: left;
        }

    </style>
</head>
<body>
    <div id="div1">红</div>
    <div id="div2">绿</div>
    <div id="div3">蓝</div>
    <div id="div4">紫</div>
    <div id="div5">黄</div>

</body>
</html>

为父盒设置明确高度值,有很多不足:
1.子元素内容变化导致布局错位

若子元素高度动态增加(如用户输入、导步加载数据等),父元素的固定高度无法自动扩展,会出现内容溢出或遮挡现象。
2.响应式适配能力缺失

固定高度在不同屏幕尺寸下易导致布局断裂,无法实现移动端多设备适配等自适应需求。

3.代码耦合度高

父元素高度需手动与子元素内容保持同步,任何子元素结构调整都会被迫使开发者重新计算父元素高度。

(二)兄弟盒子的文字环绕

        盒子浮动后,文档流后面的兄弟盒子会自动递补其位置。其中、文本会非常敏感,将自动环绕浮动盒。

(浮动机制的设计初衷:不是为了给你做导航栏的,而是用来制作图文混排效果的页面)

对于现代前端开发来说,这种特性反而成为一种副作用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        
        #div1 {
            width: 300px;
            height: 50px;
            background-color: lightblue;
            border: black 5px solid;
            margin-bottom: 5px;
            float: right;
        }
        #div2 {
            width: 300px;
            height: 50px;
            background-color:skyblue ;
            border: black 5px solid;
            margin-bottom: 5px;
            float: left;
        }
        #div3 {
            width: 300px;
            height: 50px;
            background-color:royalblue ;
            border: black 5px solid;
            margin-bottom: 5px;
            float: left;
        }
        #div4 {
            width: 300px;
            height: 50px;
            background-color: blue;
            border: black 5px solid;
            margin-bottom: 5px;
            float: right;
        }
        #div5 {
            width: 30px;
            height: 80px;
            background-color: rgb(98, 0, 255);
            border: black 5px solid;
            margin-bottom: 5px;
            float: left;
        }

    </style>
</head>
<body>
    <div id="div1">1</div>
    <div id="div2">2</div>
    <div id="div3">3</div>
    <p>盒子浮动后,文档流后面的兄弟盒子会自动递补其位置。其中、文本会非常敏感,将自动环绕浮动盒。</p>
    <div id="div4">4</div>
    <div id="div5">5</div>

</body>
</html>

三、练习

 代码:

<!DOCTYPE html>  
<html lang="zh">  

<head>  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1.0">  
    <title>典型的网页结构示例:带横向导航栏</title>  

    <style>
        nav ul{
            height:40px;
            background-color: yellowgreen;
        }
        nav ul li{
            margin-right: 20px;
            float:left;
        }
        #contact{
            background-color: aquamarine;
            width: 250px;
            height: 150px;
            border: black 3px solid;
            position: fixed;
            right: 10px;
            bottom: 30px;
            
        }
    </style>
</head>  

<body>  
  
    <header>  
        <h1 align="center">广东XXXX学院</h1>  
        <p align="center">欢迎来到: <ins>计算机学院</ins></p>  
        <hr> 
        <nav>  
            <ul type="none">  
                <li id="ct1"><a href="#">首页</a></li>  
                <li id="ct2"><a href="#">关于我们</a></li>  
                <li id="ct3"><a href="#">学生风采</a></li>  
                <li id="ct4"><a href="#">联系方式</a></li>  
            </ul>  
        </nav>  
    </header>  
    <hr>  
    <main>  
        <section>  
            <article>  
                <h3>文章标题</h3>  
                <p>这里是文章的内容简介。<br>可以使用<br>标签进行换行。</p>  
                <br><br><br>
                <img src="./img_src/云中医校徽.jpg" alt="文章配图" width="200" height="200">  
                <p>想了解广东XXX学院:<a href="https://gdyfvccm.edu.cn/">点击这里</a></p>  
            </article>  

            <br>
            <aside>  
                <h3>侧边栏</h3>  
                <p>侧边栏内容,如快速链接、广告等。</p>  
                <table border="1">  
                    <tr>  
                        <th>专业</th>  
                        <th>链接</th>  
                    </tr>  
                    <tr>  
                        <td>计算机应用技术</td>  
                        <td><a href="专业A详情页.html">专业A详情</a></td>  
                    </tr>  
                    <tr>  
                        <td>数字媒体技术</td>  
                        <td><a href="专业B详情页.html">专业B详情</a></td>  
                    </tr>  
                </table>  
            </aside>  
        </section>  
    
        <section id="contact">  
            <h4>联系我们</h4>  
            <form>  
                姓名:
                <input type="text" id="name" name="name"><br>  
                邮箱:
                <input type="email" id="email" name="email"><br>  
                <input type="submit" value="提交">  
            </form>  
        </section>  
    </main>  
    <hr>  
    <footer>  
        <p>版权所有 &copy; 2024 广东XXX职业学院计算机学院</p>  
    </footer>  
  
</body>  


</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值