边界半径不像预期的那样圆
border radius not round as expected
在上面的例子中,我尝试了开关盒样式,我也尝试了 em 值,当我根据他们的 parents 写字体大小 16px 时,根据 veiwport,字体大小会发生变化,而改变开关盒圈并不完美,对于特定的字体大小是合适的(例如:parent font-size 20px,22px)
这是代码
.parent {
font-size: 16px;
text-align: center;
margin-top: 10px
}
.BP_swtchbox {
display: inline-block;
font-size: 1em
}
.BP_Swtch {
cursor: pointer;
background: #d7d9dd;
border-radius: 0.313em;
height: 0.625em;
width: 1.500em;
display: inline-block;
position: relative;
transition: .4s;
-ms-transition: .4s;
-moz-transition: .4s;
-webkit-transition: .4s
}
.BP_swtchbox input {
display: none
}
.BP_Swtbx_lb {
background: #fff;
border-radius: 50%;
box-shadow: 0 1px 4px 0 #777;
height: 0.875em;
width: 0.875em;
position: absolute;
top: 0;
left: 0;
transition: .3s cubic-bezier(.4, 1.3, .65, 1.1);
-ms-transition: .3s cubic-bezier(.4, 1.3, .65, 1.1);
-moz-transition: .3s cubic-bezier(.4, 1.3, .65, 1.1);
-webkit-transition: .3s cubic-bezier(.4, 1.3, .65, 1.1);
bottom: 0;
margin: auto
}
.BP_swtchbox input:checked+.BP_Swtch {
box-shadow: 0 0 0 0.375em #58b14c inset
}
.BP_swtchbox input:checked+.BP_Swtch .BP_Swtbx_lb {
left: calc(100% - 0.875em);
left: -ms-calc(100% - 0.875em);
left: -moz-calc(100% - 0.875em);
left: -webkit-calc(100% - 0.875em)
}
<div class="parent">
<label class="BP_swtchbox" for="BPSwitch">
<input type="checkbox" id="BPSwitch" class="hide">
<label class="BP_Swtch" for="BPSwitch">
<span class="BP_Swtbx_lb"></span>
</label>
</label>
</div>
这是 parent class..... 开关图标
的字体大小为 20px 的屏幕截图
为此要做什么....
这很有趣。似乎当 .parent
有一个 20px
的 font-size
时, .BP_Swtbx_lb
的 width
和 height
(它们都表示为 0.875em
) 被计算为 17.5 像素。由于像素不能是小数,因此它们会四舍五入,但这里奇怪的是高度四舍五入为 17,而宽度四舍五入为 18。
当 .parent
的 font-size
为 22px
时,它似乎完全相反,height
向上取整而 width
向下取整.在这种情况下,它们绝对应该明确地向下舍入,因为它被计算为 19.25 像素。
奇怪的形状似乎是由根据非舍入值而不是舍入值计算的曲线引起的。比较设置非四舍五入值时的形状和显式设置四舍五入值时的形状,前者略微呈矩形,后者完全呈椭圆形。所以渲染曲线和渲染尺寸之间存在不一致。
这似乎只是在 Chrome 中的情况。 Safari 和 Firefox 都不显示此行为。
现在,如何舍入小数像素取决于浏览器实现,但您认为它至少在内部是一致的。我愿意得出结论,这是一个浏览器错误,应该向 Google Chrome 开发团队报告。
在上面的例子中,我尝试了开关盒样式,我也尝试了 em 值,当我根据他们的 parents 写字体大小 16px 时,根据 veiwport,字体大小会发生变化,而改变开关盒圈并不完美,对于特定的字体大小是合适的(例如:parent font-size 20px,22px)
这是代码
.parent {
font-size: 16px;
text-align: center;
margin-top: 10px
}
.BP_swtchbox {
display: inline-block;
font-size: 1em
}
.BP_Swtch {
cursor: pointer;
background: #d7d9dd;
border-radius: 0.313em;
height: 0.625em;
width: 1.500em;
display: inline-block;
position: relative;
transition: .4s;
-ms-transition: .4s;
-moz-transition: .4s;
-webkit-transition: .4s
}
.BP_swtchbox input {
display: none
}
.BP_Swtbx_lb {
background: #fff;
border-radius: 50%;
box-shadow: 0 1px 4px 0 #777;
height: 0.875em;
width: 0.875em;
position: absolute;
top: 0;
left: 0;
transition: .3s cubic-bezier(.4, 1.3, .65, 1.1);
-ms-transition: .3s cubic-bezier(.4, 1.3, .65, 1.1);
-moz-transition: .3s cubic-bezier(.4, 1.3, .65, 1.1);
-webkit-transition: .3s cubic-bezier(.4, 1.3, .65, 1.1);
bottom: 0;
margin: auto
}
.BP_swtchbox input:checked+.BP_Swtch {
box-shadow: 0 0 0 0.375em #58b14c inset
}
.BP_swtchbox input:checked+.BP_Swtch .BP_Swtbx_lb {
left: calc(100% - 0.875em);
left: -ms-calc(100% - 0.875em);
left: -moz-calc(100% - 0.875em);
left: -webkit-calc(100% - 0.875em)
}
<div class="parent">
<label class="BP_swtchbox" for="BPSwitch">
<input type="checkbox" id="BPSwitch" class="hide">
<label class="BP_Swtch" for="BPSwitch">
<span class="BP_Swtbx_lb"></span>
</label>
</label>
</div>
这是 parent class..... 开关图标
的字体大小为 20px 的屏幕截图为此要做什么....
这很有趣。似乎当 .parent
有一个 20px
的 font-size
时, .BP_Swtbx_lb
的 width
和 height
(它们都表示为 0.875em
) 被计算为 17.5 像素。由于像素不能是小数,因此它们会四舍五入,但这里奇怪的是高度四舍五入为 17,而宽度四舍五入为 18。
当 .parent
的 font-size
为 22px
时,它似乎完全相反,height
向上取整而 width
向下取整.在这种情况下,它们绝对应该明确地向下舍入,因为它被计算为 19.25 像素。
奇怪的形状似乎是由根据非舍入值而不是舍入值计算的曲线引起的。比较设置非四舍五入值时的形状和显式设置四舍五入值时的形状,前者略微呈矩形,后者完全呈椭圆形。所以渲染曲线和渲染尺寸之间存在不一致。
这似乎只是在 Chrome 中的情况。 Safari 和 Firefox 都不显示此行为。
现在,如何舍入小数像素取决于浏览器实现,但您认为它至少在内部是一致的。我愿意得出结论,这是一个浏览器错误,应该向 Google Chrome 开发团队报告。