HTML的浮动

漂浮的盒子想必没有见过,试试看

一、脱离文档



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

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


左浮动:第一个设置左浮动的盒子浮至浮            右浮动:第一个设置右浮动的盒子浮至浮

(left)  层,其它设置左浮动的盒子紧跟                           层,其它设置右浮动的盒子紧跟 

              其后。从左到右排序,直到放不                           其后。从右到左排序,直到放不

              下才换行。                                                           下才换行。


浮动盒子排布规则:
    1.  向上向左or向上向右排列

    2.  若空间无法容纳,则先向下移动,只到高度足够后再向左 / 向右

       (取决于该盒子被设置为左浮动还是向右浮动)

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


依旧整点素材

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>浮动练习</title>
    <style>
        article{
            height: 900px;
            width: 1000px;
            background-color: black;
        }
        #a1{
            height: 100px;
            width: 200px;
            background-color: red;
        }
        #a2{
            height: 100px;
            width: 200px;
            background-color: yellow;
        }
        #a3{
            height: 100px;
            width: 200px;
            background-color: green;
        }
        #a4{
            height: 100px;
            width: 200px;
            background-color: blue;
        }
 
 
    </style>
</head>
<body>
    <article>
        <div id="a1">盒子1</div>
        <div id="a2">盒子2</div>
        <div id="a3">盒子3</div>
        <div id="a4">盒子4</div>
    </article>
</body>
</html>

让我们看看,添加了浮动属性会有哪些变化 

<style>
        article{
            height: 900px;
            width: 1000px;
            background-color: black;
        }
        #a1{
            height: 100px;
            width: 200px;
            background-color: red;
            float: left;
            /* 从左到右 */
        }
        #a2{
            height: 100px;
            width: 200px;
            background-color: yellow;
            float: right;
            /* 从右到左 */
        }
        #a3{
            height: 100px;
            width: 200px;
            background-color: green;
            float: left;
            /* 从左到右 */
        }
        #a4{
            height: 100px;
            width: 200px;
            background-color: blue;
            float: right;
            /* 从右到左 */
        }


 似乎还漏了点什么,有了

二、浮动带来的影响1:父盒的高度塌陷



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


副作用:  
      1.  当子元素设置浮动后脱离文档流,父元素无法    感知子元素的高度,导致自身高度计算为0。此时父元素的边框、背景等样式可能无法正常显示。



      2.  父元素塌陷后,其下方的非浮动元素会向上移动,与浮动子元素产生覆盖或重叠现象,破坏原本的布局结构。例如底部内容可能与浮动元素区域重叠。


最简单的解决方案:


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


为父盒设置明确高度值,有很多不足:


      1.子元素内容变 导致布局错位
      若子元素高度动态增加(如用户输入、异步加载数据等),父元素的固定高度无法自动扩展,会出现内容溢出或遮挡现象。



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


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


三、浮动带来的影响2:兄弟盒子的文字环绕


      盒子浮动后,文档流后面的兄弟盒子会自动递补其位置。其中,文本会非常敏感,将自动环绕浮动盒。
(浮动机制的设计初衷:不是为了给你做导航栏的,而是用来制作图文混排效果的页面)                                                                              ——对于现代前端开发来说,这种特性反而成为一种副作用

### 浮动属性概述 HTML 中的 `float` 属性主要用于控制元素在容器内的水平对齐方式,使元素能够向左或向右移动,直到其外边缘碰到包含框或者另一个浮动元素为止。这一特性使得浮动布局成为一种常用的网页设计技术,适用于创建复杂的页面结构。 CSS 的 `float` 属性有以下几个主要取值: - **left**: 将元素尽可能靠左放置[^1]。 - **right**: 将元素尽可能靠右放置[^1]。 - **none**: 默认值,表示元素不浮动[^2]。 - **inherit**: 继承父级元素的浮动属性[^2]。 需要注意的是,当一个元素设置了浮动后,它会脱离正常的文档流,因此可能导致后续内容环绕该元素显示。为了防止这种情况发生,通常需要清除浮动(clearing floats),可以通过设置 `clear` 属性来实现。 --- ### 示例代码展示 以下是基于 HTML 和 CSS 实现的一个简单浮动布局示例,展示了如何利用浮动属性完成两列布局的效果。 #### HTML 结构 ```html <div class="container"> <div class="box box-left">左侧栏</div> <div class="box box-right">右侧栏</div> </div> ``` #### CSS 样式定义 ```css .container { overflow: hidden; /* 清除子元素浮动带来的影响 */ } .box { width: 48%; /* 设置宽度以便两个盒子能并排显示 */ padding: 10px; background-color: lightblue; margin-bottom: 10px; } .box-left { float: left; /* 左侧栏向左浮动 */ } .box-right { float: right; /* 右侧栏向右浮动 */ } ``` 在这个例子中,`.box-left` 类将 `.box` 元素向左浮动,而 `.box-right` 则将其向右浮动。通过这种方式实现了两列布局的效果。 另外,在 `.container` 上使用了 `overflow: hidden` 来解决由于内部子元素全部浮动而导致的高度塌陷问题[^2]。 --- ### 关键点说明 1. **浮动的影响** 当元素被赋予浮动属性时,它们不再占据原本的空间,而是按照指定方向进行排列。这可能会导致其他未浮动的内容围绕这些浮动元素呈现[^1]。 2. **清除浮动的重要性** 如果父容器内只有浮动子元素,则可能出现高度计算错误的情况。此时可通过多种方法清除浮动,比如使用伪类 `::after` 或者直接给父容器添加 `overflow:hidden` 属性[^2]。 3. **响应式兼容性** 考虑到现代浏览器支持更先进的布局模式(如 Flexbox 和 Grid),建议仅在必要场景下使用传统的浮动布局,并注意测试不同屏幕尺寸下的表现一致性[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值