当前位置: 首页 > news >正文

CSS布局模型 之 浮动模型(浮动的工作原理和清除浮动技巧?)

浮动的工作原理

浮动是让某元素脱离文档流,在浮动框之前和之后的非定位元素会当它不存在一样,可能沿着它的另一侧垂直流动,但都为其腾出空间,块级元素也不例外(被浮动元素占据了部分行空间的块级元素,仍然被看作是占据了一整行,只不过是被浮动元素占据的那部分空间无法利用罢了)。

浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止;如果当前线上的水平空间不足,它将逐行向下移动,直到有空间为止(所以浮动元素不会影响页面上方布局)。任何元素都可以浮动,浮动元素会生成一个块级框(拥有块级元素特性,但不占整行),而不论它本身是何种元素。

另外因为浮动元素脱离了文档流,所有它无法为其文档流中的父级元素撑起高度。

清除浮动技巧

   1、clear清除浮动

left    在左侧不允许浮动元素。

right在右侧不允许浮动元素。

both在左右两侧均不允许浮动元素。

none默认值。允许浮动元素出现在两侧。

 CSS1 和 CSS2 中,这是通过自动为清除元素(即设置了 clear 属性的元素)增加上外边距实现的。在 CSS2.1 中,会在元素上外边距之上增加清除空间,而外边距本身并不改变。不论哪一种改变,最终结果都一样。例如:如果声明为左边清除,会使元素的上外边框边界刚好在左边浮动元素的下外边距边界之下。

要注意了,我们是通过在别的元素上清除浮动来实现撑开高度的, 而不是在浮动元素上。浮动元素脱离了文档流,就算为其加了清除空间,也影响不了父元素的高度,最多能让其某侧不允许其他浮动元素。

clear 只能作用与块级元素或浮动元素,不过上面已经说了作用于浮动元素的弊端,所以一般都是使用块级元素。

全浏览器通用的clearfix方案,使用伪元素清除浮动【推荐】

// 引入了zoom以支持IE6/7

// 同时加入:before以解决现代浏览器上边距折叠的问题

.clearfix:before,

.clearfix:after {

    display: table;

    content: " ";

}

.clearfix:after {

    clear: both;

}

.clearfix{

    *zoom: 1;

}

另外:也可以在父级元素中增加一个专门清除浮动的块级元素。(不推荐)


    2、BFC清除浮动

   BFC全称是块状格式化上下文,它是按照块级盒子布局的。我们了解他的特征、触发方式、常见使用场景这些就够了。

BFC的主要特征

BFC容器是一个隔离的容器,和其他元素互不干扰;所以我们可以用触发两个元素的BFC来解决垂直边距折叠问题。

BFC可以包含浮动;通常用来解决浮动父元素高度坍塌的问题。

其中,BFC清除浮动就是用的“包含浮动”这条特性。

那么,怎样才能触发BFC呢?

BFC的触发方式

我们可以给父元素添加以下属性来触发BFC

float 为 left | right

overflow 为 hidden | auto | scorll

display 为 table-cell | table-caption | inline-block | flex | inline-flex

position 为 absolute | fixed










本文转自 艺晨光 51CTO博客,原文链接:http://blog.51cto.com/ycgit/1958452,如需转载请自行联系原作者

相关文章:

  • sql优化方案,总结的比较全面
  • 在此之前的软件系统做开发—需求的研究框架
  • 【安全牛学习笔记】字典、在线密码破解-hydra
  • 配置daocloud加速
  • 局域网远程服务器重启
  • Android之SlideMenu实例Demo
  • Linux SPI总线和设备驱动架构之一:系统概述【转】
  • 一些服务器的常用命令的基本操作
  • 38.IntelliJ IDEA中创建Web聚合项目(Maven多模块项目)
  • window7 虚拟机安装
  • hacmp环境下更改ip地址
  • Citrix XenApp策略与AD组策略的整合
  • EIGRP特点包括:
  • 使用JConsole监控
  • C#去除HTML标签
  • @angular/forms 源码解析之双向绑定
  • 【刷算法】从上往下打印二叉树
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • es6
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • leetcode98. Validate Binary Search Tree
  • PAT A1050
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 浅谈Golang中select的用法
  • 如何编写一个可升级的智能合约
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 思否第一天
  • 突破自己的技术思维
  • 微信小程序:实现悬浮返回和分享按钮
  • 一些css基础学习笔记
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 我们雇佣了一只大猴子...
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • ${factoryList }后面有空格不影响
  • (06)Hive——正则表达式
  • (52)只出现一次的数字III
  • (9)目标检测_SSD的原理
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (三)终结任务
  • (转)nsfocus-绿盟科技笔试题目
  • .Net CF下精确的计时器
  • .net core 依赖注入的基本用发
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET6实现破解Modbus poll点表配置文件
  • .NET连接MongoDB数据库实例教程
  • .net连接oracle数据库
  • .net中我喜欢的两种验证码
  • @AliasFor注解
  • @Autowired注解的实现原理
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @GetMapping和@RequestMapping的区别
  • [ACTF2020 新生赛]Include