美文网首页前端技术
CSS 如何制作 0.5 像素的细线

CSS 如何制作 0.5 像素的细线

作者: 一俢 | 来源:发表于2019-02-18 09:47 被阅读9次

移动技术的出现,将屏幕显示技术带入 Retina 级别,现在绝大部分移动端设备都达到或者超过了 Retina 级别,但是由于移动端的屏幕分辨率和浏览器的分辨率有一些换算关系,导致在浏览器中的 1 个像素会占用屏幕的 2 个或者 2 个以上的像素,这样使得 Mobile Web 的 UI 在精细程度上大打折扣。但是我们还是有技术的手段来解决这个问题。

border-width: 0.5px

直接通过样式来设置0.5px的边框。当然这个方案是非常理想的方案,但是事实总是残酷的,它只在 iOS 8+ 上支持,对于 Android 无法支持。不过个人相信时间会让它成为最佳可行方案。

.border {
    border: 1px #000 solid;
}
@media(min-device-pixel-ratio: 2) {
    border-width: 0.5px;
}

当然对于这种兼容性问题我们可以通过 JavaScript 来做降级处理,我们将默认边框设置为1px,分辨出来是 iOS 并且版本为 8 以上,就可以将边框设置为0.5px

缺点:

  • 兼容性问题。

利用 box-shadow

我们也可以利用 box-shadow 的阴影来绘制出0.5px的线,只需要将阴影的偏移半径设置的足够小,模糊半径设置为1px。这种比较难控制,颜色很难取,并且它并不是一条真是的线。

.border {
    box-shadow: 0 -1px 1px -1px rgba(0, 0, 0, .5),
                    -1px 0 1px -1px rgba(0, 0, 0, .5),
                    1px 0 1px -1px rgba(0, 0, 0, .5),
                    0 1px 1px -1px rgba(0, 0, 0, .5);
}

缺点:

  • 仔细观察它并不是一条实线;
  • 由于是阴影,要取到想要的颜色很难。

border-image

其实就是利用图片的缩放来解决这个问题,需要一张 6*6px 的图片,做成特殊的透明框线图;但是它不支持圆角。

.border {
    border-width: 1px;
    border-image: url(border.png) 2 repeat;
}

缺点:

  • 需要额外的图片;
  • 不支持圆角边框;
  • 颜色固定,无法随意设置。

viewport

利用动态的改变<viewport>让网页的像素区域和屏幕的像素区域重合,这样就很轻松的去写1px的边框,并且它会等于屏幕本身的1px

//当 devicePixelRatio = 2 输出:
<meta name="viewport" content="initial-scale=0.5, maximum-scale=0.5, minimum-scale=0.5, user-scalable=no">

//当 devicePixelRatio = 3 输出:
<meta name="viewport" content="initial-scale=0.3333333333333333, maximum-scale=0.3333333333333333, minimum-scale=0.3333333333333333, user-scalable=no">

缺点:

  • Mobile APP 在设计上会存在问题(我们会在专门的 viewport 中去讲解)

利用伪类的缩放

利用 ::before 或 ::after 画出是DOM的尺寸 2 倍或 3 倍的绝对定位伪对象,使用 1px 的 border 定义新边框后,让后通过设置 transform 的 scale 把伪类对象缩小到一半或 1/3,这样看上去伪对象就和容器一样大了。

.border {
    border-bottom: 1px solid #ccc;
}
@media (min-device-pixel-ratio: 2) {
    .border {
        position: relative;
        border-bottom: none;
    }
    .border::after {
        content: ' ';
        display: block;
        position: absolute;
        left: 0;
        bottom: 0;
        width: 200%;
        height: 0;
        border-bottom: 1px solid #ccc;
        transform: scale(0.5) translate(-50%, -50%);
    }
}

缺点:

  • 占用伪类;
  • 容器的定位被设置了;
  • 代码太复杂。

总结

这些方案中各有利弊,需要结合实际项目情况来做,当然我们相信随着时间的推移,各大浏览器厂商会支持border-width: 0.5px这一样式。

相关文章

  • CSS 如何制作 0.5 像素的细线

    移动技术的出现,将屏幕显示技术带入 Retina 级别,现在绝大部分移动端设备都达到或者超过了 Retina 级别...

  • CSS如何实现0.5像素

    &:after { content:""; position:absolute; bottom:0; left:0...

  • CSS 0.5像素线

    在移动端1像素的线是很丑的,而border-width设置为0.5px会被自动转成1px;border-width...

  • CSS 如何在屏幕上显示出零点几像素

    面试中提及 CSS 方面的问题时,经常会问到如何设置小数级别像素。 如:现需要设置一个元素的高度为 0.5px,如...

  • CSS3实现0.5px的细线

    在移动端/内嵌页面的时候,经常需要我们绘制特别细的变宽,这个时候我们使用1px的宽度来绘制的话,在页面上看会显的特...

  • 移动端常用适配方案

    1.如何解决设备像素和CSS像素不一样的问题?如果设备像素和CSS像素一样, 那么无需处理不会带来任何负面影响如果...

  • css3做border = 0.5px的细线

    参考: https://blog.csdn.net/Tyro_java/article/details/52013531

  • 使用css3做0.5px的细线

    使用缩放 html代码 css代码: 网站

  • 移动端一像素边框

    如何实现在移动端中显示一像素的边框 实现方案一:0.5像素 标准边框语法div{ border: 1px sol...

  • 适配

    设备像素和css像素 web前端领域,像素分为设备像素和CSS像素 在缩放比例为1:1的时候一个CSS像素的大小等...

网友评论

    本文标题:CSS 如何制作 0.5 像素的细线

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