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

移动端响应式页面

作者: 我是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