我有一个带边框的盒子。
border: 1px solid #000;
我正在使用以下视口设置:
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
边界似乎是顶部和右侧的 2 个像素。这是什么原因?
附加:除了宽度和高度之外,没有其他 CSS 规则。
专门针对像素密度的元标记已被贬值,现在 Android 和 iPhone 似乎都只使用一个元标记:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
但是,如果你尝试制作一个 1px 的边框,根据移动设备的像素密度,它的不同边会越来越厚。
一些设备如何用多个像素渲染“1px”,它并不总是很漂亮,因为它们使用不同的像素比率 (dpr),例如 1.5、2 和 3。有时,1px 边框的所有 4 个边都不匹配。
这是一些通过将 1px 除以一半来使 1px 在 2dpr iPhone 上正确显示的 CSS:
@media only screen and (-webkit-min-device-pixel-ratio: 2) {
div {
border-width: 0.5px;
}
此处显示了类似的技术:http: //n12v.com/css-retina-and-physical-pixels/ https://developer.android.com/guide/webapps/targeting.html
“您能否修改您的答案以使其适用于所有设备,无论 DPI 是多少?会非常有用!– Basj”
我不知道这有多大帮助我在这里添加了一个自定义函数来获取几乎所有 dpr 的边框大小
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Pixel Ratio</title>
<style>
.bord {
width: 300px;
height: 300px;
border: 10px solid #000;
}
</style>
</head>
<body>
<div class="bord"> </div>
<script>
dprof("bord");
function dprof(elmclass){
var z =document.getElementsByClassName(elmclass).length;
var dpr = window.devicePixelRatio;
for(i=0;i<z;i++){
document.getElementsByClassName(elmclass).item(i).classList.add("dpr-"+dpr);
var bw =getComputedStyle(document.getElementsByClassName(elmclass).item(i),null).getPropertyValue('border-width');
var nw =bw.replace("px","");
var nbw=nw/dpr;
console.log(nbw);
if(nbw!=0){
document.getElementsByClassName(elmclass).item(i).style.borderWidth=nbw+"px";
}
}
}
</script>
</body>
</html>
除非您有充分的理由(值得怀疑),否则禁用用户缩放是一个非常糟糕的主意。见user-scalable=no ... 邪恶还是有点不邪恶?例如为什么这很糟糕。它还给出了一些user-scalable=no
完全可以接受的例子。
对于 1.5 像素比,请尝试
@media only screen and (-webkit-min-device-pixel-ratio: 1.5) {
div {
border-width: 0.75px;
}
}