应用场景

实现一个三角形

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>三角形</title>
  <style>
    div{
      width: 0;
      height: 0;
    }
    .a{
      border-top: 50px solid red;
      border-right: 50px solid transparent;
      border-left: 50px solid transparent;
    }
    .b{
      border-bottom: 50px solid red;
      border-right: 50px solid transparent;
      border-left: 50px solid transparent;
    }
    .c{
      border-top: 50px solid transparent;
      border-bottom: 50px solid transparent;
      border-left: 50px solid red;
    }
    .d{
      border-top: 50px solid transparent;
      border-right: 50px solid red;
      border-bottom: 50px solid transparent;
    }
    .e{
      border-top: 50px solid red;
      border-right: 50px solid transparent;
    }
  </style>
</head>
<body>
  <div class="a"></div>
  <div class="b"></div>
  <div class="c"></div>
  <div class="d"></div>
  <div class="e"></div>
</body>
</html>

实现一个扇形

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>扇形</title>
  <style>
    div{
      width: 0;
      height: 0;
    }
    .a{
      border: 100px solid transparent;
      border-radius: 100px;
      border-top-color: red;
    }
  </style>
</head>
<body>
  <div class="a"></div>
</body>
</html>

实现一个宽高自适应的正方形

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>正方形</title>
  <style>
    .a{
      width: 10%;
      height: 10vw;
      background: tomato;
    }
    .b{
      width: 10%;
      height: 0;
      padding-top: 10%;
      background-color: antiquewhite;
    }
    .c{
      width: 10%;
      overflow: hidden;
      background-color: bisque;
    }
    .c::after{
      content: '';
      display: block;
      margin-top: 100%;
    }
  </style>
</head>
<body>
  <div class="a"></div>
  <div class="b"></div>
  <div class="c"></div>
</body>
</html>

画一条0.5px的线

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <!-- 设置meta,仅限移动端 -->
  <meta name="viewport" content="width=device-width, initial-scale=0.5, minimum-scale=0.5, maximum-scale=0.5">
  <title>0.5px</title>
  <style>
    .a{
      width: 100px;
      height: 1px;
      background-color: black;
      transform: scale(1,0.5);
    }
  </style>
</head>
<body>
  <div class="a"></div>
</body>
</html>

设置小于12px的字体

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>12px</title>
  <style>
    div{
      font-size: 12px;
      transform: scale(0.75);
    }
  </style>
</head>
<body>
  <div>
    小于12px
  </div>
</body>
</html>

如何解决 1px 问题?

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta id="metaEl" name="viewport" content="width=device-width, initial-scale=1.0">
  <title>1px</title>
  <style>
    div{
      width: 100px;
      height: 1px;
      background-color: black;
    }
  </style>
</head>
<body>
  <div></div>
  <script>
    const scale = 1 / window.devicePixelRatio;
    const metaEl = document.getElementById('metaEl');
    metaEl.setAttribute('content',`width=device-width,initial-scale=${scale},maximum-scale=${scale},minimum-scale=${scale}`)
  </script>
</body>
</html>

1px问题就是在一些移动端页面上1px会变得很粗,原因时css中的1px并不能和移动设备上的1px划等号,它们之间的比例关系有一个专门的属性来描述。
window.devicePixelRatio = 设备的物理像素 / css像素