只要你用过自动扶梯,你就能很快的理解CSS中的浮动(Float)。

  你肯定遇到过这样的情况:

      做好了,你想用CSS浮动来调整元素间的位置关系。

  在写完代码之后,你发现浮动元素没出现在你设想的位置,而且像个磁铁一样紧紧的靠在div旁边。

  为了理解浮动这个概念,我个人曾经花费了很长的时间。有一次,我读到了一篇有关浮动的文章,觉得它说的很有道理,于是去尝试文章中的方法。但是写完代码之后,还是失败了……我也只好从头再来。

  如今我已经成功的理解了这个概念,我也想要尽我最大的努力让其他人少走弯路。

  浮动创建替代的流(flow)。这是浮动这个概念最难以理解的部分。在接触到这个概念之后,在写代码的时候,你需要将页面视为三个部分:左、中、右。对你来说,这是一个新的规则,以前你只需要调整元素的宽度或是定位,现在突然出现了流这个概念。

  事实上,浮动和乘坐扶梯差不多。通过这样的理解,下次你在使用浮动的时候,可能就不会那么纠结了。

  尊重通行规则

  元素的默认流有点像上图中的情况。一个人站在扶梯正中间,一只手还放在扶手上,这样一来,他就霸占了整个通行空间,没人能从他身边超越。这种乘坐扶梯的方式挺没有公德的。

  这个人前面的那些人,也都在这样站着,所以他也无法超越身前的那些人

  在网页开发中,如果你不使用浮动,元素就像是这些不讲公德的人一样,占据着页面的通道。

  而在使用了浮动之后,情况就会像是上面这张图一样,突然间秩序来了。

  扶梯被分成左右两个通道,人们都站在边上,当有其他人需要快速通过的时候,这些人可以从左边或是右边绕开身前的人,实现快速通行。

  没有人站在中间,因此没有人霸占着通道。

  在div中使用浮动的时候,网页就是这样。页面中出现了左边流和右边流,你可以通过浮动给元素指定他们是要待在左边还是待在右边,而那些没有使用浮动的元素,则待在左边流和右边流之间的位置。

  浮动:左边和右边

 

  浮动带来的两个新概念:左边流和右边流。

  没有使用浮动的元素,则待在文档流(normal flow)的位置上,也就是页面的中间部分。

  浮动的作用,就是在各个流中创建这些新的关系。

  如果所有人都站在扶梯的正中间,在对元素的架构进行调整时,你就会感到被处处掣肘。但是当出现了左边和右边的空间时,突然间你的选择就多了。你可以让一些人(元素)站在左边,一些站在右边,一些站在中间。

  这样一来,你就可以让元素更加易于阅读和理解。

  Clear属性

 

  我们还有一个东西没有谈到:clear属性。这个属性允许元素声明元素的哪一侧不允许其他浮动元素。

  在上图中,两个人站在电梯的左右两侧,这种站法能让后面的人更快的通行。

  我们现在假设,要让3个人站在左边,一个人站在右边。

  要想让3个元素站出现在左边流,我们可以给它们指定“clear: left”属性。但是如果这个三个元素是横向并排排列的,那么后面的元素就根本无法超越:

  “Clear: left”的作用,是告诉每一个人都站在左边,而且要排在第一个人的身后。

  clear属性最常见的用法为“clear:both”。它可以让你重设元素的流。有点像电梯上拿着行李箱的人:虽然依旧站在一侧,但是其行李箱还是堵住了中间的通道。

  这个拿着行李箱的人重设了规则。对于后来的人来说可能是个坏消息,但是如果你想要阻止其他元素通过的话,这个行李箱却是一个不错的工具。

  但是请注意,这个行李箱和文章第一张图的那个人不一样。在第一张图中,所有人都站在中间,整个扶梯上只有一个流。而这个行李箱(clear:both)虽然挡住了通道,但是整个扶梯上依然有3个流。

 
 
 
来源作者:Christian(编译)

