ifency/Blog

翻译系列之float是否已弃用?

ifency opened this issue · 0 comments

原文地址:Is CSS float deprecated?,作者:Robin Rendle

前言

本人未必按一字一句进行翻译,只是根据原文的意思并且结合自己的理解能力来翻译,如有误处,欢迎提出~另外祝小姐姐小哥哥新年快乐呀,发量多多~至于为什么在新年第一天写文章呢?其实很早就想写的,但最近一直阅读源代码,但总结不出来的,好卑微啊~然后没事就看看国外文章,正好看到一篇比较短的文章,就想翻译下~

正文

前几天上班时碰到一个有趣的话题:我们现在已经有了flex和grid,还需要float么?

简单来说

不!好吧,其实大多数时候我只用于在文字围绕图像上,但在布局方面上我完全避免用float

具体来说

flex和grid出来之前,我们用float来实现布局和网格。某一个酷热的夏天下午,我打开Jeffrey Zeldman写的《web标准设计》副本,然后翻到一个带有float:right的红色div,它的浮动简直神奇了。

现在我想知道有多少设计师因为web能实现屏幕上随意的位置而喜欢呢?

但是使用float来实现复杂的布局是一种技巧,它的真正目的只是为了让文字围绕图像。

img {
  width: 150px;
  float: left;
}

当我们在巨大的布局要实现像杂志风格那样,使用float就暴露问题,但当时没有其他的方案可以实现,我们不得不继续用float。

使用float的一个问题就是,你使用了float后不得不使用clearfix来清除浮动,比如:

<div class="clearfix">
  <div class="float-left">Column</div>
  <div class="float-left">Column</div>
  <div class="float-left">Column</div>
</div>
clearfix:after {
  content: "";
  display: table;
  clear: both;
}

不久前,Jay Hoffman描述过clearfix hack(清除浮动):

对于那些不知道的人来说,clearfix是一个css浮动的,是为了解决当两个浮动的元素在一起发生重叠的问题。但一个元素以这种方式对齐时,该元素的父容器的高度就为0,这就容易破坏布局。clearfix就是这样解决的。

从那之后就开始慢慢地改变了。早在2017年,Rachel Andrew解释了浏览器如何处理清除浮动的问题,我们需要的就是下面的css例子来处理相同的问题:

.container {
  display: flow-root;
}

奇怪的是,我开始写这篇文章三分钟之前才知道flow-root这个,但这个并不是本文要说的重点,我要表达的意思是,有了flex和grid,我们根本不需要float,float的作用本来就是让文本围绕图像。但现在有了flex和grid,他们足够可以完成复杂的布局。


回到我上班的话题那个,然后有些人说我们应该回去把代码库里的那些float都用flex和grid来替换掉。但就在这时,我就说:等会儿。我不认为在我们的代码库几个地方用到float会引发问题。

因此除了让文字围绕图像,我们还能用float做其他的事么?并不。但是因为float并不是纯粹的,也不是“正确”的处理方式,我们就应该立即清除这个么?并不。

web的最佳在于旧的代码不会破坏东西。没用到最新的属性或者最酷的技巧也并不是没用或者是一件坏事。我们只是用更好的方案去代替float。我认为这个是一个很好的教训,这些css属性可能永远存在,因为它们在现代设计中仍然可用的。

到此为止