CSS-浮动【看这一篇就够了】

news2024/11/13 9:33:08

目录

浮动布局

浮动是如何工作的

浮动的本质和要点

如何产生浮动

元素浮动的特性

1.元素添加浮动后,脱离文档流

2.如果父元素的宽度不够

3.浮动的顺序贴靠特性

4.元素浮动后,具有行内块级元素特性

5.浮动的元素会造成父元素高度塌陷

6.浮动对文字的影响

使用浮动实现网页布局

BFC规范 和 浏览器差异

创建BFC

BFC的其他作用

清除浮动

1.清除浮动方法1

2.清除浮动方法2

3.清除浮动方法3

4.清除浮动方法4

浮动布局

1.三列式布局,中间自适应

2.多行多列式布局

浮动布局

浮动是如何工作的

  • 把一个元素“浮动”起来,会改变该元素本身和正常布局流中跟随它的其他元素的行为
  • 这一元素会浮动到左侧右侧,并且从正常布局流中移除,这时候其他的周围内容就会在这个被设置浮动的元素周围环绕

简单理解:

当元素添加了浮动后,元素就会脱离文档流,按照指定方向(左右)发生移动,遇到父级边界或者相邻的浮动元素就会停下来,同时会影响到他后面元素的排版行为

  • 文档流:文档中可显示对象在排列时所占用的位置/空间(在页面中占位置)
  • 脱离文档流:元素相当于漂浮起来,不占据页面的位置

浮动的本质和要点

  • 浮动的本质功能:用来实现并排
  • 浮动使用要点:要浮动,并排的盒子都要设置浮动
  • 父盒子要有足够的宽度,否子盒子会掉下去
<style>
  .box {
    width: 600px;
    height: 200px;
    border: 1px solid #000;
  }

  /* 
        要点:要浮动,都浮动
        父盒子要有足够的宽度,否则子盒子会掉下去
    */
  .box .c1 {
    width: 200px;
    height: 200px;
    background-color: skyblue;
    float: left;
  }

  .box .c2 {
    width: 200px;
    height: 200px;
    background-color: gold;
    float: left;
  }

  .box .c3 {
    width: 200px;
    height: 200px;
    background-color: pink;
    float: left;
  }
</style>

<body>
  <h1>浮动</h1>

  <div class="box">
    <div class="c1">float: left;</div>
    <div class="c2">float: left;</div>
    <div class="c3">float: left;</div>
  </div>
</body>

效果:

如何产生浮动

给需要浮动的元素添加“float”属性,“float”属性对应的值如下:

描述
none默认值,元素不浮动
left元素向左浮动
right元素向右浮动
inherit规定从父元素继承float属性值(一般不用,了解即可)

元素浮动的特性

浮动共有七大特性

1.元素添加浮动后,脱离文档流

同时会影响其后面的元素,但不影响它前面的元素

<style>
  .box {
    width: 300px;
    height: 200px;
    border: 2px solid red;
  }
  .box1 {
    width: 100px;
    height: 50px;
    background-color: khaki;
  }
  .box2 {
    width: 200px;
    height: 50px;
    background-color: rgb(133, 206, 235, 0.5);
    /* 给元素添加左浮动 */
    /* float: left; */
  }
  .box3 {
    width: 100px;
    height: 100px;
    background-color: pink;
  }
</style>
<div class="box">
  <div class="box1">1</div>
  <div class="box2">2</div>
  <div class="box3">3</div>
</div>
正常布局流box2(蓝色盒子浮动后的效果)
正常布局流中,块级元素默认从上往下

蓝色div加了浮动后,相当于漂浮起来,不占据页面空间,这时候蓝色盒子后面的粉色盒子的位置就会发生改变,移动到上面来,就出现如图,蓝色的盒子相当于漂浮在红色盒子上面。

但黄色盒子不受任何影响

(如果大家明白word文档里的“图片漂浮在文字下方”这个功能就好理解很多)

2.如果父元素的宽度不够

子元素在放不下的情况下会换行显示

