Skip to content
文章目录

width值详解

遇到的问题

在做菜单组件时,遇到了问题,父容器宽度没有被子元素的内容撑开.

以下图的 html 结构说明:li 内容宽度很宽时,由于设置了white-space: nowrap,变成了禁止换行,由于禁止换行,导致宽度超出了蓝色的 div 的宽度,由于 li 宽度超出了蓝色 div 宽度,所以出现了横向滚动条,滚动条出来了,于是拖动滚动条,发现红框没有包住绿色的 li,即绿色 li 冲出了红色框的边界

出现问题的 html 结构

auto,100%,max-content,min-content,fit-content 有什么区别?

auto

auto 代表自身 contentWidth+paddingWidth+borderWidth+marginWidth=父 contentWidth,如果不显示指定 width,那元素的宽度就是auto。注意:display:block的元素width:auto的效果与width:100%的最终效果和特性是一致的

其中当自身 box-sizing:content-box(也是默认值)时,width 值为 contentWidth,当 box-sizing:border-box(IE 盒模型,IE8 及以下只支持 IE 盒模型)时,width 值为 contentWidth+paddingWidth+borderWidth。

100%

100%代表自身width = 父contentWidth * 100%

其中当自身 box-sizing:content-box(也是默认值)时,自身 Width 的含义为自身 contentWidth,当 box-sizing:border-box(IE 盒模型,IE8 及以下只支持 IE 盒模型)时,自身 Width 的含义为自身 contentWidth+paddingWidth+borderWidth。(在 IE8 及以下的浏览器中只支持 IE 盒模型,在 IE8+及其他主流浏览器中,通过 CSS 新增的 box-sizing 属性可以设置浏览器的盒模型。box-sizing 属性的默认值是 content-box,即 W3C 标准盒模型;而将 box-sizing 值设置为 border-box 时,则会更改为 IE 盒模型)

上面介绍的特性貌似可以解决大部分问题了,为啥还要介绍下面的? 因为多一套方案多一条路,同时上面的问题,通过下面的属性值解决起来更简单

max-conten

内容有多宽,盒子就有多宽,不考虑父元素有多宽

min-conten

装下单个最大内容的最小宽度

fit-content

在不超过父级盒子宽度的情况下,尽量撑开盒子满足自己的需求。

参考资料

CSS width 中的 max-content,min-content,fit-content 的区别

父元素随子元素宽度自动撑开问题, 父元素 overflow: auto; 有滚动条时

子元素自动撑开父元素空间

元素宽度由里面内容决定(宽度由子元素内容撑开)解决方法

width:100%和 width:auto 的区别

width: max-content 的理解和使用

扩展阅读

CSS IFC 总结

CSS 深入理解 vertical-align 和 line-height 的基友关系

CSS-父元素宽度自适应子元素宽度之和

深入理解子元素的 width 与父元素的 width 关系

input 设置 width:100%;时实际宽高溢出父元素容器范围

使用 min-width 解决容器被撑大的问题