关于“1”像素问题

本文详细介绍了在不同设备像素比(DPR)下实现精准1像素边框的技术方案,包括使用CSS3的transform属性进行缩放的方法,并通过实例展示了如何根据不同DPR调整transform的scale值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景
在前端页面开发中,UI会提供@2x,@3x等二倍三倍不同尺寸的图,对于刚刚接触前端或者移动端开发的前端er可能会有些不是太明白。在实际开发中可能还会遇到以下情况:ui提供的网页设计图中一个input框是80px(尺寸为举例),前端er在代码中按照80px高度还原在网页上发现输入框的尺寸太高,这些问题的产生式因为UI和前端er在“像素”这个问题上不同的理解而造成的,下面就详细说说“像素”。

像素

  • 设备像素(device pixel):设备像素设是物理概念,指的是设备中使用的物理像素。比如iPhone 5的分辨率640 x 1136px。
  • CSS像素(css pixel):CSS像素是Web编程的概念,指的是CSS样式代码中使用的逻辑像素。
    在CSS规范中,长度单位可以分为两类,绝对(absolute)单位以及相对(relative)单位。px是一个相对单位,相对的是设备像素(device pixel)。

比如iPhone 5使用的是Retina视网膜屏幕,dpr为2,所以设备像素数为640 x 1136px,而CSS逻辑像素数为320 x 568px。

DPR
参考文章:设备像素比devicePixelRatio简单介绍
设备像素和css像素之间的换算就用到了DPR(devicePixelRatio)。

结合具体项目来谈谈1像素问题。
在项目开发的过程中,会遇到1像素边框问题,这个1像素主要针对的是移动端DPR不为1的移动设备。

如下图
这里写图片描述

红色的方框为在iphone端显示为1像素的问题,相应代码(stylu)如下:
base.styl

@media (-webkit-min-device-pixel-ratio: 1.5),(min-device-pixel-ratio: 1.5)
  .border-1px
    &::after
      -webkit-transform: scaleY(0.7)
      transform: scaleY(0.7)

@media (-webkit-min-device-pixel-ratio: 2),(min-device-pixel-ratio: 2)
  .border-1px
    &::after
      -webkit-transform: scaleY(0.5)
      transform: scaleY(0.5)

mixin.styl

border-1px($color)
  position: relative
  &:after
    display: block
    position: absolute 
    left: 0
    bottom: 0
    width: 100%
    border-top: 1px solid $color
    content: " "

思路:对于不同的DPR利用css3中的transform scal属性进行缩放,为了显示出效果,下面我们将DPR为2的缩放改为5然后再测试设备上看单个底部边框的宽度。
base.styl

@media (-webkit-min-device-pixel-ratio: 1.5),(min-device-pixel-ratio: 1.5)
  .border-1px
    &::after
      -webkit-transform: scaleY(0.7)
      transform: scaleY(0.7)

@media (-webkit-min-device-pixel-ratio: 2),(min-device-pixel-ratio: 2)
  .border-1px
    &::after
      -webkit-transform: scaleY(5)
      transform: scaleY(5)

页面显示

放大5

在这里将scaleY(5)时,iphone5上的实际像素变为10px了,因为mixin.styl给定了边框宽度为1px,iphone5dpr为2,然后又放大了5倍,所以上图中灰色边框的css像素为10px。

【题外话】上面这个项目是如何设计1像素边框的,运用到的知识点

  • stylus函数:mixin.styl中border-1px( color color,这个参数用来改变边框的颜色
  • 伪元素选择器;::after伪元素,设置border-top:在这里给定边框的css像素为1px,设置内容为空,绝对定位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值