css中paddingright失效,子元素内容超出父元素时,padding-right失效,没有留白

场景介绍

父元素内有数量不固定的子元素,当子元素宽度之和小于父元素时,子元素平均分配父元素宽度;当子元素宽度之和大于父元素时,子元素有最小宽度,滚动条显示。

1. 子元素宽度小于父元素,上下左右留有空白

eedd2660410b81e305df195679e039b6.png

2. 子元素宽度大于父元素,上下左右留有空白

1101d152bc7b208f2456b096671e47f3.png

错误实现

.box {

width: 500px;

border: 1px solid #e0e0e0;

padding: 20px;

display: flex;

overflow: auto;

box-sizing: border-box;

}

.con1 {

flex: 1;

min-width: 100px;

height: 80px;

border: 1px solid red;

}

复制代码

当子元素宽度之和大于父元素时,上下左都留有空白,右无空白

7424d067e866c57de97185e78cddc3af.png

正确实现方式

方法1:多增加一层包裹元素

/*附加样式*/

.method-one {

padding: 0;

}

.content {

flex: 1;

display: flex;

padding: 20px;

}

复制代码

方法2:after伪元素添加宽度为20的占位元素

/*附加样式*/

.method-two {

padding-right: 0;

}

.method-two::after {

content: '';

width: 20px;

flex-shrink: 0;

}

复制代码

看似简单的问题却又不简单,奥力给!!

如有不对的地方或者好的实现方式,欢迎指正哦!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Flexbox 布局,如果希望元素的宽度能够自适应纵向换行后的宽度,可以使用 JavaScript 来动态计算并设置元素的宽度。 首先,在元素的样式,需要添加 `flex-wrap: wrap`,以允许元素进行纵向换行。然后,在元素的 JavaScript 代码,可以通过遍历元素来获取每行元素的宽度,并取其的最大值作为该行的宽度。最后,将所有行的宽度相加即可得到元素的最终宽度。代码如下: ```javascript const parent = document.querySelector('.parent'); const children = parent.children; const parentPadding = parseInt(getComputedStyle(parent).paddingLeft) + parseInt(getComputedStyle(parent).paddingRight); let rowWidth = 0; let rowMaxWidth = 0; let parentWidth = 0; for (let i = 0; i < children.length; i++) { const child = children[i]; const childWidth = child.offsetWidth; if (rowWidth + childWidth > parent.offsetWidth - parentPadding) { // 换行了,将当前行的宽度加入元素的宽度 parentWidth += rowMaxWidth; rowWidth = childWidth; rowMaxWidth = childWidth; } else { rowWidth += childWidth; if (childWidth > rowMaxWidth) { rowMaxWidth = childWidth; } } } // 处理最后一行的宽度 if (rowWidth > 0) { parentWidth += rowMaxWidth; } // 设置元素的宽度 parent.style.width = parentWidth + 'px'; ``` 上面的代码,首先获取了元素元素的引用,以及元素的内边距。然后遍历元素,累加它们的宽度并判断是否换行。当换行,将当前行的宽度加入元素的宽度,并重新计算下一行的宽度。需要注意的是,在计算行宽度,需要减去元素的内边距。最后,将所有行的宽度相加即可得到元素的最终宽度,并将其设置为元素的宽度即可。 希望这个回答对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值