首页 > 其他分享 >时隔多年,从新认识浮动float

时隔多年,从新认识浮动float

时间:2023-06-16 09:22:56浏览次数:34  
标签:浮动 元素 float background 时隔多年 display left

开场白

随着css的发展,在加上各种优秀ui库的兴起。
我们在项目中浮动用的很少。
但并不意味着我们不使用浮动了。
曾几何时,浮动这个属性是那个遥远时代的'超级明星'
排版,布局,都需要使用他。
今不如昔:现在没落了。他的这几个属性还记得吗?
1.包裹性
2.浮动的自适应性
3.float会改变display的值,不是block就是table
4.浮动导致的父元素高度坍塌
5.没有任何margin合并
6.会破坏文档流

浮动有包裹性

包裹性就是说:假设父级元素500px;
浮动的子集元素是200px;
则表现的是200px。这就是包裹性。
我理解的包裹性指的是:浮动元素的宽度会收缩到与内容一致。高度由内容决定。
浮动会使盒子产生包裹性
/* 父级元素500px */
.father-box {
  width: 500px;
  background: pink;
}
/* 浮动的子集元素 */
.float-son {
  float: left;
}

.float img {
  width: 200px;
}
<body>
    <div class="father-box">
        <div class="float-son">
            <img src="./xueyue.png">
        </div>
    </div>
</body>

浮动的自适应性

浮动的自适应性:如果子元素不仅有图片。
还有文字,则原来图片是多大就是多大。
<div class="father-box">
  <div class="float-son">
    <img src="./xueyue.png"> 我就喜欢看雪月剑仙李寒衣
  </div>
</div>

float会改变display的值

元素一旦float的属性值不是none,
则 display 的值不是block就是table。
很多小伙伴看见上面这一句话,
就以为我是胡说八道。
我们可以通过下面的例子来看下
 .father-box {
  width: 500px;
  background: pink;
}
.float-son {
  float: left;
}
.float img {
    width: 200px;
    height: 200px;
}
<body>
  <div class="father-box">
    <div class="float-son">
    </div>
  </div>
  <script>
    let dom = document.querySelector(".float-son")
    console.log('是bolck吗?', window.getComputedStyle(dom).display)
  </script>
</body>

看见上面这个例子是不是有点不可思议。
元素设置为浮动后,这个元素的 display 竟然是 block。
有些小伙伴会说:你傻呀?div本来就是块级元素,所以display就是block。
是吗?那我们来看下面的例子。
 .father-box {
  width: 500px;
  background: pink;
}
.float-son {
  float: left;
}
.float img {
    width: 200px;
    height: 200px;
}
<body>
  <div class="father-box">
    <sapn class="float-son">
      我是span标签,设置了float
    </sapn>
  </div>

  <script>
    let dom = document.querySelector(".float-son")
    console.log('是bolck吗?', window.getComputedStyle(dom).display)
  </script>
</body>

看了这个例子是不是觉得发现了新知识。
一个本来是行级元素。怎么它的display是block。
是的,你没有看错。
元素一旦float的属性值不是none,则 display 的值不是block就是table。

推论

 <sapn class="float-son">
    我是span标签,设置了float
</sapn>
.float-son {
  float: left;
  /**这个block没有意义,不用写 */
  display: block; 
}

什么情况下浮动的值是 table ?

当浮动后; display: inline-table时,
display的属性值才是table;
其他属性值,全是block。
我们可以通过下面的代码来验证一下。
<style>
  /* 父级元素500px */
  .father-box {
    width: 500px;
    background: pink;
  }
  .float-son {
    float: left;
    /* display的值设置为 inline-table*/
    display: inline-table
  }
  .float img {
    width: 200px;
    height: 200px;
  }
</style>

<body>
  <div class="father-box">
    <sapn class="float-son">
        我是span标签,设置了float
    </sapn>
  </div>
  <script>
      let dom = document.querySelector(".float-son")
      console.log('是table吗?', window.getComputedStyle(dom).display)
  </script>
</body>

浮动导致的父元素高度坍塌

我们都知道,浮动属性由一个非常著名的表现特征。
就是会让父元素的高度坍塌。
浮动导致的父元素高度坍塌我的理解就是:
子元素设置浮动后脱离文档流,
从而导致子元素无法撑父元素的高度,
就会造成父元素的高度塌陷。

下面这样的情况就会导致父元素高度坍塌

<style>
/* 父级元素500px */
.father-box {
  width: 500px;
  background: pink;
}
.float-son {
  height: 300px;
  float: left;
}
</style>

<body>
<div class="father-box">
  我是父级元素
  <div class="float-son">
    下面这样的情况就会导致父元素高度坍塌
  </div>
</div>
</body>

我理解的 clear

我们都知道 clear 有4个属性值,分别是:
clear:none | left | right | both
之前看见有一篇文章有一个大佬是这样说的:
凡是可以使用 clear:left 或者 clear:right起作用的,
就一定可以可以使用 clear:both去替换。
我觉得不一定。我们来看下面的例子
.left {
  background: rgba(44, 230, 7, 0.904);
  height: 300px;
  float: left;
}

