css - 不同设备上的视口(viewport)和像素密度使图标变得模糊

标签 css media-queries viewport

我正在使用视口(viewport)和媒体查询来使我的网站适合移动设备。

<meta name='viewport'content='width=device-width,initial-scale=1.0'>

我有一个背景像这样的按钮:

button{
 width:29px;
 height:29px;
 border:1px solid white;
 background:url(add.jpg);
}

在电脑上看起来很简单:

enter image description here

在高像素密度的设备上,需要视口(viewport)标签才能正确显示网站。但是图像被拉伸(stretch)以显示在新的视口(viewport)尺寸中。

enter image description here

如您所见,连上传的图片都变大了。所以 29px 实际上在移动设备上呈现为 58px(取决于哪个设备)。并且图像被拉伸(stretch)。

有什么解决办法吗?我发现的唯一一个是不使用图像。有什么想法吗?

最佳答案

使用 -webkit-min-device-pixel-ratiomin-resolution 媒体查询提供 58 x 58 像素的图像以用于更高-DPI 显示。

此示例假设您已经为高 DPI 显示创建了一个名为 add@2x.jpg 的新图像。 (@2x 后缀是原生 iOS 应用程序开发中常用的约定,但您可以随意命名文件。)

button{
  width: 29px;
  height: 29px;
  border: 1px solid white;
  background: url(add.jpg);

  @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { 
    background: url(add@2x.jpg);
    background-size: 29px 29px;
  }
}

重要的是设置 background-size 属性,以便将图像“缩小”到您希望它在 CSS pixels 中呈现的大小。 .

如果您想提供针对更高分辨率的设备(例如 iPhone X)优化的图像,您可以添加额外的媒体查询:

@media (-webkit-min-device-pixel-ratio: 3), (min-resolution: 288dpi) { 
  background: url(add@3x.jpg);
  background-size: 29px 29px;
}

关于css - 不同设备上的视口(viewport)和像素密度使图标变得模糊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54726816/

相关文章:

html - 我想用css来控制视频标签的宽度和高度

flutter - 有一个适合上下文 flutter 大小的容器吗?

twitter-bootstrap - 为什么 Respond.js 和 CSS3-mediaqueries.js 都不适用于我的 IE 7 和 8?

css - 导航栏不显示

javascript - 在 Responsive 上用另一个 img 属性更改 img src

html - 页面右侧空白

css - 如何在 IE 加载时使媒体查询工作?

过滤 map View 中的功能 React-Map-gl React Hooks

css - 视口(viewport)元标记真的有必要吗?

opengl - 每次绑定(bind)不同分辨率的帧缓冲区时都必须调用 glViewport 吗?