上文中我们讲述了在一个星球上发生的有关overflow:hidden的故事。这次,我们再欣赏下她另一个迷人之处。其实,关键也不是她啦。而是由于她会引起BFC(Block Formatting Context)。BFC又是什么?什么情况会创建BFC?它有什么用?其实在写代码时经常会遇到。

什么是BFC

BFC(Block Formatting Context),简单讲,它是提供了一个独立布局的环境,每个BFC都遵守同一套布局规则。例如,在同一个BFC内,盒子会一个挨着一个的排,相邻盒子的间距是由margin决定且垂直方向的margin会重叠。而float和clear float也只对同一个BFC内的元素有效。

什么情况产生BFC

W3C标准中这样描述:

Floats, absolutely positioned elements, block containers (such as inline-blocks, table-cells, and table-captions) that are not block boxes, and block boxes with ‘overflow’ other than ‘visible’ (except when that value has been propagated to the viewport) establish new block formatting contexts for their contents.

非块级盒子的浮动元素、绝对定位元素及块级容器(比如inline-blocks,table-cells和table-captions),以及overflow属性是visible之外任意值的块级盒子,都会创建了一个BFC。即当元素CSS属性设置了下列之一时,即可创建一个BFC:

  • float:left|right
  • position:absolute|fixed
  • display: table-cell|table-caption|inline-block
  • overflow: hidden|scroll|auto

查看更多

overflow:hidden真的失效了吗

项目中常常有同学遇到这样的问题,现象是给元素设置了overflow:hidden,但超出容器的部分并没有被隐藏,难道是设置的hidden失效了吗?
其实看似不合理的现象背后都会有其合理的解释。

我们知道,overflow属性值有这几种:
visible:声明内容不会被剪裁。比如内容可能被渲染到容器外面。
hidden:声明内容将被剪裁,并且也甭想使用滚动条来查看剪裁掉的内容。
scroll:声明内容将被剪裁,但有可能出现滚动条来查看被剪裁掉的内容。滚动条出现的位置在inner border adge和outer padding adge之间。
auto:声明决策将依赖于客户端,优先使用scroll。

W3C标准中指明:
通常一个盒子的内容是被限制在盒子边界之内的。但有时也会产生溢出,即部分或全部内容跑到盒子边界之外。溢出将在满足下列条件之一时出现:
1. 一个不换行的行元素宽度超出了容器盒子宽度。
2. 一个宽度固定的块元素放在了比它窄的容器盒子内。
3. 一个元素的高度超出了容器盒子的高度。
4. 一个子孙元素,由负边距值引起的部分内容在盒子外部。
5. text-indent属性引起的行内元素在盒子的左右边界外。
6. 一个绝对定位的子孙元素,部分内容在盒子外。但超出的部分不是总会被剪裁。子孙元素的内容就不会被子孙元素和其包含块之间的祖先元素的overflow的设置所剪裁。

当溢出发生时,overflow属性约定了容器盒子是否剪裁掉超出其内边界的部分,并且决定是否出现滚动条来访问被剪裁掉的内容。它会影响到元素所有内容的剪裁,但有个例外情况,即上面第6条所提到的:元素的子孙元素的包含块(Containing blocks)是整个视窗(viewport)或是该元素的祖先元素,内容将不会被剪裁。包含块是什么呢?简单的说,就是可以决定一个元素位置和大小的块。通常一个元素的包含块由离它最近的块级祖先元素的内容边界决定。但当元素被设置成绝对定位时,包含块由最近的position不是static的祖先元素决定。

查看更多

登录图的趣味设计

登录图趣味设计

阿里巴巴登录页面左侧一直都会有个banner,这个图片因为位置、环境的特殊性,跟我们平常做的首页banner的设计思路会有所不同。首页banner更注重的是信息传达,登录左侧的这个banner偏重情感化设计,情感化设计除了节日、事件的氛围之后,还有就是趣味性。

趣味设计是一个比较大的概念,在这里我狭隘的把趣味设计分成两个部分来介绍,1.主体元素的创意;2.背景元素的处理。每次在做这个banner的时候,都非常的纠结,当然最纠结的地方就是创意,虽然创意是给非常主观的东西,但是我们还是可以通过对一些元素处理找到创意点。

A.线描——来自现实场景,超越现实场景的表现力

线描的方式是我比较常用的形式,这种形式相对简单,很容易上手,效果也比较有张力。先找一个相对合适的场景,对着现实的场景勾出想要的线条,再对线条进行粗细、颜色的调整。举个例子如下:

1.如果我们需要一个仓库的线描场景,我们先找到一个满足我们需求的仓库场景,对场景进行线描绘制。

线描场景

查看更多

此文原载于:http://blog.allenm.me/2012/12/whats-sourcemap/

今天在方凳会上做了一次 SourceMap 的分享。现在在博客上分享出来给大家。

简介:

什么是 SourceMap 呢?

在这个年代,对于前端开发来说,很少有用户浏览器执行的代码和我们写的 code 完全相同的情况。因为我们的代码一般要经过压缩、合并。另外现在还有 sass, less, stylus, coffscript, typescript 等等预编译语言。那么在这些情况下我们如何进行调试呢?SourceMap 就是为了解决这个问题而生的,虽然它还不够成熟,支持它的工具还不够多,但是我们能从它身上看到未来。

欲了解详情,请观看下面的 slide 吧。(有疑问或者建议可以在下面评论交流,或者微博 @allenm 进行交流)

sourcemap.001
查看更多