<style type="text/css">
  .main {
    width: 240px;
    height: 150px;
    background-color: khaki;
  }
  .box {
    width: 50px;
    height: 50px;
    background-color: skyblue;
    margin: 10px;
    float: left;
  }
</style>
<body>
  <div class="main">
    <div class="box">框1</div>
    <div class="box">框2</div>
    <div class="box">框3</div>
    <div class="box">框4</div>
  </div>
</body>

效果:

3.浮动的顺序贴靠特性

子盒子会按照顺序进行贴靠,如果没有足够空间,则会寻找在前一个兄弟元素

	<style>
		.box {
		  width: 300px;
		  height: 200px;
		  border: 1px solid #000;
		}
	  
		/* 
			  浮动的顺序贴靠特性:
	  
			  子盒子会按顺序进行贴靠,
			  如果没有足够空间,则会寻找在前一个兄弟元素
		  */
		.box .c1 {
		  width: 200px;
		  height: 100px;
		  background-color: orange;
		  float: left;
		}
	  
		.box .c2 {
		  width: 100px;
		  height: 50px;
		  background-color: skyblue;
		  float: left;
		}
	  
		.box .c3 {
		  width: 50px;
		  height: 50px;
		  background-color: tomato;
		  float: left;
		}
	  </style>
	  
	  <body>
		<h1>浮动的顺序贴靠特性</h1>
	  
		<div class="box">
		  <div class="c1"></div>
		  <div class="c2"></div>
		  <div class="c3"></div>
		</div>
	  </body>

具体表现:

c3盒子贴靠c2盒子,但是c2盒子后面已经没有空间,因此c3盒子往前寻找float盒子,找到c1盒子,c1盒子后面还有空间,于是贴靠在c1后面。

但如果所有前方盒子的后方都没有空间,则重起一行摆放

效果:

4.元素浮动后,具有行内块级元素特性

  • 浮动的元素不再区分块级元素、行内元素,已经脱离了标准文档流
  • 一律能够设置宽度和高度,即使它是“<span>”、“<a>”标签等等
<style>
  span {
    width: 100px;
    height: 30px;
    background-color: tomato;
    /* 
            只要设置了浮动的元素,不再区分块级元素和行内元素
            都能设置高度和宽度
        */
    float: left;
    margin-right: 10px;
    text-align: center;
    line-height: 30px;
    color: #fff;
  }
</style>

<body>
  <h1>浮动的元素一定能设置宽高</h1>

  <span>1</span>
  <span>2</span>
  <span>3</span>
  <span>4</span>
  <span>5</span>
</body>

效果:

5.浮动的元素会造成父元素高度塌陷

  • 当给子元素添加了浮动后,子元素相当于漂浮起来,不占据页面空间
  • 这样就造成了腹肌元素在没有设置高度时,高度塌陷问题

一个塌陷的例子

<style>
  .main {
    width: 200px;
    border: 2px solid red;
  }
  .box {
    width: 100px;
    height: 100px;
    background-color: pink;
    /* 添加浮动的前后对比 */
    float: left;
  }
</style>
<body>
  <div class="main">
    <div class="box"></div>
  </div>
</body>

效果:

box未设置浮动前效果box设置浮动后效果

6.浮动对文字的影响

  • 常见的图片文字环绕效果,其实现方式主要是将图片左浮动或有浮动
  • 浮动后其相邻的文字,就会环绕图片排列
  • 这与相邻的div盒子不同,浮动会漂浮在div盒子上,但是浮动不会漂浮在文字上
<style>
  .box {
    width: 200px;
    background-color: #ddd;
    padding: 10px;
  }
  .img {
    width: 80px;
    height: 80px;
    background-color: skyblue;
    float: left;
    margin: 10px;
  }
</style>
<body>
  <div class="box">
    <div class="img"></div>
    最初,引入float属性是为了能让 web
    开发人员实现简单的布局,包括在一列文本中浮动的图像,文字环绕在它的左边或右边
  </div>
</body>

