某些流体设计,尤其是那些涉及%-width iFrames的流体设计,似乎会在Chrome中造成一些奇怪的舍入类型错误(我已经获得了第21版)。
This Fiddle演示了这个问题。将边框设置为整数像素值,当您要求它们时返回的值是浮点数略小于预期值。
尝试exact same code in CodePen并不会产生相同的结果,大概是因为iFrame及其周围的其他样式设置方式不同。
(我也看到了基本宽度和高度属性的这种行为,虽然我无法在jsFiddle中复制问题的这一部分。)
这在Firefox或IE8中似乎不是问题。
有关具体是什么导致这种奇怪行为的想法,以及我如何解决它以获得真正的价值?
情节变浓。为了解决这个问题,我发现10px以上的值似乎不受此问题的影响。
此外,根据@ GionaF的评论,它似乎在Chrome 22中正常运行。
答案 0 :(得分:13)
我目前无法在Chrome中重现此行为,但此行为很可能与Subpixel Rendering有关。实质上,Webkit将使用整数数学进行计算,以避免浮点不精确。
目前似乎border
不使用子像素渲染,这可以解释为什么在新的Chrome版本中无法看到该问题。
答案 1 :(得分:11)
要重现您的问题,我必须更改Chrome的缩放级别。将缩放级别更改回100%可以修复它。它似乎是一个错误,计算出的边框宽度始终小于定义的边框宽度,放大或缩小!
当缩放级别为110%时,10px边框的值为10,但在125%时,它与3px边框的问题相同。
编辑:firefox具有相同的行为!
答案 2 :(得分:4)
为所有元素设置box-sizing到border-box是否有帮助?这将改变计算框模型的方式,其中边框和填充不会影响宽度。
*,
*:before,
*:after {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box; }
答案 3 :(得分:0)
我还遇到了input
和其他元素中的边框问题。花了一个小时后,我发现意外的原因导致了这个问题。 Bootstrap css使用normalize css
,以下代码导致此类问题:
hr {
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
要解决此问题,我会覆盖style.css中的css:
hr {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
hr
规则实际上与input
无关,但它有效。这实际上是意想不到的行为,尝试并且会起作用。
答案 4 :(得分:0)
我刚刚有一个transform: translate()
引起的铬(铬76)的例子。
<div class='container'>
<div class="box-triangle"></div>
</div>
.box-triangle
有一个::after
元素,其形状为border triangle,该元素绝对位于.box-triangle
的顶部(在填充之后)。
如果我设置了在.container
上加上%的转换,并且所得到的百分比不是整数,则.box-triangle
的边框将在其::after
元素下稍微显示。 br />
解决方案:使用px转换而不是%,或确保容器尺寸的百分比为整数
Edit :如果将转换直接应用于.box-triangle
(请参见代码段中的最后一个示例)
* {
box-sizing: border-box;
}
body {
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-around;
min-height: 100vh;
width: 100%;
background-color: #e55039;
font-size: 16px;
}
.box-triangle {
position: relative;
margin: 0;
color: #f7f1e3;
background-color: #227093;
font-size: 20px;
margin: 0;
padding: 1em;
border: 5px solid white;
}
.box-triangle::after {
content: "";
position: absolute;
height: 0;
width: 0;
margin: 0;
border: solid transparent;
left: 50%;
bottom: 100%;
border-bottom-color: #227093;
border-width: 1.5em;
-webkit-transform: translate(-50%, 0);
transform: translate(-50%, 0);
}
[class^='container'] {
margin: 20px;
display: flex;
justify-content: center;
align-items: center;
}
.container-1 {
position: relative;
height: 10.5rem;
width: 20rem;
/* transform: translate(1%, 1%); */
}
.container-2 {
position: relative;
height: 10.5rem;
width: 20rem;
transform: translate(0, 5%);
}
.container-3 {
position: relative;
height: 10rem;
width: 20rem;
transform: translate(0, 5%);
}
.container-4 {
position: relative;
height: 168px;
width: 320px;
transform: translate(0, 5%);
}
.container-5 {
position: relative;
height: 168px;
width: 320px;
transform: translate(0, 8px);
}
.noContainer {
position: relative;
height: 168px;
width: 320px;
transform: translate(0, 5%);
}
<div class='container-1'>
<div class="box-triangle">no translate + container height: 10.5 rem (168px)</div>
</div>
<div class='container-2'>
<div class="box-triangle">translate(0, 5%) + container height: 10.5 rem (168px)</div>
</div>
<div class='container-3'>
<div class="box-triangle">translate(0, 5%) + container height: 10rem (160px)</div>
</div>
<div class='container-4'>
<div class="box-triangle">translate(0, 5%) + container height: 168px</div>
</div>
<div class='container-5'>
<div class="box-triangle">translate(0, 8px) + container height: 168px</div>
</div>
<div class="box-triangle noContainer">No container + translate(0, 5%) + height: 168px</div>