如您所知,问题源于浏览器之间的子像素演算的不同方法
例如,在Chrome中,边框可以具有小数尺寸,但边距处理不同(作为整数).
我没有Chrome团队提供有关它的文档,但它可以在开发工具中看到:
AFAIK,没有办法改变这种状况.
相反,您可以将按钮中边距的使用转移到边框.
由于您需要为输入的1px边框获取空间,请在按钮中执行相同操作,设置1px边框(而不是边距),并将其设置为透明.
剩下的技巧是将background-clip属性设置为padding框,这样透明度就不会受到背景的影响
Chrome中还有另一个错误,当浏览器缩放时,以这种精度级别表示的填充不可靠.我在片段中更改了此内容.
由于我们使用边框按钮来获取尺寸,我们可以使用嵌入阴影来设置边框样式.
* {
margin: 0; padding: 0; box-sizing: border-box;
}
button, input, wrapper {
display: inline-block; border-radius: 3px;
}
.wrapper {
position: relative;
width: 60%;
margin: 1em;
background-color: #ccc;
}
input {
border: 1px solid red;
width: 100%;
background-color: limegreen;
line-height: 3em;
/* padding: 0.75em; */
padding: 10px;
}
button {
position: absolute;
right: 0;
top: 0;
bottom: 0;
border: 1px solid transparent;
width: 7em;
margin: 0px;
background-clip: padding-box;
box-shadow: inset 0px 0px 0px 2px black;
}
另一个例子,按钮有边框.但是我们需要一个包装器才能使尺寸正常.
* {
margin: 0; padding: 0; box-sizing: border-box;
}
button, input, wrapper {
display: inline-block; border-radius: 3px;
}
.wrapper {
position: relative;
width: 60%;
margin: 1em;
background-color: #ccc;
}
input {
border: 1px solid red;
width: 100%;
background-color: limegreen;
line-height: 3em;
/* padding: 0.75em; */
padding: 10px;
}
.buttonwrap {
position: absolute;
right: 0;
top: 0;
bottom: 0;
border: 1px solid transparent;
width: 7em;
margin: 0px;
background-clip: padding-box;
}
button {
position: absolute;
right: 0px;
top: 0;
bottom: 0;
width: 100%;
border: 2px solid blue;
margin: 0px;
}
如您所知,问题源于浏览器之间的子像素演算的不同方法
例如,在Chrome中,边框可以具有小数尺寸,但边距处理不同(作为整数).
我没有Chrome团队提供有关它的文档,但它可以在开发工具中看到:
AFAIK,没有办法改变这种状况.
相反,您可以将按钮中边距的使用转移到边框.
由于您需要为输入的1px边框获取空间,请在按钮中执行相同操作,设置1px边框(而不是边距),并将其设置为透明.
剩下的技巧是将background-clip属性设置为padding框,这样透明度就不会受到背景的影响
Chrome中还有另一个错误,当浏览器缩放时,以这种精度级别表示的填充不可靠.我在片段中更改了此内容.
由于我们使用边框按钮来获取尺寸,我们可以使用嵌入阴影来设置边框样式.
* {
margin: 0; padding: 0; box-sizing: border-box;
}
button, input, wrapper {
display: inline-block; border-radius: 3px;
}
.wrapper {
position: relative;
width: 60%;
margin: 1em;
background-color: #ccc;
}
input {
border: 1px solid red;
width: 100%;
background-color: limegreen;
line-height: 3em;
/* padding: 0.75em; */
padding: 10px;
}
button {
position: absolute;
right: 0;
top: 0;
bottom: 0;
border: 1px solid transparent;
width: 7em;
margin: 0px;
background-clip: padding-box;
box-shadow: inset 0px 0px 0px 2px black;
}