CSS 布局已经聊完了,但是其并不是一个独立的闭环,接下来我们将继续闲扯下其他相关的东西。

结构与布局

在浏览器渲染那块,我们已经知道了渲染树是由 DOM 树和 CSSOM 树合成的。

所以谈布局,怎么能离得开结构呢?所有的 CSS 布局都是依赖 HTML 结构的,它们是相辅相成的,秤杆不离秤砣。

image.png

关于结构的设计,可以继续阅读下面的 HTML 套路篇

逻辑属性

除了 HTML 结构之外,writing-mode 也影响 CSS 布局。默认的书写模式是先从左到右,然后从上到下来排版的。如果书写模式改变了,那么所牵扯到的 toprightbottomleft 方向就变了,为此不得不重新写一份样式来兼容不同的书写模式。

所以为了避免这种情况,CSS 引入了逻辑属性来代替这四个方向属性,这四个逻辑属性就是:block-startblock-endinline-startinline-end。甚至于横竖排书写模式的切换涉及到的 widthheigjt,也使用逻辑属性 block-sizeinline-size。如下图:

image.png

更多逻辑属性详解请参考:CSS Logical Properties and Values Level 1

响应式布局

既然是聊布局,响应式布局肯定是绕不过去的。毕竟用户体验是至高无上的,不然无人问津也就没有任何价值了。

image.png

说到底,响应式布局无非是将下面这四种技术综合起来形成的布局方式:

  • viewport
  • CSS 布局
  • media queries
  • 媒体资源(图片/视频等)

其中前两个已经在聊完了,对于 media queries,其实也没什么难度,其语法大概如下:

image.png

具体可参考 MDN 的文档:using media queries

而对于媒体资源的响应式,除了响应视窗的宽或高,以及保持宽高比的变化外,还有根据不同的几倍屏,拉取不同的图片资源。如下是几篇参考文章:

矩形之外

我们知道元素最终被解析成一个个矩形盒子,渲染在页面上。那么视觉上非矩形的形状该怎么处理呢?

在 CSS2 时代我们一般都会采用图片的形式来表达这些形形色色的非矩形。但是对于 CSS3 可使用的技术手段可就多了。

如圆角技术,transform 变形,渐变背景,SVG,clip-path,shapes,masking 等等都是值得去深入了解的。

不是结尾的结尾

虽然聊完了 CSS 布局,但这远不是结束。CSS 布局在发展,我们面临实现效果图的挑战也越来越多,没有一个万能的锤子可以搞定一切,只有从不同场景实践得出的最优解才是王道。

至此大梦已醒,山高水长两相忘。