1px像素问题(二):解决方法
前言
上一篇博文分析了1px像素问题的产生原因,
这次就分享一下解决方法。
解决方法有很多,根据项目环境和使用场景选择最合适的就行,下面整理了一下解决方式:
1、通过设置meta标签viewport
分析1px像素产生原因时,有说到meta标签设置的width=device-width,其实这也是产生1px像素问题的前提条件之一,无论你是rem适配方式还是媒体查询的响应式布局,你最终在375px的总宽度下,边框最小css单位也只能是1px,而750px的设计图里1px占1/750,375px里1px占1/375,比例大了一倍,视觉上肯定是粗了。
所以,如果设置content的width就等于设计图大小750px,然后通过动态设置maximum-scale值让网页整体缩放,就能实现效果了,这也是适配移动端不同屏幕大小的一种思路。
以iphoneX为例,
<meta name="viewport" content="width=750,initial-scale=0.5,user-scalable=no">
这样就能让iphoneX完美还原750px的设计图了,initial-scale的值动态设置为window.screen.width / 750,iphoneX下就是0.5。
不过这样设置后,在和其他content属性width值不同的页面间来回切换会出现横向滚动条,不推荐使用(这里介绍这种方法也是帮助更好的理解1px像素问题)。
2、通过transform: scale()缩放(推荐)
(1) 单边
以 下边框 为例:
.div::after {content: '';box-sizing: border-box;position: absolute;z-index: 1;left: 0;bottom: 0;width: 100%;height: 2px;border-bottom: 1px solid #bfbfbf;transform: scaleY(1/2);transform-origin: left bottom;
}
如果还需要添加其他边框,可以用before伪元素再加,例如再加个右边框:
.div::before {content: '';box-sizing: border-box;position: absolute;z-index: 1;right: 0;bottom: 0;width: 2px;height: 100%;border-right: 1px solid #bfbfbf;transform: scaleX(1/2);transform-origin: right bottom;
}
(2) 所有边
此种方式可以添加边框圆角:
.div::after {content: '';box-sizing: border-box;position: absolute;z-index: 1;left: 0;top: 0;width: 300%;height: 300%;border: 1.5px solid #bfbfbf;transform: scale(1/1.5/2);transform-origin: left top;border-radius: 6px;
}
备注:
- 注意需要先给目标div元素添加非static的position属性,因为以上方法都是利用伪元素定位实现的。
- 具体的scale缩放比例取决于你是几倍设计图尺寸下的1px,例如二倍图(750px)尺寸下,缩放比例就是1/2(敲黑板:scale缩放比例和dpr无关)。
- 网上的常规代码会有个别安卓机型边框不显示的问题,我自己的代码已经做了各种兼容处理:单边方案就给伪元素1px的内容区域高度或宽度,加上边框就是2px;所有边的话就基于1.5px边框宽度来进行缩放。
3、换用淡一点的颜色
这是个人实践出的一个偏方,效果不错又简单,只不过适用性没那么广,也需要对颜色代码有一定的熟悉度。
比如边框颜色,设计图是1px的#ccc的颜色,你可以换成#eee颜色,颜色变淡了在视觉上就有了边框变细的效果。
- 对于常用的黑色线条,常用颜色码的颜色深度排序:
#000 > #333 > #666 > #999 > #ddd > #ccc > #eee > #efefef
仔细观察以上颜色码,其实规律挺明显的,很好记,记住这些来处理黑色线条的1px问题就足够了
1px像素问题(二):解决方法相关推荐
- 移动端视网膜(Retina)屏幕下1px边框线的解决方法
本文主要介绍几种 移动端视网膜(Retina)屏幕下1px边框线的解决方法. 1.通过viewport + rem的方式来兼容. 目前这种兼容方案相对比较完美,适合新项目(老项目改用REM单位成本会比 ...
- 移动端1px像素问题及解决办法
在移动端web开发中,UI设计稿中设置边框为1像素,前端在开发过程中如果出现border:1px,测试会发现在某些机型上,1px会比较粗,即是较经典的移动端1px像素问题.首选先看一下,pc时代和移动 ...
- 台式电脑黑屏却开着机,电脑开机黑屏的解决方法
电脑使用久后容易出现各种故障问题,比如说电脑黑屏等.有网友就遇到了电脑开机后黑屏的情况,电脑运行着但是没有任何显示,下面来看看台式电脑黑屏却开着机怎么办的解决步骤. 台式电脑黑屏开着机 原因一:分辨率 ...
- libpython2.7.so.1.0 cannot open的解决方法
使用源代码的方式安装Python2.7之后,在import某些库时抛出了如下异常: ImportError: libpython2.7.so.1.0: cannot open shared objec ...
- java咖啡机故障5_【咖啡小常识】咖啡机不得不知道的常见故障及解决方法
原标题:[咖啡小常识]咖啡机不得不知道的常见故障及解决方法 咖啡行业交流请加私 人微信精品咖啡香,微信号: (长按复制) thinkingcapacity 一.没有蒸汽或做出的咖啡不热 可能原因 1. ...
- python报错No module named XXX通用解决方法
一 问题现象 D:\Python27\python.exe E:/Python/MySQLControler/Main/Main.py Traceback (most recent call last ...
- java咖啡机故障5_咖啡机不得不知道的常见故障及解决方法
咖啡机的诞生和推广让繁忙的人们得以在较短时间内品尝到美味可口的咖啡.但在制作咖啡的过程中,咖啡机用户往往会碰到一些问题,极大地拖延了制作咖啡的时间.鉴于此,本文为用户罗列了一些咖啡机使用过程中的问题和 ...
- mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
目录标 情景一 解决方法 情景二 解决方法 情景一 安装mysql的时候出现如下问题 E: Sub-process /usr/bin/dpkg returned an error code (1) g ...
- 在二分类问题中,准确率一直处于50%上下的解决方法
最近在 猫狗识别 项目中,不知为何准确率(训练集准确率和验证集准确率)一直处于0.5左右,这说明网络根本没有学习.后来查阅了许多他人的经验,并做了总结. 首先谈谈我的是如何解决的: 网络结构:Alex ...
最新文章
- 评分9.7!这本Python书彻底玩大了?程序员:真香!
- iOS 图片渲染及优化
- python 回文链表
- C++ Primer 5th笔记(chap 19 特殊工具与技术)异常类层次
- 我们凭什么相信 5G 很安全?
- redis配置环境变量
- php 检测编码函数,自己写了一个php检测文件编码的函数
- python选择排序算法图解_python基本算法之实现归并排序(Merge sort)
- .Net 2.0 文档生成工具
- 4个mos管驱动的全桥电路原理_逆变器工作原理
- PhpQuery PHP操作HTML类,PHP操作XML类,PHP操作Dom类
- mysql及JAVA汉字转拼音
- Cannot execute binary file 之原因
- 对QT5信号与槽的认识
- pandas中计算总体标准差
- Android编程权威指南.第3版.pdf
- 三年级下册计算机全册教案,小学三年级下册信息技术教案三篇
- SIMPACK-学习记录-Doe相关
- idea 的 maven 项目报错:The program‘s entry point class ‘xxx‘ was not found in the jar file.
- unity Mirror使用心得二(服务器端的怪物创建,及其怪物AI的行为)
热门文章
- Spark工作原理及基础概念
- XJOI 7970 优秀数
- 算法——二进制小数转换
- 自助全兜张家界——特荐杨家寨 766
- 电大计算机flash期末考试题,电大(精新编版)开放教育计算机网络专业(专科)《flash动画制作》期末复习考试试题及参考答案__2017年度.doc...
- 大专应届,充满期望的第九天(面试)
- [BZOJ1117]救火站gas
- 三国志战略版:张苞、关兴_史诗级缘分诞生
- 踩坑笔记:wordpress函数之query_posts()
- 学蓝桥Chapter2:板子上的锁存器与译码器