- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
根据W3C spec , box-sizing: border-box
应该在宽度/高度内绘制填充。这意味着 padding
不应增加该元素的宽度。
但是,我遇到了一个奇怪的情况,在一个神秘的阈值之后,填充实际上增加了宽度:
div {
display: inline-block;
width: auto;
}
input {
display: block;
width: 100%;
box-sizing: border-box;
padding: 0;
}
#a {
padding-right: 84px;
}
#b {
padding-right: 100px;
}
<div>
<span>No padding</span>
<input />
<input />
<span>Foo bar this determines the space</span>
</div>
<hr>
<div>
<span>84px of padding</span>
<input />
<input id="a" />
<span>Foo bar this determines the space</span>
</div>
<hr>
<div>
<span>100px; width expands ?!?!</span>
<input />
<input id="b" />
<span>Foo bar this determines the space</span>
</div>
点击运行代码片段并向下滚动查看问题。 <input>
的宽度s 应该是 214px,但是设置超过 84px 的 padding 开始增加宽度。为什么会发生这种情况,我该如何预防?
最佳答案
This means
padding
should not increase the width of that element.
不完全正确。如果从外部宽度减去 padding 后,剩余的内部宽度为负,它将被钳位为零,因为它不能为负。
因此,是的,添加填充可以增加框的外部宽度。
但是,您的情况很有趣,因为外部宽度的增加发生在预期之前。
发生的情况是有一个内联 block 容器,其宽度为 :auto
。这意味着它的宽度将是 shrink-to-fit/fit-content尺寸。也就是说,
min(max-content size, max(min-content size, fill-available size))
因此,它的宽度取决于内容的宽度贡献。
然后在该内联 block 中有一个输入宽度 width: 100%
。
该百分比应该相对于包含 block (内联 block )的宽度来解析,但这是一个循环定义!
因此,宽度是不确定的。在那种情况下 CSS Sizing说
For replaced elements, the min-content size and max-content size are equivalent and correspond to the appropriate dimension of the concrete object size returned by the default sizing algorithm [CSS3-IMAGES] of the element, calculated with an unconstrained specified size.
该算法返回 intrinsic width被替换的元素。
The min-content contribution and max-content contribution in each axis is the element’s specified outer size in that axis, if definite; otherwise, they are the min-content size, as specified above, plus the element’s margin/border/padding in that axis [...].
也就是说,内联 block 的宽度至少是输入的固有宽度加上它的填充。
一旦知道该宽度,就可以确定输入的百分比。
然后,让我们说
x
y
z
假设有足够的可用空间,内联 block (和输入)的宽度将为 max(x, y+z)
。
因此,如果 x >= y+z
,增加填充 z
不会影响结果宽度。但是一旦到达 x == y+z
,生成的宽度将随着填充而增加。
您可以通过使用确定的宽度而不是百分比来避免此行为,并使用 min-width
来实现所需的百分比宽度。
input {
width: 0; /* Ignore intrinsic width */
min-width: 100%; /* Instead of width */
}
div {
display: inline-block;
width: auto;
}
input {
display: block;
width: 0; /* Ignore intrinsic width */
min-width: 100%; /* Instead of width */
box-sizing: border-box;
padding: 0;
}
#a {
padding-right: 84px;
}
#b {
padding-right: 100px;
}
<div>
<span>No padding</span>
<input />
<input />
<span>Foo bar this determines the space</span>
</div>
<hr>
<div>
<span>84px of padding</span>
<input />
<input id="a" />
<span>Foo bar this determines the space</span>
</div>
<hr>
<div>
<span>100px; width expands ?!?!</span>
<input />
<input id="b" />
<span>Foo bar this determines the space</span>
</div>
关于html - 填充增加边框的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35078309/
padding:initial 比 padding:0 有什么优势吗?示例: textarea { padding: 0; } Hello, world! 最佳答案 它们的意思是一
我尝试通过按钮填充 JList,然后在先前填充的 Jlist 上使用 DoubleClick 填充 JTextField。 代码: private void extractUsedVariables
我正在尝试做 var width = ($(this).width() + $(this).css('padding-left') + $(this).css('padding-right' ));
我在导航中添加了悬停效果,遗憾的是悬停也影响了上面的文字。如何在不影响文本位置的情况下向导航添加悬停? 可悲的是,我找不到解决这个问题的方法。 HTML 模板:http://projects.help
我是 F# 初学者,下面代码中的 %-5s 和 %5s 有什么作用?我认为它提供了空间填充,但我不确定它是如何填充的? printfn "%-5s %5s" "a" "b" 当我尝试 prin
我需要选择带狗的用户(带 type 等于“狗”的宠物) var User = Waterline.Collection.extend({ identity: 'user', attribute
我一直在尝试让 Excel 在一组列上应用公式,然后将模式扩展到整个行集。 这导致了以下代码: For i = 0 To avgsheetNames.Count - 1 If Contains(CSt
随着 Flutter 2.0 的发布,FlatButton已被替换为 TextButton . 因此,填充属性不再直接可用,而是作为 ButtonStyle属性(property)。 我的问题是,我该
这似乎是一个简单的问题,但我已经尝试了一个小时,似乎无法弄清楚。 我要做的就是用 Canvas 填充 MainWindow。我找不到任何允许这样做的属性,我能想到的唯一方法是设置 Canvas.Wid
这是a website具有移动 View 。 网站宽度为 640 像素,但 iPhone 以 678 像素渲染文档。在 Android 中看起来很棒。 我添加了视口(viewport)元: 主体 C
我正在使用 GridBagLayout到(当前)显示两行。我知道这种布局对于这项任务来说太过分了,但我正在努力学习如何使用它。问题是我已将两个面板添加到两个单独的行中,并且内容周围存在巨大差距(请参见
我有以下代码已传递给我并创建多边形: var map; function initialize() { var myLatlng = new google.maps.LatLng(-36.4
我在 Jpanel 中有一些项目,然后将其推到顶部并用作基本搜索引擎的工具栏。我遇到一个问题,因为没有足够的空间,所以我的最后一个组合框没有显示。但是,左侧有很多空白空间,我需要移动所有内容来填充 J
我创建了带有阈值的二进制图像。如下图所示如何改变白色形状的颜色以使其可索引? 到目前为止,这是我的代码: void threshold() { cv::Mat src_8uc3_img = c
我有一个 JTable,我想知道是否有更好的方法来填充它,这是我的代码: //Metodo para llenar un jtable con datos de la base public stat
我想要做的是裁剪一个卷以删除所有不相关的数据。例如,假设我有一个 100x100x100 的体积,其中填充了 0,但其中的 50x50x50 体积则填充了 1。如何从原始体积中获得裁剪后的 50x50
因此,我正在创建一种对一组数字进行洗牌的方法,其想法是创建这些数字的总体。因此,我创建了一个循环,对数字进行洗牌,然后将其添加到数组列表中,但是经过一些调试语句后,我发现它确实对数字进行洗牌,但只将最
假设我有这两个类: public class A where T : IEntityWithID, new() { private static EntityInfo entityInfo =
我正在尝试添加用户输入的两个大整数作为字符串。当两个输入字符串的长度不同时,我尝试用零填充较短的数字,但它不起作用。因此,如果我输入 456 和 7,它会给出 3,前面有一些随机字符。感谢您的任何建议
这是我将内容打印到表格 View 的代码 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: Index
我是一名优秀的程序员,十分优秀!