虽然我理论上了解CSS盒模型,如填充,边框,外边距,但我的理解仅限于这些单独的部分。
我经常对浏览器实际呈现的方式感到困惑。例如,像填充在边框内一样,但外边距是如何计算的? 它是相对于盒子边框还是相对于屏幕计算的? 如果我们同时给出左右外边距,哪个优先级更高? 如果有宽度以及左/右外边距,实际呈现过程是怎样的,比如先制作盒子的宽度,然后是填充,还是其他什么?
添加float属性到这个带有外边距的盒子会有什么不同?
虽然我理论上了解CSS盒模型,如填充,边框,外边距,但我的理解仅限于这些单独的部分。
我经常对浏览器实际呈现的方式感到困惑。例如,像填充在边框内一样,但外边距是如何计算的? 它是相对于盒子边框还是相对于屏幕计算的? 如果我们同时给出左右外边距,哪个优先级更高? 如果有宽度以及左/右外边距,实际呈现过程是怎样的,比如先制作盒子的宽度,然后是填充,还是其他什么?
添加float属性到这个带有外边距的盒子会有什么不同?
这个盒子由4个尺寸组成,从外到内依次为:
border:
或 border-width:
指定。width:
或 max-width:
中指定的固定宽度而改变。下面是一张示意图:
浮动元素会考虑margin,因此如果你有如下代码:
#element { margin-left: 100px; float: left; }
这将使其向左浮动,但会从左侧保留100px的边距。
"例如,像填充在边框内部一样,但是边距如何计算?"
请研究:http://www.w3.org/TR/css3-box/#margins
"这是相对于盒子边框还是相对于屏幕?"
边距的计算与边框和屏幕无关。浏览器会单独计算边距的值,然后决定如何应用(呈现)它。
如果我们同时给左右两个边距,哪一个会优先生效?
这里有一个算法:http://www.w3.org/TR/css3-box/#blockwidth
你能给出一个具体的例子吗?
如果有宽度以及左/右边距,实际渲染会如何进行?是先确定盒子的宽度,然后再添加填充吗?还是其他的方式?
渲染几乎是瞬间完成的,所以重要的是最终结果,而不是浏览器渲染元素属性的顺序。
“在这个带有margin的盒子中加入float属性会有什么区别呢?”
请阅读: http://www.w3.org/TR/css3-box/#floating
边距的使用值等于计算出的值,但是任何计算为'auto'的边距的使用值为'0'。