响应式布局-媒体查询media基本操作和一般适配方案

📖媒体查询media是CSS3中引入的功能,可以根据设备的特性,如屏幕宽度、设备类型和分辨率等,动态调整网页样式和布局。开发中我们可能会接触各种设备和屏幕尺寸,通过响应式布局优化用户体验的效果。 阅读文章可以学会

  • 🥰媒体查询基本知识
  • 🎉media实操
  • 🔨项目的一般适配方案

前置知识

用一张图概括media语法

运算符

  • not : 取反运算符
    • 如果满足media query则不生效,否则生效
    • 如果出现在以逗号分隔的查询列表中,它将仅否定应用了该查询的特定查询
    • 必须指定媒体类型
  • only : only 运算符
    • 仅在整个查询匹配时才用于应用样式
    • 必须指定媒体类型
  • , (逗号) 类似逻辑或运算符
    • 用于将多个媒体查询合并为一个规则
    • 如果列表中的任何查询为 true,则整个 media 语句均返回 true
  • and : 与运算符
    • 用于将多个媒体查询规则组合成单条媒体查询,当每个查询规则都为 true 时则该条媒体查询为 true
    • 还用于将媒体功能与媒体类型结合在一起

媒体类型 media type

  • all 用于所有设备
  • screen 用于电脑屏幕,平板电脑,智能手机等
  • print 用于打印机和打印预览
  • speech 应用于屏幕阅读器等发声设备 还有一些例如aural、braille、embossed、nandheld等都已废弃

其实我们大多就只使用screen这个类型,其他基本接触不到,结合运算符,其实大多情况下,下面三条语句等同

css 复制代码
@media only screen and (query){
}

@media all and (query){
}

@media (query){
}

再举一个print例子

css 复制代码
@media print {
    body {
        color: blue;
    }
}

常见的query

(max/min)-(width/height)

举例 (max-width: 400px) 表示如果宽度小于400px,应用重载样式(当然其他判断条件也要成立)

下面三个查询语句效果相同

css 复制代码
/* @media  (max-width: 400px){} */ 
/* @media  all and (max-width: 400px){} */
@media only screen and (max-width: 400px) {
    h2 {
        font-size: 0.9rem;
    }
    p {
        font-weight: 600;
    }
    body {
        color: blue;
    }
}

(min-width: 600px) 表示如果宽度大于600px,应用重载样式

css 复制代码
/* @media  (min-width: 600px){} */
/* @media  all and (min-width: 600px){} */
@media only screen and (min-width: 600px) {
    h2 {
        font-size: 0.9rem;
    }
    p {
        font-weight: 600;
    }
    body {
        color: blue;
    }
}

max/min - height 和上面实现类似

orientation 方向

landscape(横向) 注意观察长和宽的值 当长 > 宽就是横向

css 复制代码
@media (orientation:landscape) {
    body {
        color: blue;
    }
}
  • portrait(竖向)类似

aspect-ratio 纵横比

和上面orientation类似,但是数值更具体一些

css 复制代码
@media (min-aspect-ratio: 8/5) {
    body {
        color: red;
    }
}
@media (max-aspect-ratio: 3/2) {
    body {
        color: blue;
    }
}
@media (aspect-ratio: 1/1) {
    body {
        color: green;
    }
}

上面语句表示

  • 当aspect-ratio > 8/5 时 显示红色
  • aspect-ratio < 3/2 显示蓝色
  • 3/2 < aspect-ratio < 8/5 显示默认颜色
  • aspect-ratio == 1 / 1 显示绿色

一般解决方案

移动端响应式设计容器的预定义媒体查询 xs、sm、md、lg、xl、2xl分别表示extra small、small、medium、large、extra large、2 extra large

css 复制代码
.container {
  width: 100%;
  margin: 0 auto;
}

/* xs */
@media (min-width: 475px) {
  .container {
    max-width: 475px;
  }
}

/* sm */
@media (min-width: 640px) {
  .container {
    max-width: 640px;
  }
}

/* md */
@media (min-width: 768px) {
  .container {
    max-width: 768px;
  }
}

/* lg */
@media (min-width: 1024px) {
  .container {
    max-width: 1024px;
  }
}

/* xl */
@media (min-width: 1280px) {
  .container {
    max-width: 1280px;
  }
}

/* 2xl */
@media (min-width: 1536px) {
  .container {
    max-width: 1536px;
  }
}

pc端响应式设计容器的预定义媒体查询

css 复制代码
.container {
  max-width: 1536px;
  margin:0 auto;
}

/* 2xl */
@media (max-width: 1536px) {
  .container {
    max-width: 1280px;
  }
}

/* xl */
@media (max-width: 1280px) {
  .container {
    max-width: 1024px;
  }
}

/* lg */
@media (max-width: 1024px) {
  .container {
    max-width: 768px;
  }
}

/* md */
@media (max-width: 768px) {
  .container {
    max-width: 640px;
  }
}

/* sm */
@media (max-width: 640px) {
  .container {
    max-width: 475px;
  }
}

/* xs */
@media (max-width: 475px) {
  .container {
    width: 100%;
  }
}

响应效果

参考

相关推荐
lichenyang45311 分钟前
IPC、JSVM、UIThread、libuv:ASCF 架构图里最容易混的几个词
前端
用户0595401744614 分钟前
Redis记忆存储故障恢复测试踩坑实录:手动测试让我漏掉了2个一致性Bug
前端·css
用户21366100357217 分钟前
Vue2脚手架工程化与Axios集成
前端·vue.js
我不是外星人24 分钟前
我把 Claude Code 搬到网页!自研高颜值 Web 交互工作台
前端·ai编程·claude
mixuecoding34 分钟前
零成本搭建全球科技热点情报站:12 个平台,6 小时,0 元
前端
用户0595401744639 分钟前
用了3年Mock,才发现Redis记忆存储的测试一直漏掉了60%的边界场景
前端·css
石小石Orz41 分钟前
AI具身交互:实现一个会说话的3D虚拟伴侣
前端·人工智能·后端
Muen1 小时前
iOS设计模式-外观Facade
前端
Cobyte1 小时前
21.Vue Vapor 组件的实现原理
前端·javascript·vue.js
前端双越老师1 小时前
我从 0 开发的 AI Agent 智语项目发布了
前端·node.js·agent