美文网首页CSS
移动端为什么会有一像素问题?如何解决?

移动端为什么会有一像素问题?如何解决?

作者: 简单tao的简单 | 来源:发表于2019-08-18 17:35 被阅读0次
为什么会有一像素问题?

因为在移动端,由于屏幕分辨率的不同,现在分为一倍屏、二倍屏、三倍屏。在不同的分辨率上,有可能一像素被渲然成二个像素点或者三个像素点,所以在实际写代码的时候,我们写的 border: 1px solid #000; 可能实际被渲然为 2px/3px;

一像素问题的解决方案
  1. 先使用伪类元素实现边框效果,然后通过媒体查询来操控transform: scale来适配不同分辨率
.border-bottom{
    position: relative;
}
.border-bottom::after {
    content: " ";
    position: absolute;
    left: 0;
    bottom: 0;
    width: 100%;
    height: 1px;
    background-color: #e4e4e4;
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
}

/* 2倍屏 */
@media only screen and (-webkit-min-device-pixel-ratio: 2.0) {
    .border-bottom::after {
        -webkit-transform: scaleY(0.5);
        transform: scaleY(0.5);
    }
}

/* 3倍屏 */
@media only screen and (-webkit-min-device-pixel-ratio: 3.0) {
    .border-bottom::after {
        -webkit-transform: scaleY(0.33);
        transform: scaleY(0.33);
    }
}
  1. 使用border-image来代替border
.border-image-1px {
    border-width: 1px 0px;
    -webkit-border-image: url("border.png") 2 0 stretch;
    border-image: url("border.png") 2 0 stretch;
}
  1. 动态的设置meta标签的内容

设置meta标签

<meta
     name="viewport"
     id="WebViewport"
     content="initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"
/> 

并在js中通过判断当前是一倍屏还是二倍屏、三倍屏,来动态的设置meta标签的内容

function rem() {
    document.documentElement.style.fontSize = document.documentElement.clientWidth / 7.5 + 'px';
    let viewport = document.querySelector("#WebViewport")
    if (window.devicePixelRatio == 1) {
        viewport.setAttribute('content', 'width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no')
    } 
    if (window.devicePixelRatio == 2) {
        viewport.setAttribute('content', 'width=device-width, initial-scale=0.5, maximum-scale=0.5, minimum-scale=0.5, user-scalable=no')
    } 
    if (window.devicePixelRatio == 3) {
        viewport.setAttribute('content', 'width=device-width, initial-scale=0.333333333, maximum-scale=0.333333333, minimum-scale=0.333333333, user-scalable=no')
    } 
}
rem()
window.onresize = rem;
  1. border.css
    通过项目中引入border.css来解决

相关文章

  • web前端面试题@十八(移动端1px问题,为什么会有?如何解决?

    一、移动端1px问题,为什么会有?如何解决? 为什么移动端会产生1px问题呢? 因为UI设计师在最初设计的时候使用...

  • 前端常见面试题十二 (移动端)

    目录: 1、请详解移动端点透,为什么会发生点透?描述发生的场景及解决方案 2、移动端为什么会有一像素问题?如何解决...

  • vue面试题第十三天

    @1移动端1px问题,为什么会有?如何解决? 在开发中,为什么移动端CSS里面写了1px,实际上看起来比1px粗;...

  • 面试题

    @1: 移动端1px问题,为什么会有?如何解决? 物理像素:移动设备出厂时,不同设备自带的不同像素,也称硬件像素...

  • 第十三天

    移动端1px问题,为什么会有?如何解决? 因为在移动端,由于屏幕分辨率的不同,现在分为一倍屏、二倍屏、三倍屏。在不...

  • 前端常见面试题二十

    目录:1、什么是事件代理且描述事件代理的原理及为什么要用事件代理?2、移动端1px问题,为什么会有?如何解决?3、...

  • 22天面试题

    1.什么是事件代理且描述事件代理的原理及为什么要用事件代理? 2.移动端1px问题,为什么会有?如何解决? 3.解...

  • fastClick的300ms延迟解决方案

    开发移动端项目,点击事件会有300ms延迟的问题。至于为什么会有这个问题,请自行百度即可。这里只说下常见的解决思路...

  • 前端开发常见问题精选(二)

    一、如何解决Canvas画布在移动端显示模糊的问题? Canvas画布在PC端显示正常,但是放在移动端却发现整个画...

  • 移动端为什么会有一像素问题?如何解决?

    为什么会有一像素问题? 因为在移动端,由于屏幕分辨率的不同,现在分为一倍屏、二倍屏、三倍屏。在不同的分辨率上,有可...

网友评论

    本文标题:移动端为什么会有一像素问题?如何解决?

    本文链接:https://www.haomeiwen.com/subject/qyzrsctx.html