探秘盒子浮动,破解高度塌陷与文字环绕难题,清除浮动成关键!

news2024/11/29 5:37:40

目录

一、浮动

1、为什么使用浮动?

2、浮动的概念

3、语法

4、浮动的特性

(3)浮动的元素会具有行内块元素的特性

5、浮动元素经常和标准流父级搭配使用

6、浮层的弊端

(1)高度塌陷

(2)兄弟盒子文字环绕

7、清除浮动的方式

(1)每个盒子单独定义with和height

(2)父盒子最下方引入清除浮动块

(3)after伪元素清除浮动(推荐)

二、清除浮动

1、概念

2、作用

3、语法

三、盒子的展示

1、语法

 (1)block

  (2) inline

(3) inline-block

(4) none


一、浮动

1、为什么使用浮动?

我们可以看到上面的图片,每个盒子都独占一行显示,这样看右边有一大部分空间都是浪费的,而我们应该如何解决这个问题呢?

此时我们可以将盒子模块转换为行内块级元素,实现一行显示

我们利用之前的知识将盒子转换为行内块元素可以实现一行显示,但是还不够完美,他们之间会有大的空白缝隙,很难控制。因此,我们可以使用浮动来实现我们想要的效果。

2、浮动的概念

       浮动(float)是使用率较高的一种定位方式。有时希望相邻块级元素的盒子左右排列(所有盒子浮动),或者希望一个盒子被另一个盒子中的内容所环绕(一个盒子浮动)做出图文混排的效果时,最简单的方法就是运用浮动属性使盒子在浮动方式下定位。它允许元素脱离常规的文档流,并浮动到其父元素的左侧或右侧,从而使其他内容围绕其周围布局。

3、语法
 

float:none|left|right


left:元素向左浮动,其他内容将围绕其右侧进行布局。
right:元素向右浮动,其他内容将围绕其左侧进行布局。
none:默认值,元素不浮动,将按照正常布局进行渲染。

代码如下:

<head>

        <style>
            article{
                width: 800px;
                height: 500px;
                background-color: #fff9c7;
                margin-bottom: 5px;
            }
            div{
                width: 200px;
                height: 100px;
                background-color:#d9cde5;
             }

             #div2{
                background-color: #f2ae86;
                float: left; 
             }
             #div3{
                background-color: #f6a09a;
                float: left; 
             }
             #div4{
                background-color: #95b1ce;
             }
        </style>
</head>
<body>
    <article>
        <div>A</div>
        <div id="div2">B</div>
        <div id="div3">C</div>
        <div>D</div>
        <div>E</div>
    </article>
</body>

运行结果如下:

 

或许这张图片有点难以理解浮层的效果,我们可以看下面这张图片。 

4、浮动的特性

(1)浮动元素会脱离标准流(脱标)
(2)浮动的元素会一行内显示并且元素顶部对齐

  • 向上向左or向上向右排列
  • 若空间无法容纳,则先向下移动,直到高度足够后再向左向右
  • 当前浮动盒的顶边,不得高于上一个浮动盒的顶边

(左边为浮动前,右边为浮动后) 

(3)浮动的元素会具有行内块元素的特性

·任何元素都可以浮动。不管原先是什么模式的元素,添加浮动之后具有行内块元素相似的特性

5、浮动元素经常和标准流父级搭配使用

为了约束浮动元素位置,我们网页布局一般采取的策略是:先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置。符合网页布局第一准侧。

6、浮层的弊端

虽然浮动带来了很多布局上的便利,但也会带来一些问题。

(1)高度塌陷

当一个容器内的子元素都被设置为浮动时,容器的高度可能会塌陷,即容器的高度变为零,无法正确地包含浮动元素。这会导致布局混乱,影响后续元素的定位和显示。

(2)兄弟盒子文字环绕

盒子浮动后,文档流后面的兄弟盒子会自动递补其位置。其中,文本会非常敏感,将自动环绕浮动盒。举个例子,比如我们平时看的报纸就是文字环绕

(浮动机制的设计初衷:不是为了给你做导航栏的,而是用来制作图文混持效果的页面,但如今很少使用,便变成了副作用)

7、清除浮动的方式

