当前位置: 首页 > Web前端 > HTML5

css-width-height

时间:2023-04-06 00:08:20 HTML5

本文主要是对《CSS世界》3.2节width/height作用的具体细节进行了抽取和总结。更多信息可以在《CSS世界》找到。1.隐藏宽度:auto一般情况下,如果我们不设置宽度,默认值为auto。根据不同的要素,表现出以下特点:充分利用可用空间。

等块级元素的宽度默认为父容器的100%。(英文名称:fill-available)收缩和包裹。典型代表有浮动、绝对定位、行内块元素、表格元素。(英文名称:shrink-fit)收缩到最小。它最有可能出现在表格布局为自动的表格中。超出容器限制。通常,当父元素的宽度固定时,子元素的宽度不会超过父元素。除非有明确的宽度相关设置,比如连续的特别长的英文单词,或者内联元素设置为white-space:nowrap。在css世界中,盒子分为“外部盒子”和“内部盒子”。同样,尺寸也分为“外尺寸”和“内尺寸”。其中,“外部尺寸”是指尺寸由外部元素决定,“内部尺寸”是指尺寸由内部元素决定。1.外形尺寸和流体特性当我们将足量的水倒入容器中时,水会均匀地覆盖整个容器。这就是“流”的概念。页面上放一个块级元素,宽度自然会填满容器,所以没必要设置width:100%。例子:两个子元素都有margin和padding,前者width:auto,完全依赖流特性,后者width:100%,得到的尺寸会超过父容器。默认情况下,绝对定位元素的宽度由其内部大小决定。特殊情况下,当左/右相反方向属性值同时存在时,其宽度是相对于最近的具有定位特性的祖先元素计算的。2.内部尺寸和流体特性如果一个元素内部没有内容,宽度为0,则表示应用了内部尺寸,主要体现在wrapping上,即包裹性和适配性。所谓适应性,就是元素的大小由内部大小决定,但总是小于父容器的大小。换句话说,内部子元素似乎有一个最大宽度:“父容器宽度”。按钮是一个很好的例子。例子:有这样一个需求,当文字少的时候要居中显示,文字多的时候左对齐。这时候就可以使用这个包来实现了。{{text}}

.content{width:200px;高度:100px;文本对齐:居中;/*main*/background-color:#f0f3f7;}.text{display:inline-block;text-align:left;}二、宽度值的作用这里简单回顾一下盒模型的四层。从内到外分别是content-box、padding-box、border-box和transparentmargin-box。默认情况下,宽度应用于内容框。当我们在布局时添加padding和border时,元素的宽高会变大。比如我们从设计稿中得到一个width:200px,padding:10px,border:10px的元素,最后需要通过width-paddingLeft-paddingRight-borderRight-borderRight计算content-width。这样就太麻烦了。因此CSS提供了border-box模型来方便我们的开发。其实box-sizing:border-box是改变width对象的。事实证明,宽度只适用于内容框。使用border-box后,width=padding+border+content。3.无效高度:100%高度和宽度的一个明显区别是对百分比单位的支持。对于width属性,即使它的父元素是width:auto,也可以支持它的百分比值。但是对于height的百分比属性,如果它的父元素的高度是auto,那么只要子元素在文档流中(比如float,绝对定位可以让元素脱离文档流),它的百分比价值是完全没有用的。
.height-box{background-color:#6096cc;}.height-item{高度:40%;背景色:#98e9f1;}为什么会这样?答案在规范中给出。原文描述如下:如果没有显式指定包含块的高度,且元素没有绝对定位,则计算值为auto。即子元素的100%*auto=NaN,所以计算结果无效。所以,非绝对定位的元素需要使用height:100%,需要不断给parent和parent的parent加上height:具体值才能生效。那么为什么可以支持宽度呢?因为包含块的宽度取决于元素的宽度,所以它的行为是“未定义的”,即不同的浏览器可以有不同的特性。好在大家一起想想,最终的布局效果在每个浏览器中都是不一样的。以下是一致的。它是根据包含块的实际计算值以百分比计算的基数。4.有效高度:100%如果你想让height:100%有效,上面的规范已经给出了答案,也就是下面两种方法:设置一个固定的高度,比如设置height:100px,或者a百分比,高度:100%。使用绝对定位。甚至具有height:auto的祖先元素也有计算值。需要注意的是,绝对定位的宽高百分比是相对于padding-box计算的,而非绝对定位的元素是相对于content-box计算的。auto与子元素相关,100%与父元素相关,无特殊情况最好不要使用固定值,不利于响应式开发。