效果:

使用浮动实现网页布局

  • 垂直显示的盒子,不要设置浮动,只有并排显示的盒子才要设置浮动
  • 每一个盒子都是独立存在,每个盒子又是一个小天地,内部可以继续使用浮动

BFC规范 和 浏览器差异

  • BFC(Box Formatting Context,块级格式上下文) 是页面上的一个隔离的独立容器
  • 容器里的子元素不会影响到外面的元素,分之亦然

如:一个盒子不设置height,当内容子元素都浮动时,无法撑起自身

原因是:“这个盒子没有形成BFC

创建BFC

  • 方法1:float的值不是none
  • 方法2:position的值不是static或者relative
  • 方法3:display的值是“inline-block”、“flex”、“inline-flex”
  • 方法4:使用“overflow:hidden;
<!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>创建BFC</title>
    <style>
      .box {
        width: 500px;
        border: 5px solid red;
        /* 
            方法1:float的值不是none 
            该方法可以实现效果,但没有意义,不可能随意给盒子设置浮动
        */
        /* float: left; */

        /* 
            方法2:position的值不是static或者relative 
            该方法可以实现效果,但不靠谱
        */
        /* position: absolute; */

        /* 
            方法3:display的值是 inline-block、flex 或 inline-flex 
            该方法可以实现效果,但,没有意义,可能随便改变盒子的为行内块,获取其他的
        */
        /* display: inline-block; */
        /* display: flex; */
        /* display: inline-flex; */

        /* 
            方法4:overflow:hidden;
            该方法可以实现效果,但是,不能满足所有的场景
        */
        /* overflow: hidden; */
      }
      .box .c1 {
        width: 200px;
        height: 200px;
        background-color: orange;
        float: left;
      }
      .box .c2 {
        width: 200px;
        height: 200px;
        background-color: skyblue;
        float: left;
      }
    </style>
  </head>
  <body>
    <h1>创建BFC</h1>
    <p>
      BFC (Box Formatting Context
      ,块级格式上下文)是页面上的一个隔离的独立容器
    </p>

    <div class="box">
      <div class="c1"></div>
      <div class="c2"></div>
    </div>
  </body>
</html>

BFC的其他作用

  • BFC可以取消盒子margin塌陷
  • BFC可以阻止元素被浮动元素覆盖
<style>
  p {
    width: 200px;
    height: 200px;
    background-color: orange;
    /* 垂直方向上下margin会重合 距离依然是:50 */
    margin: 50px;
  }

  /* 
    BFC作用一:可以取消盒子margin塌陷
    添加overflow:hidden; 创建BFC
  */
  div {
    overflow: hidden;
  }

  /* 
    BFC作用二:可以阻止元素被浮动元素覆盖
    没有实际意义,实际开发不会这么用,只具有理论意义,要明白
    需要并排显示的盒子,要么都浮动,要么都不写,以下的写法是不合法规范的
  */
  .box1 {
    width: 300px;
    height: 300px;
    background-color: skyblue;
    float: left;
  }

  .box2 {
    width: 200px;
    height: 200px;
    background-color: tomato;
    /* float: left; */
    overflow: hidden;
  }
</style>

<body>
  <div>
    <p></p>
  </div>

  <div>
    <p></p>
  </div>

  <section class="box1"></section>
  <section class="box2"></section>
</body>

清除浮动

清除浮动:浮动一定要封闭到一个盒子中,否则就会对页面后续元素产生影响

清除浮动的方法一共有四种

1.清除浮动方法1

  • 让内部有浮动的父盒子形成BFC,它就能关住内部的浮动
  • 此时,最好的方法就是”overflow:hidden;“属性
<style>
  * {
    margin: 0;
    padding: 0;
  }

  div {
    /* 
        清除浮动方法1:
        让内部有浮动的父盒子形成BFC,它就能关闭住内部的浮动
        此时,最好的方法就是 overflow: hidden; 属性
      */
    overflow: hidden;
    margin-bottom: 10px;
  }

  p {
    width: 100px;
    height: 100px;
    background-color: orange;
    margin-right: 10px;
    float: left;
  }