如何理解CSS中的浮动 :其实他就像乘坐扶梯一样的更多相关文章

  1. 深入理解CSS中的层叠上下文和层叠顺序(转)

    by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wordpress/?p=5115 零.世间的道 ...

  2. 深入理解css中的margin属性

    深入理解css中的margin属性 之前我一直认为margin属性是一个非常简单的属性,但是最近做项目时遇到了一些问题,才发现margin属性还是有一些“坑”的,下面我会介绍margin的基本知识以及 ...

  3. css中的浮动以及清除浮动

    对于css中的浮动问题,曾经有一段时间我是懵懵懂懂的感觉,对于float这个属性一直是似懂非懂的赶脚,对于这种让我们一直懵懵懂懂的知识点,我们就需要找个时间点,仔仔细细的去将它搞懂,从这个过程中我们也 ...

  4. 深入理解CSS中的层叠上下文和层叠顺序

    零.世间的道理都是想通的 在这个世界上,凡事都有个先后顺序,凡物都有个论资排辈.比方说食堂排队打饭,对吧,讲求先到先得,总不可能一拥而上.再比如说话语权,老婆的话永远是对的,领导的话永远是对的. 在C ...

  5. 【转】CSS中的浮动和清除浮动

    以下转自<CSS中的浮动和清除浮动,梳理一下!> 浮动到底是什么? 浮动核心就一句话:浮动元素会脱离文档流并向左/向右浮动,直到碰到父元素或者另一个浮动元素.请默念3次! 浮动最初设计的目 ...

  6. [转]深入理解CSS中的层叠上下文和层叠顺序

    http://www.zhangxinxu.com/wordpress/2016/01/understand-css-stacking-context-order-z-index/ 零.世间的道理都是 ...

  7. 深入理解CSS中的margin

    1.css margin可以改变容器的尺寸 元素尺寸 可视尺寸--标准盒子模型中盒子的宽度是不包括margin值的,clientWidth 占据尺寸--包括margin的宽度 outWidth不在标准 ...

  8. CSS中的浮动和定位

    在了解CSS中的浮动和定位之前有必要先了解清楚标准流和脱离标准流的特性 标准流的默认特性 1.分行.块级元素,并且能够dispay转换. 2.块级元素(block):默认独占一行,不能并列显示,能够设 ...

  9. 深入理解css中position属性及z-index属性

    深入理解css中position属性及z-index属性 在网页设计中,position属性的使用是非常重要的.有时如果不能认识清楚这个属性,将会给我们带来很多意想不到的困难. position属性共 ...

随机推荐

  1. php学习笔记——CSS缓存问题

    PHP也没学多久,在工作中遇到了一个问题,先来记录一下. 问题描述: 同一项目里面的不同模块对应了不同的网站,但是两个网站用的文件名以是同一规范的,最后导致了两个网站css文件同名,在打开了网站A后去 ...

  2. 文档在线预览开源实现方案二:OpenOffice + pdf.js

    文档在线预览的另一种实现方式采用的技术栈是OpenOffice + pdf.js, office文档转换为pdf的工作依然由OpenOffice的服务来完成,pdf生成后我们不再将其转换为其他文件而是 ...

  3. TypeScript 学习四 面向对象的特性,泛型,接口,模块,类型定义文件*.d.ts

    1,面向对象的特性一:类,继承,见上一篇博客: 2,面向对象的特性二: 泛型(generic):参数化的类型,一般用来限制集合的内容:指定只能放某个类型的元素 如下图中的尖括号中的Person,就代表 ...

  4. VsVim的快捷键使用

    .插入命令(可配合数字使用) i 在当前位置前插入 I 在当前行首插入 a 在当前位置后插入 A 在当前行尾插入 o 在当前行之后插入一行 O 在当前行之前插入一行 ni/a/o/I/A/O<E ...

  5. android相关内容

    一: 前台进程: 前台的进程的优先级最高, 可见进程: android系统一般存在少量的可见进程. 服务进程: 没有用户界面, 后台进程: 一般存在较多的后台进程. 空进程: 不包括任何活跃组件的进程 ...

  6. Action3D

    抖动效果-Shaky3D 波浪效果-Waves3D 翻转效果-FlipX3D 凸镜效果-Ripple3D 液体效果-Liquid 扭动效果-Twirl 破碎效果-ShatteredTiles3D 瓷砖 ...

  7. 通过反射获取所有的Action 一般用于权限管理

    public IList<ActionPermission> GetAllActionByAssembly() { var result = new List<ActionPermi ...

  8. [Jmeter]jmeter之初体验(windows下的jmeter)

    一.环境准备 1.安装JDK(传送门:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.ht ...

  9. 微信内置浏览器私有接口WeixinJSBridge介绍(转)

    这篇文章主要介绍了微信内置浏览器私有接口WeixinJSBridge介绍,本文讲解了发送给好友.分享函数.隐藏工具栏.隐藏三个点按钮等功能,需要的朋友可以参考下 微信网页进入,右上角有三个小点,没错, ...

  10. uitextfield银行卡加空格

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementS ...