css系统总结归纳我爱编程

CSS布局小结

2017-01-04  本文已影响205人  Samhanx

前言

因为要在团队内作一次技术分享,想了几个题目,最后还是决定系统总结一下我在CSS布局这方面的知识。一是这个题目不算艰深,比较符合目前我的水平,同时也方便团队的设计和其他偶尔帮忙切切页面的小伙伴理解;二是从入行以后学得就比较杂乱,长此以往也不是好事,今年希望好好总结沉淀一下学到东西;三是刚刚过去的2016年正好是CSS正式诞生20周年(1996年12月17日,CSS第一版标准正式发布),我的首次技术分享取这个题目也有纪念意义。另外,准备分享的那天同时穿上第三届CSS CONF送的T恤,嘿嘿。


先来说说过去和现在的常见布局吧

关于initial containing block :The containing block in which the root element lives is a rectangle called the initial containing block. For continuous media, it has the dimensions of the viewport and is anchored at the canvas origin...
</blockquote>
简而言之,绝对定位的参照元素是其最近的具有定位属性为absolute/relative/fixed三者之一的祖先元素的包含块来定位;如果没有,则追溯到根元素的包含块,即初始包含块(这里不是根元素html,我们可以给html设一个宽高进行实验,发现定位的元素还是相对于整个窗口而言的),这个初始包含块可以简单理解为视窗形成的矩形,其原点是左上角(canvas origin)。再啰嗦一点关于相对定位和绝对定位的区别,相对定位的元素依然会进入文档流,会保留它在文档流中的占位,而绝对定位的元素则会脱离文档流(这也是为什么我们通常选择给父元素设置relative来作为子元素绝对定位的参照,因为不给它任何偏移量的话它依然还是原来在文档流中的位置)。

至于盒子模型,则主要是利用内外边距marginpadding来进行局部调整布局了。需要注意的就是盒模型宽高的计算,还有IE和非IE浏览器下盒模型渲染的差异,以及相邻元素margin重合的情况,当然也记得使用负边距这个脑洞(虽然似乎官方并不推荐使用负值,border-radius负值渲染为内向圆角的提案就曾被驳回了=_=)。

最终实现的效果

承前启后的弹性盒子display: flex

对于这个属性,前后出现过几次候选标准,所以网上搜索的时候往往会出来很多不同的属性名称,可能会让人感到困惑,同样它的兼容性问题在现在仍然是一个很烦人的事,明明这么方便的属性却不能痛快地使用。弹性盒子的教程我推荐两个,看过之后其实已经完全可以上手用起来了,今后如果我有更多的使用心得也会再做笔记:

<a href="http://zh.learnlayout.com/flexbox.html">这个网站除了flexbox也有讲其他布局的基础知识,非常推荐</a>
<a href="http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html">阮一峰flex布局教程:语法篇</a>
<a href="http://www.ruanyifeng.com/blog/2015/07/flex-examples.html">阮一峰flex布局教程:实战篇</a>
阮一峰的教程已经将这个属性讲得足够透彻了,实战部分也为我们提供不少布局案例的flex实现方法,这里我也就不再赘述。关键就是理解主轴和纵轴的概念。

即将支持的新标准 CSS3 Grid Layout

display: grid这个属性,我是在第三届中国CSS CONF上通过大漠老师的介绍了解到的,目前已经成为候选标准,而据大会主持人透露,似乎今年(2017)各大主流浏览器就将全面支持该属性,更可喜的是这个标准是由微软提出的,而且早已率先在IE10实现了。( ⊙o⊙ )

<a href="http://www.w3cplus.com/blog/tags/355.html">W3C网站上</a>有对于该属性详细的介绍和教程,虽然目前几乎不太可能用于实际的项目,但还是列在这里也是希望能够对这个新的技术方案保持关注。

就我在大会上看到的演示的直观感受来说,这个属性的强大完全不亚于display: flex,并且作为网格布局,比flexbox更适合作为页面大结构的布局方案,而flexbox更适合盒子内容的排版,相信正如大漠老师所看好的,今后二者的结合或许会成为我们主流的布局手段。

上一篇 下一篇

猜你喜欢

热点阅读