</style>

<body>
  <div>
    <p></p>
    <p></p>
  </div>

  <div>
    <p></p>
    <p></p>
  </div>
</body>

效果:

2.清除浮动方法2

  • 给后面的父盒子设置“clear:both;”属性
  • clear表示清除浮动对自己的影响,both表示左右浮动都清除

(该方法不推荐)

3.清除浮动方法3

  • 使用”::after“伪元素 给盒子添加最后一个子元素
  • 并且给“::after”设置“clear:both

强烈推荐使用,最佳实践

<style>
  * {
    margin: 0;
    padding: 0;
  }

  div {
    border: 2px solid red;
    margin-bottom: 20px;
  }

  /* 
      添加伪元素
      ::after 匹配选中的元素的最后一个子元素
    */
  .clearfix::after {
    content: "";
    clear: both;
    /* 转为块级元素 */
    display: block;
  }

  p {
    width: 100px;
    height: 100px;
    background-color: orange;
    margin-right: 10px;
    float: left;
  }
</style>

<body>
  <div class="clearfix">
    <p></p>
    <p></p>
  </div>

  <div class="clearfix">
    <p></p>
    <p></p>
  </div>
</body>

4.清除浮动方法4

  • 在两个父盒子之间“隔墙”个一个携带“clear:both”的盒子

(不推荐)

<style>
  * {
    margin: 0;
    padding: 0;
  }

  div {
    border: 2px solid red;
  }

  p {
    width: 100px;
    height: 100px;
    background-color: orange;
    margin-right: 10px;
    float: left;
  }

  /* 
      清除浮动方法4:
      在两个父盒子之间 "隔墙" 隔一个携带 `clear: both;`的盒子
    */
  .cl {
    clear: both;
  }

  .h20 {
    height: 20px;
  }
</style>

<body>
  <div>
    <p></p>
    <p></p>
  </div>

  <!-- 在两个父盒子之间 "隔墙" 隔一个携带 `clear: both;`的盒子 -->
  <div class="cl h20"></div>

  <div>
    <p></p>
    <p></p>
  </div>
</body>

浮动布局

1.三列式布局,中间自适应

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>布局</title>
	<style>
		body {
		  margin: 0;
		}
		.box {
		  width: 100%;
		  background-color: khaki;
		  padding: 10px;
		  box-sizing: border-box;
		}
		.box .left {
		  width: 150px;
		  height: 200px;
		  background-color: skyblue;
		  float: left;
		}
		.box .middle {
		  background-color: aquamarine;
		  height: 200px;
		  margin: 0px 160px;
		}
		.box .right {
		  width: 150px;
		  height: 200px;
		  background-color: pink;
		  float: right;
		}
		/*清除浮动*/
		.clearfix::after {
		  display: block;
		  content: "";
		  clear: both;
		}
	  </style>
	  <body>
		<div class="box clearfix">
		  <div class="left">左</div>
		  <div class="right">中</div>
		  <div class="middle">中</div>
		</div>
	  </body>
</html>

效果:

2.多行多列式布局

<style>
  .container {
    width: 800px;
    background-color: skyblue;
    margin: 0px auto;
    padding: 5px;
  }
  .item {
    width: 190px;
    height: 200px;
    background-color: khaki;
    float: left;
    margin: 5px;
  }
  /*清除浮动*/
  .clearfix::after {
    display: block;
    content: "";
    clear: both;
  }
</style>
<body>
  <div class="container clearfix">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
    <div class="item">4</div>
    <div class="item">5</div>
    <div class="item">6</div>
    <div class="item">7</div>
    <div class="item">8</div>
  </div>
</body>

效果:

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

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

相关文章

“无法连接打印机0X0000011B”原因分析及多种解决方法

在日常办公和生活中&#xff0c;打印机是不可或缺的重要设备。然而&#xff0c;有时在连接打印机的过程中&#xff0c;我们可能会遇到错误代码0x0000011b的提示。有更新补丁导致的、有访问共享打印机服务异常、有访问共享打印机驱动异常等问题导致的&#xff0c;针对访问共享打…

MySQL场景测试题

第一题 软件环境描述&#xff1a; Mysql V5.7.30 Innodb RR隔离级别 表结构以及数据描述&#xff1a; &#xff08;1&#xff09;t_user用户表&#xff0c;表格如下&#xff1a; CREATE TABLE t_user ( id int(10) NOT NULL, name varchar(100) DEFAULT NULL, PRIMARY KEY (id)…

240831-Gradio之RAG文档对话工具Kotaemon的安装与配置

A. 用户界面 该项目既可以作为功能性 RAG UI&#xff0c;既可以用于对文档进行 QA 的最终用户&#xff0c;也可以用作想要构建自己的 RAG 管道的开发人员。对于最终用户&#xff1a; - 一个干净且简约的用户界面&#xff0c;用于基于RAG的QA。 - 支持 LLM API 提供程序&#xf…

gethub-rrsf

一.FastCGI协议 1.来到127.0.0.1下发现404报错 2.这一关我们要借助一个叫Gopherus的工具&#xff0c;我这里是在kali虚拟机里面克隆的 git clone https://github.com/tarunkant/Gopherus.git 3.运行命令 由于一句话木马无法写入&#xff0c;所以我们使用base64编码&#xf…

将Google Chrome或Microsoft Edge浏览器的地址栏隐藏的方法

将Google Chrome或Microsoft Edge浏览器的地址栏隐藏的方法 目标效果示范 我们以百度首页为例&#xff0c;普通模式启动的页面通常会显示地址栏&#xff0c;如下图所示&#xff1a; 而本文要实现的效果是隐去地址栏和书签栏&#xff08;如果有的话&#xff09;&#xff0c;无…

重生奇迹MU 敏捷流梦幻骑士 真正的平民PK王

“梦幻骑士”这个职业已经存在于重生奇迹MU中很长时间了&#xff0c;虽然现在已经不算是新职业了&#xff0c;但玩家们对于梦幻骑士的研究和开发一直没有停止过。它作为一个特殊的职业&#xff0c;与传统职业截然不同&#xff0c;拥有着许多独特的玩法。其中&#xff0c;有一种…

JVM2-JVM组成、字节码文件、类的生命周期、类加载器

Java虚拟机的组成 Java虚拟机主要分为以下几个组成部分&#xff1a; 类加载子系统&#xff1a;核心组件类加载器&#xff0c;负责将字节码文件中的内容加载到内存中运行时数据区&#xff1a;JVM管理的内存&#xff0c;创建出来的对象、类的信息等内容都会放在这块区域中执行引…

有宠物用哪个牌子的宠物空气净化器,希喂、IAM哪个更值得推荐

由于很喜欢猫咪和狗狗&#xff0c;每天都只想和它们待在一起&#xff0c;一点都不想上班&#xff0c;经过一番深思熟虑后&#xff0c;决定裸辞去开了一家宠物店。还真别说&#xff0c;开了宠物店之后&#xff0c;整个人都舒爽了&#xff0c;还可以摸到很多不同品种的小猫小狗&a…

学习笔记之JS(0830)

1、介绍 1.1 JavaScript &#xff08;是什么&#xff1f;&#xff09; javascript是一种运行在客户端&#xff08;浏览器&#xff09;的编程语言&#xff0c;实现人机交互效果。作用&#xff08;做什么&#xff1f;&#xff09; 网页特效&#xff08;监听用户的一些行为让万叶…

Java 集合框架与泛型实战指南

Collection&#xff1a; Collection 不唯一&#xff0c;无序 List 不唯一&#xff0c;有序 Set 唯一&#xff0c;无序 ArrayList&#xff1a;内部使用长度可变的数组&#xff0c;遍历查询效率高 LinkedList&#xff1a;采用双向链表实现&#xff0c;增删改效率比较高 ArrayL…