.center1 {
  background: rgb(10, 197, 239);
  height: 300px;
  float: left;
}

.center2 {
  background: rgb(224, 9, 167);
  height: 300px;
  /* 这里我使用了右侧清除浮动 */
  clear: right;
}

.right {
  background: pink;
  height: 300px;
  float: left;
}
<body>
  <div class="father-box">
    <div class="left">我是左侧的内容</div>
    <div class="center1">center1center1center1</div>
    <div class="center2">center2center2center2</div>
    <div class="right">我是右侧的内容</div>
  </div>
</body>

其他的不变,按照大佬的说法:
可以使用 clear: right;就可以使用 clear:both去替换。
我就修改一下,如下:

 .center2 {
  background: rgb(224, 9, 167);
  height: 300px;
  /* 这里我使用了右侧清除浮动 */
  clear: both;
}

尾声

如果你觉得,这篇文章写的不错,对你有用。
请给我点一个赞,感谢了。

标签:浮动,元素,float,background,时隔多年,display,left
From: https://www.cnblogs.com/IwishIcould/p/17484200.html

相关文章

  • ios NSString format 保留小数点 float double
     iosNSStringformat保留小数点floatdouble self.orderCost.text=[NSStringstringWithFormat:@"%.1f元",self.order.cost.floatValue];%.1f 表示小数点一位,%.2f表示小数点2位,依次类推.格式定义TheformatspecifierssupportedbytheNSStringformattingmethodsa......
  • v6.5版本副单位应用一:录入浮动单位数量,固定一个换算率,根据公式算出销售数量(采购数量等
    v6.5版本副单位应用一:录入浮动单位数量,固定一个换算率,根据公式算出销售数量(采购数量等)1、商品档案自定义--启用一个数字自定义,比如名称叫:副单位换算率2、商品添加一个浮动单位,比如叫:副单位,换算率任意填写一个非0的值;自定义属性里面填写这个副单位对应的换算率3、单据上设置......
  • 关于U8采购单位换算处理即主单位和辅助单位按固定换算率或浮动换算率进行业务处理
    关于存货使用固定换算率单位和浮动换算率单位说明:首先需要在计量单位下添加计量单位组:固定单位换算率真可以两个及以上单位进行固定换算浮动换算率真也可以在两个及多个单位进行固定换算存货档案计单位固定设置如下图: 存货档案计单位浮动设置如下图: 对应的采购页面需添......
  • css清除浮动
    1、为什么清除浮动  当子元素浮动时其父元素没有高度(比如列表页,父元素需要通过子元素的数量来确定高度),这时就会影响标准流父元素下面元素的布局,那么我们就需要清除浮动了。示例:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-......
  • upc 8378: Floating-Point Numbers(模拟浮点数运算)
    8378:Floating-PointNumbers时间限制:1Sec  内存限制:128MB提交:10  解决:4[提交][状态][讨论版][命题人:admin]题目描述Inthisproblem,weconsiderfloating-pointnumberformats,datarepresentationformatstoapproximaterealnumbersoncomputers.S......
  • python3-float
    1、介绍builtins.py文件中定义了float类,用于处理python中浮点数数据。float也是python的基本数据类型之一。2、类和初始化classfloat(object):def__init__(self,*args,**kwargs):pass3、初始化(1)字面量初始化支持十进制和科学计数法#十进制赋值a=3......
  • 那些年我们一起清除过的浮动
     浮动(float),一个我们即爱又恨的属性。爱,因为通过浮动,我们能很方便地布局;恨,浮动之后遗留下来太多的问题需要解决,特别是IE6-7(以下无特殊说明均指windows平台的IE浏览器)。也许很多人都有这样的疑问,浮动从何而来?我们为何要清除浮动?清除浮动的原理是什么?本文将一步一步地深入剖析......
  • blog-博客美化-右边浮动分享按钮
    分享按钮的设计网站http://share.baidu.com/code右边浮动分享按钮<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"1","bdMiniList":["sqq","weixin&quo......
  • 05-CSS中的浮动
    CSS中的浮动HTML页面的文档流1、标准文档流---面试题 标准文档流指的是元素排版布局过程中,元素会默认自动从左往右,从上往下的流式排列方式 当前面内容发生了变化,后面的内容位置也会随着发生变化2、留存弊端 无论多么复杂的布局,其基本出发点均是:“如何在一行显示多个div......
  • 如何将网页中的目录完美地浮动在主要内容的侧边距中
    诸安,我是之于言者。去年我在编写戴森球计划wiki时遇到一个需求:将文档流中的目录提取出来,使之固定在屏幕左侧。简而言之,就是将这样的网页:转化成这样的网页:原来的网页源代码可以简写成这个样子:<!DOCUMENThtml><html><head> <style> :root{ --border--:1pxsolidrg......