hzzzzzzzq / Blog

这是我记录博客的地方,希望能多写一些技术博客,JS、ES、React、Vue等
14 stars 0 forks source link

CSS 系列 - 10. float #37

Open hzzzzzzzq opened 2 years ago

hzzzzzzzq commented 2 years ago

float

介绍

floatCSS 属性,指定一个元素应沿其容器的左侧或右侧放置,允许文本和内联元素环绕它。 该元素从正常文档流中移除,尽管仍然保持部分的流动性。

我们来看看 float 的语法,float 属性的值被指定为一个单一的关键字。

.float {
  float: left | right | none | inline-start | inline-end;
}

我们来看看不使用浮动时的显示

image-20220115082250490

再来看看使用浮动时的样式。

image-20220115082334837

来看看代码。

.main {
  border: 1px solid black;
}
.float {
  background-color: #f2cda5;
  width: 100px;
  height: 100px;
  float: left; /* 设置浮动 */
}
<div class="main">
  <div class="float"></div>
  <p>
    一、越成功、越伟大,就越该谦恭行事;二、努力工作是成就人生不可或缺的要义;三、以高目标为动力,清除不良品质;四、每天进步一点点,不断突破自己;五、成事者都追求完美。
  </p>
</div>

浮动带来的问题

高度塌陷

我们来演示一下,我们对代码进行修改,修改文案,并给每一个元素添加 border

<div class="main">
  <div class="float"></div>
  <p>p标签</p>
</div>

image-20220115082636821

image-20220115082716487

这也就导致了,当我们想让元素从底部开始时,返回跟在了 p 标签的下面,并不是 div 的下面,也就是高度缺失。

<div class="main">
  <div class="float"></div>
  <p>p标签</p>
  <div>hello world</div>
</div>

我们添加一段代码,来看看效果。

image-20220115082838323

而这可能并不是我们想要的。所以就需要我们接下来介绍的清除浮动了。

清除浮动

清除浮动,首先我们要介绍的当然是 clear 了。

.clear {
  clear: none | left | right | both;
}

当然 both 是我们最常用的属性。

.clear {
  clear: both;
}
<div class="clear">hello world</div>

image-20220115083005924

看结果,我们就可以知道,浮动被清除了,从浮动格子的下面开始显示了。

我们来看看创建 BFC 的方式。

<div class="main">
  <div class="float"></div>
  <p>p标签</p>
  <div>hello world</div>
</div>

我们在 main 中添加以下代码。

.main {
  overflow: hidden;
}

image-20220115083450019

这里让 main 建立了一个 BFC,所以就出现了上面的情况,由于为把 hello world 写在了 main 下,所以会只展示这个格子的高度,与上面的 clear: both 清除浮动的方式不同。

这里不了解 BFC 的可以看我之前的文章 - BFC;

给父元素添加伪元素来解决。

.clearfix::after {
  content: '';
  display: block;
  clear: both;
}
<div class="main clearfix">
  <div class="float"></div>
  <p>p标签</p>
  <div>hello world</div>
</div>

结果与 BFC 清除浮动的结果相同。

参考

MDN - float BFC