【智能排班系统】Hibernate Validator 参数校验

&#x1f3af;导读&#xff1a;本文档介绍了参数校验的重要性及其在软件开发中的作用&#xff0c;强调了数据完整性、安全性、用户体验、系统稳定性及开发效率等方面的关键价值。文档详细阐述了Hibernate Validator这一流行的Java验证框架的使用方法&#xff0c;展示了如何利用…

适马相机cf卡剪切的数据还能恢复吗?可尝试这几种方法

“本想把适马相机CF卡里的珍贵数据剪切到电脑上&#xff0c;‌以备不时之需&#xff0c;‌但是不知道怎么回事&#xff0c;剪切后数据既不在电脑上&#xff0c;‌CF卡里也没了&#xff0c;这可真是让我心急如焚&#xff01;‌求大神指点迷津&#xff0c;‌帮我找回那些重要的文…

Vue 选项式api和组合式api 路由嵌套

选项式api和组合式api是两种不同的语法习惯&#xff0c;<template>标签内还是该怎么写就怎么写&#xff0c;不一样的只是<script>里面的语法改变了。 目录 选项式api&#xff1a; 组合式api&#xff1a; 1)省略各种关键字&#xff1a; 省略前&#xff1a; 省略后…

【Qt】菜单栏

目录 菜单栏 例子&#xff1a;创建菜单栏、菜单、菜单项 例子&#xff1a;给菜单设置快捷键 例子&#xff1a;给菜单项设置快捷键 例子&#xff1a;添加子菜单 例子&#xff1a;添加分隔线 例子&#xff1a;添加图标 菜单栏 Qt中的菜单栏是通过QMenuBar这个类实现的&…

LeetCode --- 412周赛

题目列表 3264. K 次乘运算后的最终数组 I 3266. K 次乘运算后的最终数组 II 3265. 统计近似相等数对 I 3267. 统计近似相等数对 II 一、K次乘预算后的最终数组 I & II I 数据范围比较小&#xff0c;可以暴力模拟&#xff0c;代码如下 class Solution { public:vecto…

Day52 | dijkstra(堆优化版)Bellman_ford 算法

dijkstra&#xff08;堆优化版&#xff09; 题目 47. 参加科学大会 47. 参加科学大会&#xff08;第六期模拟笔试&#xff09; 题目描述 小明是一位科学家&#xff0c;他需要参加一场重要的国际科学大会&#xff0c;以展示自己的最新研究成果。 小明的起点是第一个车站&a…

vscode 未定义标识符 “uint16_t“C/C++(20) 但是可以顺利编译

这是没有指定编译器的原因 解决方法&#xff1a; 打开 或c_cpp_properties.json&#xff0c;添加编译器

★ 算法OJ题 ★ 力扣611 - 有效三角形的个数

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;椎名日和将和大家一起做一道双指针算法题--有效三角形的个数~ 目录 一 题目 二 算法解析 三 编写算法 一 题目 二 算法解析 给三个数&#xff0c;判断是否能构成三角形的条件&#xff1a;两个较小的数相加大于…

机器学习数学公式推导之高斯分布

文章目录 1、介绍引入1.1 频率派的观点1.2 贝叶斯派的观点1.3 小结 2、数学基础2.1 二阶中心矩2.2 样本方差2.3 高斯分布2.3.1 一维情况 MLE2.3.2 多维情况 本文参考 B站UP: shuhuai008 跳转 &#x1f339;&#x1f339; 1、介绍引入 在统计学和概率论中&#xff0c; P ( x ∣ …

史上最全的MybatisPlus学习教程从入门到精通

一、MybatisPlus是什么 1.1 MyBatis-Plus简介 MyBatis-Plus&#xff08;简称MP&#xff09;是一个MyBatis的增强工具&#xff0c;它在MyBatis的基础上进行了增强&#xff0c;但并没有改变原有的MyBatis框架。MyBatis-Plus的主要目标是简化开发和提高开发效率。它提供了诸如分…