CSS形而上学:为什么页面垂直对齐如此困难?

时间:2010-10-14 08:01:03

标签: html css theory vertical-alignment

相对于页面,CSS中的水平对齐很容易 - margin:0 auto可以在很长一段时间内获取,而text-align:center则可以用于其他一些情况。

我向大师提出的问题不是如何垂直对齐,而是为什么这么难?为什么没有margin:auto 0?我的意思是,从编程的角度来看。

从理论上讲,似乎相同的算法适用于这两种类型的居中。

2 个答案:

答案 0 :(得分:18)

好问题我不知道,但我怀疑问题的根源在于HTML,因此它的渲染引擎最初用于文档语义而不是布局/打印语义。 CSS非常擅长描述段落,标题和各种文档问题,而且当涉及到每个人现在都想要他们的网站的大型DTP布局任务时,CSS非常弱。

简而言之:我认为问题在于HTML的任务是针对不适合的事情。令人惊讶的是。

答案 1 :(得分:4)

从概念上讲,CSS规则按照它们在HTML中出现的顺序应用于文档的元素,即,在DOM树的预先遍历遍历中。从历史上看,这样可以在加载文档时应用CSS,但即使使用动态HTML和动态CSS,只需一次通过即可应用CSS。

这就是为什么CSS没有选择器用于" A然后是B"或者"包含B"的A,而可以说" A之前是B"或者"包含在B"中的A,因为在后一种情况下,A在预先遍历遍历中位于B之前。

垂直居中很困难,因为在处理子元素的CSS(要居中的元素)时,父元素和子元素的高度(计算子元素的顶部偏移所需的两个值)不知道,因为它们都依赖于尚未处理的元素。

绝对定位克服了对父元素高度的依赖:top: 50%。这有效地推迟了垂直偏移的计算,直到父元素的高度已知。

同样,CSS3转换可以解释孩子的身高:transform: translateY(-50%)。在CSS3之前,通常使用否定margin-top,但这需要在子元素上设置固定高度。