而我们为了解决父盒高度塌陷和兄弟盒文字环绕等问题,我们需要使用清除浮动的方法。以下是几种常见的清除浮动的方式:

(1)每个盒子单独定义with和height

简单粗暴的方法盒子大小写死,给每个盒子设定固定的withheight,直到合适为止。

优点:快速简单,兼容性良好,适合只改动少量内容不涉及盒子排布的版面。

缺点:非自适应布局,浏览器的窗口大小直接影响用户体验

(2)父盒子最下方引入清除浮动块

优点:简单快速、代码少

缺点:增加空标签,引入冗杂元素,不利于页面优化,不推荐

(3)after伪元素清除浮动(推荐)

给外部元素的after伪元素设置clear属性再隐藏它,对空盒子方案的改进。
优点:纯css解决盒子塌陷问题,没有引入任何冗杂的元素。

本次我们讲解第2种方法,在父盒下方引入清楚浮动,后续再讲解伪元素。

二、清除浮动

1、概念

为当前盒子设置一个clear属性,清除前面盒子淨动对它的影响。

2、作用

可以解决高度塌陷和兄弟盒文字环绕的问题。

3、语法

   clear:清除前面盒子浮动对后面盒子的影响

clear: both|left|right
  •  lelt清除前面盒子浮动的影响
  • righ请除前面盒子浮动的影响
  • both清除前面盒子的浮动影响 (不管左浮动还是右浮动)

 如果父盒由于各种原因未设置高度, 子盒的浮动会导致父盒的高度塌陷。父盒高度塌陷后会影响父盒的兄弟盒的布局此时我们就可以使用clear属性。

代码如下:

id为div5的盒子无实际显示效果,主要用于将父盒撑开,避免父盒塌陷影响其他的布局。
 前端开发的原则是非必要并不改变HTML的结构,样式设计只通过CSS实现。

<head>
     <style>
            article{
            
                /* height: 600px; */
                background-color:#f1cbb6;
                border: 5px solid #000;
            }
            #div1{
                width: 300px;
                height: 70px;
                background-color:rgb(217, 134, 217);
                border: 5px solid #000;
                margin-bottom: 5px;
                float: left;
             }

             #div2{
                width: 300px;
                height: 70px;
                background-color: #3a7b99;
                border: 5px solid #000;
                margin-bottom: 5px;
                float: left;
             }
             #div3{
                width: 300px;
                height: 70px;
                background-color: #f6a09a;
                border: 5px solid #000;
                margin-bottom: 5px;
                float: left;
             }
             /* 添加边框方便观察 */
             #div5{
                width: 300px;
                border: 5px solid red;
             }
             footer{
                width: 1500px;
                height: 100px;
                background-color:#f5daab;
                border: 5px solid #000;
             }

        </style>
</head>
<body>
    <article>
        <div id="div1">盒子1</div>
        <div id="div2">盒子2</div>
        <div id="div3">盒子3</div>
        <div style="clear: both;" id="div5"></div>
    </article>
    <footer>
        我是网页页脚
    </footer>
    
</body>
</html>

运行结果如下:

(红色的地方为id为div5的空盒子) 

三、盒子的展示

1、语法

display: none|block|inline

 (1)block

    ●    以块级元素的形式显示。块级元素会独占一行,例如<div>、<p>、<h1>等标签默认的display属性值就是block。

  (2) inline

    ●    以行内元素的形式显示。行内元素不会独占一行,而是与其他行内元素在同一行内显示。例如<span>、<a>等标签默认的display属性值就是inline。

(3) inline-block

    ●    结合了行内元素和块级元素的特点。它既可以像行内元素一样在同一行内显示,又可以像块级元素一样设置宽度、高度、内边距和外边距等属性。

    ●    常用于创建水平排列的菜单、按钮等元素。

(4) none

    ●    隐藏元素,使其在页面上不显示。被设置为none的元素不会占据任何空间,也不会被浏览器渲染。

 代码如下:

<head>
        <style>
            article{
                width: 500px;
                height: 500px;
                background-color:gray;
                border: 5px solid #000;
            }
            #div1{
                width: 100px;
                height: 50px;
                background-color:purple;
                border: 5px solid #000;
                margin-bottom: 5px;
                display: inline-block;
             }

             #div2{
                width: 100px;
                height: 50px;
                background-color: red;
                border: 5px solid #000;
                margin-bottom: 5px;
                display: none;
             }
             #div3{
                width: 100px;
                height: 50px;
                background-color: green;
                border: 5px solid #000;
                margin-bottom: 5px;
                display: inline-block;
             }
             
        </style>
