width: 100%,padding与 box-sizing

部署运行你感兴趣的模型镜像

=在W3School里面的CSS box-sizing属性中,我们可以看到box-sizing的定义如下:

这里写图片描述

我们通过例子来详细地讲诉一下width:100%和padding结合起来使用可能会带来的问题及如何用box-sizing解决。
我们新建两个div, 让第二个嵌在第一个里面。

HTML代码:

<div class="firstDiv" sand>
  <div class="secondDiv">
    div2
  </div>
</div>

CSS代码:

.firstDiv
{
  width: 100px;
  height: 100px;
  background-color: red;
}

.secondDiv
{
  width: 100%;
  height: 80px; 
  background-color: yellow;
}

效果图:
这里写图片描述

接下来我们想让第二个div中的文字的左边空出20px, 即设置padding-left: 20px.

CSS代码:

.secondDiv
{
  width: 100%;
  padding-left: 20px;
  height: 80px;
  background-color: yellow;
}

效果图:
这里写图片描述

我们可以看到,设置了padding之后,第二个div的宽度也随着变化了,但是我们设置的宽度明明是100%,即应该和第一个div的宽度是一样的,这是为什么呢?这是因为我们没有设置box-sizing的值,所以它用的是默认值content-box。content-box的定义为宽度和高度分别应用到元素的内容框。所以在刚才的例子中,width:100%即100px是内容框的宽度,div实际的宽度应该加上刚才设置的padding-left的值20px, 总共为120px。正如我们看到的,第二个div的宽度比第一个还要大。

那我们怎样才能既加上padding, 又不增加宽度呢?一种方法是将div的宽度从100%改为80px,第二种就是设置box-sizing为border-box。border-box决定了为元素设定的宽度和高度是元素的边框盒的宽度和高度, 即为元素指定的任何内边距padding和边框border都将在已设定的宽度和高度内进行绘制。而第二种是比较常用的方法。

CSS代码:

.secondDiv
{
  width: 100%;
  padding-left: 20px;
  box-sizing: border-box;
  -moz-box-sizing: border-box; /* Firefox */
  -webkit-box-sizing: border-box; /* Safari */
  height: 80px;
  background-color: yellow;
}

效果图:
这里写图片描述

为了适应各个浏览器的需求,我们需要额外设置-moz-box-sizing和-webkit-box-sizing的值也为border-box。

自己动手试试吧: box-sizing Example on JSFiddle

您可能感兴趣的与本文相关的镜像

HunyuanVideo-Foley

HunyuanVideo-Foley

语音合成

HunyuanVideo-Foley是由腾讯混元2025年8月28日宣布开源端到端视频音效生成模型,用户只需输入视频和文字,就能为视频匹配电影级音效

明白了!你现在遇到的问题是:**表格列出现了重叠**,虽然可以水平滚动,但布局不整齐。 ### 🎯 问题分析: 1. `.table-cell` 设置了 `flex: 0 0 160px`,但被其他样式干扰或未正确生效。 2. `.table-row` 使用了 `flex`,但子元素(`.table-cell`)未设置 `flex-shrink: 0`,导致压缩。 3. 可能使用了 `white-space: nowrap` 或 `overflow: hidden` 导致内容重叠。 --- ### ✅ 修改建议(直接复制粘贴即可) #### ✅ 更新后的 CSS 样式: ```css .table-scroll-container { overflow-x: auto; max-width: 100%; -webkit-overflow-scrolling: touch; border: 1px solid #ebeef5; border-top: none; } .table-row-wrapper { display: inline-flex; min-width: 1400px; flex-shrink: 0; } .table-row { display: flex; min-width: 1400px; flex-shrink: 0; } .table-cell { flex: 0 0 160px; /* 固定宽度 */ max-width: 160px; text-align: center; padding: 8px; box-sizing: border-box; border-right: 1px solid #ebeef5; border-bottom: 1px solid #ebeef5; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } ``` --- ### ✅ 修改说明: | 样式 | 作用 | |------|------| | `flex: 0 0 160px` | 固定每列宽度,防止压缩 | | `max-width: 160px` | 防止内容撑大列宽 | | `overflow: hidden` + `text-overflow: ellipsis` | 防止内容溢出,超出显示省略号 | | `white-space: nowrap` | 文字不换行,保持整齐 | | `display: inline-flex` + `flex-shrink: 0` | 确保 `.table-row-wrapper` 和 `.table-row` 不被压缩 | | `box-sizing: border-box` | 保证 `padding` 不撑大宽度 | --- ### ✅ 如果你使用了 `el-select` 或 `el-input`,建议加这个防止撑大列宽: ```css .table-cell .el-input, .table-cell .el-select { width: 100%; box-sizing: border-box; } ``` --- ### ✅ 完整推荐样式(直接复制替换你的 CSS): ```css .table-scroll-container { overflow-x: auto; max-width: 100%; -webkit-overflow-scrolling: touch; border: 1px solid #ebeef5; border-top: none; } .table-row-wrapper { display: inline-flex; min-width: 1400px; flex-shrink: 0; } .table-row { display: flex; min-width: 1400px; flex-shrink: 0; } .table-cell { flex: 0 0 160px; max-width: 160px; text-align: center; padding: 8px; box-sizing: border-box; border-right: 1px solid #ebeef5; border-bottom: 1px solid #ebeef5; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } /* 防止 el-input/el-select 撑大列宽 */ .table-cell .el-input, .table-cell .el-select { width: 100%; box-sizing: border-box; } ``` --- ### ✅ 检查建议(使用浏览器开发者工具): 1. **检查 `.table-cell` 是否被压缩** 2. **检查 `el-input` 和 `el-select` 是否宽度超过 100%** 3. **检查 `flex-shrink` 是否为 `0`** 4. **检查 `white-space: nowrap` 是否生效** --- ### ✅ 相关问题 ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值