响应式开发

响应式开发原理

使用媒体查询针对不同宽度的设备进行布局和样式的设置,从而适配不同设备的目的。

媒体查询

媒体查询是指针对不同的设备、特定的设备特征或者参数进行定制化的修改网站的样式。

方式一、通过给 <link> 加上 media 属性来指定该样式文件只能对什么设备生效,不指定的话默认是 all,即对所有设备都生效:

<link rel="stylesheet" src="styles.css" media="screen" />
<link rel="stylesheet" src="styles.css" media="print" />

支持设备类型:

  • all:适用于所有设备;
  • print:适用于在打印预览模式下在屏幕上查看的分页材料和文档;
  • screen:主要用于屏幕;
  • speech:主要用于语音合成器。

方式二、还可以通过 @media 让 CSS 规则在特定的条件下才能生效。

  • @media (min-width: 1000px) {}
    

媒体查询支持逻辑操作符:

  • and:查询条件都满足的时候才生效;

  • not:查询条件取反;

  • only:整个查询匹配的时候才生效,常用语兼容旧浏览器,使用时候必须指定媒体类型;

  • 逗号或者 or:查询条件满足一项即可匹配;

  • /* 用户设备的最小高度为680px或为纵向模式的屏幕设备 */
    @media (min-height: 680px), screen and (orientation: portrait) {}
    

响应式布局容器

响应式需要一个父级做为布局容器,来配合子级元素来实现变化效果。

原理就是在不同屏幕下,通过媒体查询来改变布局容器的大小,再改变里面子元素的排列方式和大小,从而实现不同屏幕下,看到不同的页面和样式变化。

<head>
  <style>
    .container {
      height: 150px;
      background-color: gray;
      margin: 0 auto;
      padding: 0;
    }
    /* 超小屏幕下,小于768px,布局容器宽度显示 100% */
    @media screen and (max-width: 767px) {
      .container {
        width: 100%;
      }
    }
    /* 小屏幕下,大于等于768px,布局容器宽度显示 750px */
    @media screen and (min-width: 768px) {
      .container {
         width: 750px;
      }
    }
    /* 中等屏幕下,大于等于 992px,显示 970px */
    @media screen and (min-width: 992px) {
      .container {
        width: 970px;
      }
    }
    /* 大屏幕下,大于等于 1200px,显示 1170px */
    @media screen and (min-width: 1200px) {
      .container {
        width: 1170px;
      }
    }
  </style>
</head>
<body>
  <!-- 响应式开发里面首先需要一个布局容器 -->
  <div class="container"></div>
</body>