css float 浮动是个混球
得说,在学习 CSS 的时候就一直在疑惑,横排布局干嘛要用 float 这种属性,
用了还会高度塌陷,怎么不发明些高级点的属性来完成横排布局呢,
甚至所有人都告诉我摒弃表格布局,浮动布局才是 DIV+CSS 时代的产物。
以前我是没得选,现在想想,都过去这么多年了,也许我应该回去看看。
其实当时制定 CSS 的人也许根本就没想过会用 float 来布局,最多来个 word 的那种文本环绕就不错了,
或者说布局本来不是 float 的本职工作,你听过建房子有可能用左右浮动这种办法的吗...
即便如今有多种方法去解决高度塌陷,
比如 overflow: hidden 对布局造成的影响,等你遇到了你就会发觉这家伙神烦了,本来想露出的部分结果露不出来了,呵呵呵呵。
另一方面,个人认为随着时代变化,网页的交互需求会翻倍增加,不只停留在搭建和布局上,还将有更多动效/微数据上的突破,
所以 :before 和 :after 将会有更多应用,拿来清除浮动实在是大材小用了。
而相对而言,inline-block 仿佛更像是为横排布局而设计的。inline 是行,block 是块,一行里的方块。
可惜的是,它的兼容性实在不忍吐槽,
要么底部有缝隙,需要 vertical-align,
要么左右有缝隙,而 font-size:0 并不适用 chrome,letter-spacing: -2px 的数值其实并不稳定,有时候还会需要 -4px。
从冠冕堂皇回到对 float 的吐槽...
浮动布局就像是先伤己后伤人,一挥刀自宫把自己脱离文档流,再一反手影响别人,而且出招别扭。
浮动时我们多半要使用定宽,拿定宽去进行响应式设计时,栅栏布局已经很不灵活了(即便是百分比),稍微改大号字体可能整个布局就崩了。
曾经试着写类库的时候就希望将 logo+搜索框+菜单按钮 这样的三栏布局的样式类化,呵呵,最终我放弃了 float 动用了 absolute 来实现垂直居中,发现甚至还不如 table-cell 方便。
这也许就是为什么 twitter 等公司互联网老大哥还在使用表格布局的部分原因吧。
另一方面,float 与 absolute 同是脱离文档流,但 flost 还是能影响其他元素,所以说 float 脱离得并不彻底,因此在重绘和回流时 float 将比 absolute 更烧。
其次由于浮动的效果,很多效果也就难以同时产生了,比如垂直居中/子级等高/元素排序等等...
不知是不是幸运降临,float 难得的很容易理解,兼容又不错,有类库后使用也比较方便,实在是这个急功近利的时代容易接受的。
但不管怎样,布局终究不是它的本质工作,甚至让它成为了这个时代的主流,回头想想还是有些可怕的。
或许你没有体会过 表格布局/定位布局/浮动布局/栅栏布局 的优劣不同,不知道他们在开发和维护上所消耗的成本精力的差别;
有些人也知道浮动这个属性能不用就不用,但是由于找不到更好的替代方法,回头想想又是可悲的。
想来 CSS3 的开发者也发现了这个问题,而推出了 flexbox 这种布局方式,很大程度上完善了布局功能。
它分三个阶段: box(最老,如今兼容不怎么好)/ flexbox(过渡,流传不广)/ flex(最新),及其 inline 形态(即 inline-box/inline-flex 等)。
(以前是资料看得不多,一直不敢写,但最近装逼过头了发了大话被老大抓住话头了,只好赶鸭子上架了,还请爸爸们轻喷。)
flex 布局的中文名称十分的美妙:自动布局/弹性布局/伸缩容器,光看这名字就已经觉得超屌了。
它确实拥有以往布局难以企及的灵活性,在它的领域里基本就可以完全抛弃 float 和 table 了,因为它们能做的(单指布局),flex 肯定能做。
而且兼容性出乎意料地好,基本本人接触到的设备都兼容了 flex。
flex 是 display 的属性值,这才是行块布局的正统啊,它规定了该元素就是一个伸缩盒,是不是相比 float 等更语义了呢。
就如同 display 其他属性值一样,每个盒模式都有其特殊的样式效果,如 inline 会失去高度,tabel-cell 会拥有一部分表格的特性,
display: flex 伸缩容器使其子级变成了伸缩项目,拥有了直接横排布局,抢占空隙/自动宽度,自动高度,可排序,可靠齐等功能,
在此就不赘述各个属性的样式效果了,随便搜搜都能比我讲的好,比如我就爱看这篇。
再说 flex 的弊端方面:
想将 flex 布局像栅栏布局那样类化,个人认为难度很大,
比如 .flex-row {dispaly:flex} .flex-row>*{flex-grow:1} 能产生横排子级全等宽的效果,但当遇上需要一个定宽值得时候,这又得加上 flex-shrink:0;
设为Flex布局以后,子元素的 float / clear 和 vertical-align 属性将失效,这会使得与其他布局方式/类库冲突,请提前考量。
其次 CSS3 新属性对旧属性的影响也偶尔发生,鄙人正在收罗中...
float 是一种流传很广的布局方式,栅栏布局也非常适用于快速的结构开发,
所以我从来不去抵制使用 float,但随着我们对更多布局样式的了解和实践,总有一天,我们将选择更好的,而慢慢忘记了这个偏房...
css float 浮动是个混球的更多相关文章
- 对css float 浮动的学习心得
css float浮动详解 @(css float)[hasLayout|clear float|妙瞳] css float的定义和用法 float 属性定义元素在哪个方向浮动.以往这个属性总应用于图 ...
- [转] CSS float 浮动属性
http://www.cnblogs.com/polk6/p/3142187.html CSS float 浮动属性 本篇主要介绍float属性:定义元素朝哪个方向浮动. 目录: 1. 页面布局方式: ...
- 解决子级用css float浮动 而父级div没高度不能自适应高度
解决子级对象使用css float浮动 而父级div不能自适应高度,不能被父级内容撑开解决方法,父级div没有高度解决方法. 最外层的父级DIV不能自适应高度-不能随对象撑开没有高度 当在对象内的盒子 ...
- CSS| 解决子级用css float浮动 而父级div没高度不能自适应高度
解决子级用css float浮动 而父级div没高度不能自适应高度 解决子级对象使用css float浮动 而父级div不能自适应高度,不能被父级内容撑开解决方法,父级div没有高度解决方法. 最外层 ...
- 子级用css float浮动 而父级div没高度不能自适应高度
子级对象使用css float浮动 而父级div不能自适应高度. 对父级div标签闭合</div>前加一个clear清除浮动对象. <!DOCTYPE html> <ht ...
- 子级用css float浮动 而父级不能自适应高度解决方法
解决子级对象使用css float浮动 而父级div不能自适应高度,不能被父级内容撑开解决方法,父级div没有高度解决方法. 当在对象内的盒子使用了float后,导致对象本身不能被撑开自适应高度,这个 ...
- css float 浮动
CSS Float(浮动) 什么是 CSS Float(浮动)?大理石平台价格 CSS 的 Float(浮动),会使元素向左或向右移动,其周围的元素也会重新排列. Float(浮动),往往是用于图像, ...
- CSS:CSS Float(浮动)
ylbtech-CSS:CSS Float(浮动) 1.返回顶部 1. CSS Float(浮动) 什么是 CSS Float(浮动)? CSS 的 Float(浮动),会使元素向左或向右移动,其周围 ...
- DIV CSS float浮动
一.浮动? #CSS样式的float浮动属性,用于设置标签对象(如:<div>标签盒子.<span>.<a>.等html标签)的浮动布局. #通过定义浮动(floa ...
随机推荐
- one thinkphp 文档
http://document.onethink.cn/manual_1_0.html#onethink_usehelp_config 官网:http://www.onethink.cn/topic/ ...
- kafka 集群--3个broker 3个zookeeper创建实战
准备工作: 1. 准备3台机器,IP地址分别为:192.168.0.10,192.168.0.11,192.168.0.12 2. 下载kafka稳定版本,我的版本为:kafka_2.9.2-0.8. ...
- myeclipse中文编码错误,没有GBK选项
默认编码是UTF-8,但是导入GBK工程后,直接改为ISO-8859-1,但是还是编码错误. 用网上的: 全局编码设置:编码设置的方法:ToolBar-->Window-->Prefere ...
- libsvm以概率输出单个test样例的判别结果
在函数svmtrain和svmpredict的输入参数部分加入'-b 1'比如原先是 svmtrain -c 8.0 -g 0.0078125 a1a.scale 修改过后就是 svmtrain -b ...
- easyui datagrid onLoadSuccess加载两次。。
今天使用EasyUI的datagrid时发现首次打开页面时onLoadSuccess方法执行了两次.后来发现主要问题是datagrid被初始化了两次.主要原因是一开始html中声明了dg为easyui ...
- hadoop2.4.1伪分布模式部署
hadoop2.4.1伪分布模式部署 (承接上一篇hadoop2.4.1-src的编译安装继续配置:http://www.cnblogs.com/wrencai/p/3897438.html) 感谢: ...
- ASP.NET动态网站制作(27)-- 三层框架(1)
前言:今天主要介绍一下三层框架,给大家一个整体的概念.分层概念使得程序低耦合,更加健壮,扩展性更好. 内容: 1.三层: UI(表现层):主要是指与用户交互的界面.用于接收用户输入的数据和显示处理后用 ...
- ng-model ng-show
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- nginx访问css js 图片等静态资源,报404或无法定向访问到
配置完nginx,把php的项目放上去后,发现css,js和图片全部访问不到,一直重定向到根目录执行index.php,郁闷的在网上查了半天,原来不同后缀名的文件访问时都要在nginx.conf中声明 ...
- 那些可爱的 Linux 命令
环境 root@15b883:~# uname -a ##需要是Ubuntu环境 Linux 15b883 --generic #- :: UTC x86_64 x86_64 x86_64 GNU/L ...