实现效果
在线体验: https://mouday.github.io/front-end-demo/1px.html
实现代码
- <body>
- <style>
- * {
- margin: 0;
- padding: 0;
- }
-
- body {
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- height: 100vh;
- }
-
- .margin-top--20 {
- margin-top: 20px;
- }
-
- .box {
- width: 500px;
- height: 100px;
- box-sizing: border-box;
- }
-
- /* 1px border */
- .border--1 {
- border: 1px solid gray;
- }
-
- .border--0_5 {
- position: relative;
- }
-
- /* 通过伪元素实现 0.5px border */
- .border--0_5::after {
- position: absolute;
- content: "";
- /* 为了与原元素等大 */
- box-sizing: border-box;
- left: 0;
- top: 0;
- width: 200%;
- height: 200%;
- border: 1px solid gray;
- transform: scale(0.5);
- transform-origin: 0 0;
- }
-
- .line {
- width: 500px;
- }
-
- /* 实现 1px 细线 */
- .line--1 {
- height: 1px;
- background: #b3b4b8;
- }
-
- .line--0_5 {
- position: relative;
- }
-
- /* 通过伪元素实现 0.5px 细线 */
- .line--0_5::after {
- content: "";
- position: absolute;
- top: 0;
- left: 0;
- width: 200%;
- height: 1px;
- background: #b3b4b8;
- transform: scale(0.5);
- transform-origin: 0 0;
- }
-
- /* dpr适配可以这样写 */
- @media (-webkit-min-device-pixel-ratio: 2) {
- .line--0_5::after {
- height: 1px;
- transform: scale(0.5);
- transform-origin: 0 0;
- }
- }
-
- @media (-webkit-min-device-pixel-ratio: 3) {
- .line--0_5::after {
- height: 1px;
- transform: scale(0.333);
- transform-origin: 0 0;
- }
- }
- </style>
-
- <h1>1px border</h1>
- <div class="box border--1"></div>
-
- <h1 class="margin-top--20">0.5px border</h1>
- <div class="box border--0_5"></div>
-
- <h1 class="margin-top--20">1px line</h1>
- <div class="line line--1"></div>
-
- <h1 class="margin-top--20">0.5px line</h1>
- <div class="line line--0_5"></div>
- </body>