OverFlow – 一个秘密武器
来源:Time Machine 发布时间:2010-09-25 12:51:00
如果你已经理解了block formatting contexts那么请继续,否则请先看看这篇文章。
Overflow能够做一些很牛掰的事情,比如:
创建BFC (block formatting contexts via W3c css2.1)
清除浮动
生成块级元素
overflow属性一旦被指定,那么一个新的BFC就被创建了。这意味着什么呢?它改变了block和浮动元素的交互方式。它不再围绕浮动元素,而是变成一个narrower。
[P没有用overflow]你可以把一个页面想象成大的集装箱,这个集装箱里装的货物就是HTML元素。在现实生活中为了避免 不同人的货物相互混淆,都是把货物打好包装再装入集装箱,这样的话无论你包装里面的货物怎么摆放,都不会影响到其他人的货物。
[P有用overflow:hidden]你可以把一个页面想象成大的集装箱,这个集装箱里装的货物就是HTML元素。在现实生活中为了避免 不同人的货物相互混淆,都是把货物打好包装再装入集装箱,这样的话无论你包装里面的货物怎么摆放,都不会影响到其他人的货物。
这不是一个hack,在w3c标准中有明确的说明:
The border box of a table, a block-level replaced element, or an element in the normal flow that establishes a new block formatting context (such as an element with ‘overflow’ other than ‘visible’) must not overlap any floats in the same block formatting context as the element itself.
那么该如何学以致用呢?
拥有新FC( formatting context)的块级元素会占去一行中所有的剩余空间,只给定位了的浮动元素留下空间。在原文作者的开源项目OOCSS中,有两种方式去使用FC:
主内容列 -添加FC意味着主内容列将占去除左右列之外的所有空间。这意味着,在一个模板下,只需简单的删除多余的那列,不用做其它任何更改你就可以很轻易的将布局从三列变为两列。CMS开发者会非常喜欢这个特性的。
在Firebug下玩玩这个模板。
试着将“liquid”class增加到“page”元素中。
从HTML中添加或删除一列。
用文档中列出的附加class去扩展一个列对象。
尝试在Firebug中直接改变列的宽度。
网格 -任何开发过网格系统的人都知道sub-pixel舍入错误所带来的痛苦。浏览器不知道如何处理33.3像素,所以他们都会做不同的事情。YUI利用“列”之间的“槽”解决了这一差异,但我们也可以在单元内部隐藏这一差异。
一个新的BFC可以用来隐藏网格任何一列最后一个单元的尺寸误差。试试这个网格,你会发现当你修改单元的尺寸时,最后的单元会自动伸缩,以适应差异。它没有宽度,而且如果拥有新的BFC,它也不会环绕浮动元素。
清除浮动
你肯定听说过清除浮动这码事。人们一直在探讨通过overflow的属性来清除浮动 。有些人认为它是hack,但仔细阅读规范你会发现,规范作者也没能明确它。因为它的最终解释权归浏览器厂商。
为了计算出什么溢出了容器(这些范围应该被隐藏),他们需要知道块的大小。由于这些块都没有给出明确的高度设置,于是浏览器就使用了从块内容中计算出的高度。欲了解更多关于清除的内容 ,请看我和Eric Meyer在他博客里的讨论。
注意事项
溢出可以太大内容(如巨大的图片,pre区域,或表格之类),我现在尝试overflow: auto,到底使用哪个还需要权衡。
原文地址:http://www.stubbornella.org/content/2009/07/23/overflow-a-secret-benefit/


猜你喜欢
- 一、数据可视化1.pyecharts介绍官方网址:https://pyecharts.org/#/zh-cn/intro📣 概况:Echar
- 1.Vue指令Vue提供自定义实现指令的功能, 和组件类似,可以是全局指令和局部指令,详细可以参见vue官网自定义指令一节(https://
- lambda函数是一种小的匿名函数。lambda语法lambda函数:lambda [arg1 [,arg2,...[,argn]]] :
- 在使用爬虫爬取网络数据时,如果长时间对一个网站进行抓取时可能会遇到IP被封的情况,这种情况可以使用代理更换ip来突破服务器封IP的限制。随手
- 一、OS包的作用os包中的API主要可以帮助我们使用操作系统中的文件系统、权限系统、环境变量、系统进程,以及系统信号。对于类Unix的操作系
- Python中遍历列表有以下几种方法:一、for循环遍历lists = ["m1", 1900, "m2&qu
- Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4
- yagmail 实现发邮件yagmail 可以更简单的来实现自动发邮件功能。1、安装pip install yagmail2、简单举例imp
- 【实验目的】:了解SQL语言的使用,进一步理解关系运算,巩固数据库的基础知识。【实验要求】:掌握利用Select语句进行各种查询操作:单表查
- 用python输出汉字字库问题1:假设我们知道汉字编码范围是0x4E00到0x9FA5,怎么从十六进制的编码转成人类可读的字呢?问题2:怎么
- 示例很简单,注释里也都做了说明,这里就不多废话了。<?php/*从平台获取数据库名*/$dbname = "";/
- 视觉设计是什么,人们怎么认为它的,自己又是怎么对待和理解它,它的核心价值是什么。视觉设计,冒似很艺术,跟艺术相关的职业,给大多数人的印象是做
- 有时我们不希望某个类天生就非常庞大,一次性包含许多职责。那么我们就可以使用装饰着模式。 装饰着模式可以动态地给某个对象添加一些额外的职责,从
- 1.regex-coach ——正则表达式工具2. IECookiesView——IE的cookie查看工具3.Flex Trace Pan
- JDBC是由java编程语言编写的类及接口组成,同时它为程序开发人员提供了一组用于实现对数据库访问的JDBC API,并支持SQL语言。利用
- 介绍二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元
- 1.准备工作下载mysql的最新免安装版本mysql-noinstall-5.1.53-win32.zip,解压缩到相关目录,如:d:\\
- 本文为大家分享了python实现俄罗斯方块游戏,继上一篇的改进版,供大家参考,具体内容如下1.加了方块预览部分2.加了开始按钮在公司实习抽空
- 最近在使用Python的过程中,发现网上很少提到在使用post方式时,怎么传一个数组作为参数的示例,此处根据自己的实践经验,给出相关示例:单
- 这篇文章主要介绍了Python箱型图绘制与特征值获取过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需