</head>
<body>
    <article>
        <div id="div1">盒子1</div>
        <div id="div2">盒子2</div>
        <div id="div3">盒子3</div>
       
</body>

运行结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2215907.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无人机之声学识别技术篇

一、声学识别技术的原理 无人机在飞行过程中&#xff0c;其电机工作、旋翼震动以及气流扰动等都会产生一定程度的噪声。这些噪声具有独特的声学特征&#xff0c;如频率范围、时域和频域特性等&#xff0c;可以用于无人机的检测与识别。声学识别技术主要通过以下步骤实现&#x…

浙大数据结构:11-散列2 Hashing

这道题主要是小细节要把握&#xff0c;实际难度不大 机翻 1、条件准备 表大小&#xff0c;输入数据数 #include <iostream> #include<vector> #include<cmath> using namespace std; #define endl \nint Size,n;2、主函数 先输入数据&#xff0c;用ispr…

目前web浏览器播放rtsp视频流,h5播放rtmp监控方案比较,代码测试

在web上实现播放rtsp/rtmp视频流&#xff0c;由于浏览器不 能自定义协议&#xff0c;不能直接播放&#xff0c;市面上充满各种方案&#xff0c;鱼龙混杂&#xff0c;主要方案有两种&#xff1a; 1&#xff0c;浏览器插件方案&#xff0c;vlc浏览器控件&#xff08;已过期&…

远翔原厂芯片设计开发软件:降压恒流共阳极无频闪调光芯片FP7126/7127/7128,舞台灯磁吸轨道灯智能家居应用方案

FP7126 FP7127 FP7128是平均电流模式控制的 LED 驱动 IC&#xff0c;具有稳定输出恒流的能力&#xff0c;优秀的负载调整率与高精度的电流控制。不用额外增加外部补偿元件&#xff0c;简化 PCB 板设计。FP7126 FP7127 FP7128可接受 PWM 数位调光&#xff0c;建议调光频率 0.1kH…

事务使用方法

为什么需要事务&#xff1a; 示例&#xff1a; 银行转账问题 假定资金从账户A转到账户B&#xff0c;至少需要两步 账户A的资金减少 然后账户B的资金相应增加。 示例 假定张三的账户有1000元&#xff0c;李四账户有1元 UPDATE bank set moneymoney-500 WHERE name张三; UPDA…

以价换量,豆包血拼AI的商业考量

“ 借豆包AI推出智能耳机&#xff0c;字节跳动再战智能硬件&#xff0c;仍面临研发、营销成本高企和商业模式不明确的挑战&#xff0c;这一新尝试充满变数。 ” 转载&#xff1a; 科技新知 原创 作者丨颜瞾 编辑丨蕨影 没有哪个赛道&…

I\O进程线程(Day27)

一、学习内容 IO基础 概念 程序与外部设备进行交换的信息过程 分类 标准IO 封装好的相关库函数、有缓冲区、文件指针eg&#xff1a;fprintf、fscanf、fputc、fgetc、fputs、fgets、fopen、fclose... 操作流程 FILE *fp通过fopen打开文件 使用fprintf、fputc、fputs、fwrite把在…

【Linux】Linux进程概念

冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系。 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是有一个个的硬件组件组成&#xff0c; 输入单元&#xff1a;包括键盘 , 鼠…

选GB28181还是RTSP?

好多开发者&#xff0c;搞不清楚什么时候用GB28181&#xff0c;什么时候用RTSP&#xff0c;本文就二者使用场景和区别&#xff0c;做个大概的探讨&#xff1a; 定义与性质&#xff1a; GB28181&#xff1a;是中国国家标准&#xff0c;全称为《公共安全视频监控联网系统信息传输…

安科瑞诚邀您参加2024新加坡亚洲数据中心展

Exhibition Time: October 09-10, 2024 展览时间&#xff1a;2024年10月09日-10日 Exhibition Hall: Sands Expo & Convention Center 展览馆&#xff1a;Sands Expo & Convention Center Exhibition Number: BASEMENT2-L16 展览号&#xff1a;BASEMENT2-L16 Add…

文献阅读(222) VVQ协议死锁

题目&#xff1a;VVQ: Virtualizing Virtual Channel for Cost-Efficient Protocol Deadlock Avoidance时间&#xff1a;2023会议&#xff1a;HPCA研究机构&#xff1a;KAIST request-reply协议死锁如下图所示&#xff0c;每个node收到request之后发送reply&#xff0c;但是想…

2020-11-06《04丨人工智能时代,新的职业机会在哪里?》

《香帅中国财富报告25讲》 04丨人工智能时代&#xff0c;新的职业机会在哪里&#xff1f; 1、新机会的三个诞生方向 前两讲我们都在说&#xff0c;人工智能的出现会极大地冲击现有的职业&#xff0c;从2020年开始&#xff0c;未来一二十年&#xff0c;可能有一半以上的职业都会…

人工智能与生活:探索科技未来的无限可能性

随着科技的不断进步&#xff0c;人工智能已经成为了我们日常生活中不可或缺的一部分。从智能手机到智能家居&#xff0c;从自动驾驶汽车到医疗诊断&#xff0c;人工智能已经渗透到了我们的方方面面。在这篇文章中&#xff0c;我们将从不同的角度探讨人工智能与生活的联系&#…

A股异动与IP数据地址关联分析

最近A股经历了一些显著的移动。在2024年10月9号&#xff0c;A股三大指数大幅下跌&#xff0c;沪指、深成指、和创业板指分别下跌6.62%、8.15%和10.59%。市场的复杂性和不确定性明显&#xff0c;也由此给我们提供了从IP数据地址角度进行分析的机会。 从市场的基本面来看&#xf…

windows10系统-设置账户密码有效期

操作系统: windows10 .a.打开windows10用户管理界面 windows R -> 输入 gpedit.msc ->确定 如下图所示; .b.点击Windows设置->安全设置->账户策略->密码策略 .c.选中密码最长有效期限&#xff0c;修改即可。 修改后示例如下 关于第一条&#xff1a;密码必须符…

Jmeter脚本录制、Badboy脚本录制

目录 Jmeter脚本录制 Badboy脚本录制 Jmeter脚本录制 1、首先添加一个http测试脚本记录器 2、选择目标控制器&#xff0c;把录制的内容放到的地方 3、分组&#xff0c;就是在录制的时候&#xff0c;每一步操作之间间隔方式&#xff0c;根据自己需要进行选择 4、开启浏览…

网站服务器监控:Lighttpd指标解读

监控易是一款功能强大的IT监控软件&#xff0c;它提供了全面的应用和业务监控解决方案&#xff0c;帮助用户实时监控各类IT资源和应用的状态&#xff0c;确保业务的连续性和稳定性。在网站服务器监控方面&#xff0c;监控易特别针对Lighttpd服务器进行了深入的监测&#xff0c;…

专利开放许可与知识产权保护的关系是什么?

专利开放许可在一定程度上是对知识产权保护制度的补充和拓展。知识产权保护的核心目标是鼓励创新&#xff0c;通过赋予专利所有者一定期限内的独占权&#xff0c;使其能够从创新成果中获得经济回报&#xff0c;从而激励更多的创新投入。 专利开放许可则为专利的应用和传播提供了…

C++17中的常用文件操作std::filesystem::directory_iterator【注意事项】

目录 疑问 代码 结果 疑问 怎么用呢&#xff1f;constauto& entry : std::filesystem::directory_iterator(mainFolderPath)中&#xff0c;entry 表示的是什么呢&#xff1f;是mainFolderPath里的文件夹名字吗&#xff1f;还是路径呢&#xff1f;【答案是路径】。我们打…

12 项 ECMAScript 提案的最新进展!

大家好&#xff0c;我是 ConardLi。 近日&#xff0c;ECMA 国际技术委员会 39&#xff08;TC39&#xff09;在东京召开了第 104 次大会&#xff0c;讨论了多项 ECMAScript&#xff08;JavaScript&#xff09;提案的进展情况&#xff0c;批准了其中多项提案进入下一个阶段。 「…