移动端页面(响应式)

72 阅读1分钟

媒体查询(media query)

  • 对媒体进行某些条件的查询就是媒体查询
<sytle>
  @media(max-width: 800px) {
        body {
          background: red;
        }
      }
</style>
  • 媒体查询:当最大宽度是800px以下,背景是红色的

  • 写的越晚,优先级越高,会覆盖前面的代码

下面的代码就会覆盖

image.png

修改后的代码:

<style>
      @media (max-width: 320px) {
        body {
          background: red;
        }
      }
      @media (min-width: 321px) and (max-width: 375px) {
        body {
          background: orange;
        }
      }
      @media (min-width: 376px) and (max-width: 425px) {
        body {
          background: green;
        }
      }
      @media (min-width: 426px) and (max-width: 768px) {
        body {
          background: blue;
        }
      }
      @media (min-width: 769px) {
        body {
          background: purple;
        }
      }
    </style>
  • 用CSS文件代替具体媒体查询

image.png

  • 实例
<!DOCTYPE html>
<html lang="zh">
  <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>移动页面demo</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      a {
        color: inherit; 
        text-decoration: none;
      }

      .logo {
        width: 60px;
        height: 60px;
        background: grey;
        border-radius: 30px;
      }
      .clearfix::after {
        content: "";
        display: block;
        clear: both;
      }
      header {
        padding: 10px;
        position: relative;
      }
      .nav {
        display: none;
        background: grey;
        margin-top: 10px;
      } /*默认看不见*/
      .nav.active {
        display: flex;
        justify-content: space-between;
      } /*激活看得见*/

      header > button {
        position: absolute;
        right: 20px;
        top: 30px;
      }

      .nav2 {
        display: none;
      }
      @media (min-width: 451px) {
        header > button {
          display: none;
        }/*媒体查询*/
        .nav {
          display: none !important;
        }/*当切换PC页面隐藏移动端的内容*/
        /*
        .nav,.nav.active{
          display: none ;
        }
        */
        .nav2 {
          display: block;
        }
        header {
          display: flex;
          align-items: center;
        }
        header .nav2 {
          display: flex;
          margin-left: 20px;
        }
        header .nav2 > li {
          margin: 0 10px;
        }
      }
    </style>
  </head>
  <body>
    <header>
      <div class="logo"></div>
      <button id="xx">菜单</button>
      <ul id="yy" class="nav" style="list-style: none">
        <li><a href="#">导航1</a></li>
        <li><a href="#">导航2</a></li>
        <li><a href="#">导航3</a></li>
        <li><a href="#">导航4</a></li>
        <li><a href="#">导航5</a></li>
      </ul>
      <ul class="nav2" style="list-style: none">
        <li><a href="#">导航1</a></li>
        <li><a href="#">导航2</a></li>
        <li><a href="#">导航3</a></li>
        <li><a href="#">导航4</a></li>
        <li><a href="#">导航5</a></li>
      </ul>
    </header>
    <script>
      xx.onclick = function () {
        yy.classList.toggle("active");
      }; /*切换CSS状态*/
    </script>
  </body>
</html>

nav是移动端页面,nav2是PC端页面

meta viewport

  • 不成文规定:模拟980像素,进行缩放

  • 手机端要加一个 meta: <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">(宽度等于设备宽度,缩放等于0,不能缩放,)

移动端的特点

  • 没有hover

  • 有touch事件

  • 没有resize

  • 没有滚动条