width: auto
的理解是宽度被设置为内容的宽度。现在我发现它实际上会占据父元素的全部宽度。请问有人可以描述一下它们之间的区别吗?
宽度自适应
一个像div或p这样的块级元素的初始宽度为auto。这使其扩展以占用其包含块中所有可用的水平空间。如果它具有任何水平填充或边框,则它们的宽度不会添加到元素的总宽度中。
宽度100%
另一方面,如果指定width:100%,则元素的总宽度将是其包含块的100%加上任何水平边距、填充和边框(除非使用box-sizing:border-box,此时只有边距会添加到100%来更改总宽度的计算方式)。这可能是您想要的,但很可能不是。
可以通过以下图片来形象化区别:
width: auto
дёєд»Ђд№€дјљжњ‰иї™з§ЌиЎЊдёєзљ„дєєпјљhttps://dev59.com/questions/9ofca4cB1Zd3GeqPk5dK#28354270 - Hashem Qolamiauto
和 fill-available
是一样的。 - jiggunjerwidth: auto;
会尽可能保持元素宽度与其父容器相同,当外边距、内边距或边框增加时。
width: 100%;
将使元素的宽度与父容器一样宽。将忽略父元素大小而向元素的尺寸添加额外空间。这通常会引起问题。
宽度100%: 此设置将使内容宽度为100%。边距、边框和内边距会被添加到此宽度中,如果有任何一个超出了元素的大小,它将溢出。
宽度自动: 此设置将使元素适应可用空间,包括边距、边框和内边距。调整边距+内边距+边框后剩余的空间将成为可用的宽度/高度。
宽度100% + box-sizing: border-box: 此设置也将使元素适应可用空间,包括边框和内边距(但边距可能会使其溢出容器)。
这篇文章涉及到外边距(margin)和边框(border)。如果你使用 width: auto
,然后添加上边框(border),你的div元素不会比其容器更大。但是,如果你使用width: 100%
加上一些边框(border),元素的宽度将是100%+ 边框(border)或外边距(margin)。了解更多信息,请参见这里。
http://www.456bereastreet.com/archive/201112/the_difference_between_widthauto_and_width100/
像div或p这样的块级元素的初始宽度为自动。
使用width:auto可以撤消显式指定的宽度。
如果您指定了width:100%,则该元素的总宽度将是其包含块的100%加上任何水平边距、填充和边框。
因此,下次您发现自己将块级元素的宽度设置为100%以使其占用所有可用宽度时,请考虑是否真正需要将其设置为auto。
width:auto;
宽度永远不会超过父元素的总宽度。最大宽度是其父级宽度。即使我们添加边框、填充和外边距,元素本身的内容也会变小,以为边框、填充和外边距腾出空间。如果边框+填充+外边距所需的空间大于父元素的总宽度,则内容的宽度将变为零。
当我们说
width:100%;
元素内容的宽度将变为父元素的100%,从现在开始,如果我们添加边框、内边距或外边距,则会导致子元素超出父元素的宽度并且开始溢出父元素。
关于元素的定位,宽度应该设置为100%,不是相对于父元素,而是相对于最近的已定位元素。
如果它们都是静态定位的,则是最近的父元素。
在CSS中使用width:auto; + display:inline-block;可以产生很棒的效果。