在开发 H5 页面的时候发现,部分安卓机的原生浏览器不兼容 0.5px 的 border
,这时候就很闹心了,以下所示代码:php
input {
border-bottom: 0.5px solid #DCDCDC;
}
复制代码
后面想到了用 rem
的方式,由于 H5 页面借鉴了手淘的响应式像素,根据移动设备的 dpi 设定了根元素的 font-size
大小,因此几乎全部的 px
都改为了 rem
做为单位,这样能够更好地去实现移动端的响应式像素以及 Retina 屏幕上的表现。代码以下:css
input {
/* 47 是页面根元素的 font-size 大小 */
border-bottom: calc(1rem/47) solid #DCDCDC;
}
复制代码
测试中有部分机型完美展现了,可是有部分仍是不显示,网上有帖子说能够利用伪元素 :before
和 :after
进行 1px
的表现,而后利用 transform: scaleY(0.5);
进行高度上的调整,思路很好,但奶奶个熊 input
元素不支持伪元素。浏览器
最后,物色到了一个很妙的方法:在 CSS 中使用 svg!微信
具体思路是为元素加上 background-image
,而后把 svg 置为图片类型,由于 svg 上的 1px
就是实实在在的只占 1 个物理像素。svg
实现很简单,代码以下:测试
input {
background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100%' height='100%'><line x1='0' y1='100%' x2='100%' y2='100%' stroke='#dcdcdc' stroke-width='1'/></svg>") ;
}
复制代码
倒腾不止于此,利用 php 代码把 svg 的 xml 代码转成 base64 格式再试试:ui
<?php
echo base64_encode("<svg xmlns='http://www.w3.org/2000/svg' width='100%' height='100%'><line x1='0' y1='100%' x2='100%' y2='100%' stroke='#dcdcdc' stroke-width='1'/></svg>");
?>
复制代码
输出以下:this
PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzEwMCUnPjxsaW5lIHgxPScwJyB5MT0nMTAwJScgeDI9JzEwMCUnIHkyPScxMDAlJyBzdHJva2U9JyNkY2RjZGMnIHN0cm9rZS13aWR0aD0nMScvPjwvc3ZnPg==
复制代码
再引入到 css 的 background-image
中:(注意原 utf8
要改为 base64
)搜索引擎
input {
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzEwMCUnPjxsaW5lIHgxPScwJyB5MT0nMTAwJScgeDI9JzEwMCUnIHkyPScxMDAlJyBzdHJva2U9JyNkY2RjZGMnIHN0cm9rZS13aWR0aD0nMScvPjwvc3ZnPg==") ;
}
复制代码
其实还有不少方法能够来解决这个问题,你们尽情发挥一下脑洞吧。url
已经是年关,你们不管是外出游玩仍是返乡路上,都必定要眼观四路、耳听八方,保管本身的随身物品。但愿新的一年个人读者们都平平安安、开开心心的,再远再难都要回家一趟。这个冬天,不冷!