美文网首页
移动端响应式页面

移动端响应式页面

作者: 我是Msorry | 来源:发表于2020-11-29 16:54 被阅读0次

    响应式页面

    根据用户行为以及使用的设备环境页面自动地进行相对应的布局

    淘宝和京东的方案:当检测到用户使用手机浏览页面时,自动跳转到手机端的url(m.taobao.com/m.jd.com)

    知乎的方案:PC端和手机端执行不同的页面文件,不会让PC端和手机端页面共存

    1. Media queries (媒体查询)

    当满足某个条件时,CSS 生效,不满足时,CSS 不生效

    <!doctype html>
    <html lang=zh-Hans>
    <head>
      <meta charset="UTF-8">
      <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <style>
        @media (max-width: 320px) {  /* 0~320 */
          body{
            background: red;
          }
        }
        @media (min-width: 321px) and (max-width:375px) {/* 321~375 */
          body{
            background: orange;
          }
        }
        @media (min-width: 376px) and (max-width: 425px) { /* 376~425 */
          body{
            background: yellow ;
          }
        }
        @media (min-width: 426px) and (max-width: 768px) { /* 426~768 */
          body{
            background: green ;
          }
        }
        @media (min-width: 769px) { /* 769~max */
          body{
            background: blue ;
          }
        }
      </style>
      <title>移动端页面</title>
    </head>
    <body>
    </body>
    </html>
    

    不同平台的响应式页面必须要有设计图稿才能做!不然会非常丑!!!

    Mobile First

    随着智能手机的普及,大多数用户使用手机看页面,开发时优先做移动端页面的方案就是 Mobile First

    手机端要加一个 meta

    移动端要加一个 meta,把视窗宽度设置为设备宽度;不加的话,自动模拟屏幕宽度为 980px 去缩放

    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    
    <!doctype html>
    <html lang=zh-Hans>
    <head>
      <meta charset="UTF-8">
      <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <style>
        * {
          margin: 0;
          padding: 0;
        }
    
        a {
          color: inherit;
          text-decoration: none
        }
    
        ul, li {
          list-style: none;
        }
    
        header {
          padding: 10px;
          position: relative;
        }
    
        .logo {
          width: 60px;
          height: 60px;
          background: lightcoral;
          border-radius: 50%;
        }
    
        .nav > li {
          float: left;
        }
    
        .nav {
          display: none;
          margin-top: 10px;
          background: cornflowerblue;
        }
    
        .nav.active {
          display: flex;
          justify-content: space-between;
        }
    
        .nav2 {
          display: none;
        }
    
        header > button {
          position: absolute;
          right: 20px;
          top: 25px;
        }
    
        @media (min-width: 451px) {
          header > button {
            display: none;
          }
    
          .nav,.nav.active  {
            display: none;
          }
    
          .nav2 {
            display: block;
          }
    
    
          header {
            display: flex;
            align-items: center;
          }
    
          header .nav2 {
            display: flex;
            margin: 20px;
          }
    
          header .nav2 > li {
            margin: 0 10px;
          }
        }
      </style>
      <title>移动端页面</title>
    </head>
    <body>
    <header>
      <div class="logo"></div>
      <button id="xxx">菜单</button>
      <ul id="yyy" class="nav clearfix">
        <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">
        <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>
      xxx.onclick = function () {
        yyy.classList.toggle('active')
      }
    </script>
    </body>
    </html>
    

    子元素浮动,父元素必须清除浮动;但是当父元素使用 flex 会自动清除浮动

    隐藏元素

    如果一个元素在同一屏幕有不同状态,用 JS 切换
    如果一个元素在不同屏幕上有不同的状态,用 CSS 媒体查询切换;样式被覆盖可能是选择器优先级问题
    display:none 隐藏元素,在特定的条件下展示
    不要用 JS 直接改变样式,CSS 改变样式,JS 只改变状态 !!!

    <!--这是一个用 JS 改变样式例子 不推荐这样使用-->
    <!doctype html>
    <html lang=zh-Hans>
    <head>
      <meta charset="UTF-8">
      <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <style>
        * {
          margin: 0;
          padding: 0;
        }
    
        a {
          color: inherit;
          text-decoration: none
        }
        ul,li{
          list-style: none;
        }
        .logo{
          width: 60px;
          height: 60px;
          background: lightcoral;
          border-radius: 50%;
        }
        .clearfix::after{
          content:"";
          display: block;
          clear: both;
        }
        .nav > li {
          float: left;
        }
        .nav{
          display: none;
        }
        .nav.active{
          display: block;
        }
      </style>
      <title>移动端页面</title>
    </head>
    <body>
    <header>
      <div class="logo"></div>
      <button id="xxx">菜单</button>
      <ul id="yyy" class="nav clearfix">
        <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>
      xxx.onclick=function (){
        if (yyy.style.display === 'block'){
          yyy.style.display =  'none'
        }else{
          yyy.style.display =  'block'
        }
      }
    </script>
    </body>
    </html>
    
    <!doctype html>
    <html lang=zh-Hans>
    <head>
      <meta charset="UTF-8">
      <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <style>
        * {
          margin: 0;
          padding: 0;
        }
    
        a {
          color: inherit;
          text-decoration: none
        }
        ul,li{
          list-style: none;
        }
        .logo{
          width: 60px;
          height: 60px;
          background: lightcoral;
          border-radius: 50%;
        }
        .clearfix::after{
          content:"";
          display: block;
          clear: both;
        }
        .nav > li {
          float: left;
        }
        .nav{
          display: none;
        }
        .nav.active{
          display: block;
        }
      </style>
      <title>移动端页面</title>
    </head>
    <body>
    <header>
      <div class="logo"></div>
      <button id="xxx">菜单</button>
      <ul id="yyy" class="nav clearfix">
        <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>
      xxx.onclick=function (){
       yyy.classList.toggle('active')
      }
    </script>
    </body>
    </html>
    

    移动端交互注意事项

    • 没有 hover
    • touch 事件

    touch 事件模拟滑动,可以用第三方插件支持,比如 TouchSwipe-Jquery-Plugin

    • 没有 resize
    • 没有滚动条

    相关文章

      网友评论

          本文标题:移动端响应式页面

          本文链接:https://www.haomeiwen.com/subject/pfdaiktx.html