

CSS媒体查询是CSS层叠样式表(Cascading Style Sheets)中的一个核心功能,它使得开发者能够根据不同的设备特性和环境条件来应用不同的样式规则。这是实现响应式网页设计的关键技术,确保网站或应用能够在多种设备上,包括桌面、平板、手机等,提供良好的用户体验。
媒体查询的基本结构如下:
@media media-type and (media-feature: value) {
/* CSS 样式规则 */
}
选项解释
常见媒体特性
CSS媒体查询支持多种媒体特,以下是一些常用的媒体特性的详细说明:
假设我们要为宽度小于等于480px的设备设置特定样式,可以这样写:
@media (max-width: 480px) {
body {
font-size: 14px;
}
}
这段代码意味着,当视口宽度不超过480像素时,body元素的字体大小会被设置为14像素。
复杂的设计可能需要结合多个条件,例如:如果视口宽度在大于480,小于1000的时候,body元素的字体大小会被设置为18像素;如果视口宽度大于1000的时候,body元素的字体大小会被设置为22像素
@media (min-width: 480px) and (max-width: 1000px) {
body{
font-size: 18px;
}
}
@media (min-width: 1000px) {
body{
font-size: 22px;
}
}
媒体查询广泛应用于响应式设计中,允许开发者根据不同设备的特性和用户的浏览环境,灵活地调整布局、字体大小、图片尺寸等,确保内容的可读性和易用性。
以下是几个CSS媒体查询的实战例子,这些示例覆盖了响应式设计中常见的应用场景:
在屏幕宽度小于600px时减小文本的字体大小,以提高阅读体验。
@media (max-width: 600px) {
body {
font-size: 14px;
}
}
当屏幕宽度足够大时,显示水平导航栏;当屏幕较窄时,将其转换为垂直折叠式导航。
/* 默认样式,可能适用于移动端 */
.navbar {
display: flex;
flex-direction: column;
}
/* 当屏幕宽度至少为768px时,变为水平布局 */
@media (min-width: 768px) {
.navbar {
flex-direction: row;
}
}
在小屏幕上隐藏某些非核心内容或组件,以减少信息密度,提升用户体验。
.sidebar {
display: block;
}
@media (max-width: 992px) {
.sidebar {
display: none;
}
}
根据屏幕尺寸加载不同分辨率的图片,节省流量并提升加载速度。
"image-mobile.jpg" srcset="image-desktop.jpg 1024w, image-tablet.jpg 768w" alt="Example Image">
@media (min-width: 769px) {
img[src*="mobile"] {
content: url("image-tablet.jpg");
}
}
@media (min-width: 1025px) {
img[src*="tablet"] {
content: url("image-desktop.jpg");
}
}
在不同屏幕尺寸下自动调整网格布局,比如从单列到两列再到多列布局。
.container {
display: grid;
grid-template-columns: repeat(1, 1fr);
}
@media (min-width: 768px) {
.container {
grid-template-columns: repeat(2, 1fr);
}
}
@media (min-width: 1024px) {
.container {
grid-template-columns: repeat(3, 1fr);
}
}
以上示例展示了媒体查询如何帮助我们根据不同的设备条件和屏幕尺寸来调整网页的视觉表现,从而实现更加灵活和优化的响应式设计。当然,还有一些更高级的用法,以实现更细致的设备特性和更精细的布局调整方面的灵活性。
当屏幕宽度在992px到1199px之间,并且设备处于横屏状态时,对页面布局进行特殊调整。
@media (min-width: 992px) and (max-width: 1199px) and (orientation: landscape) {
.content {
grid-template-columns: 2fr 1fr;
}
.sidebar {
order: 1;
}
}
在触摸屏设备上启用更平滑的滚动体验。
@media (hover: none) and (pointer: coarse) {
body {
overflow-y: scroll;
-webkit-overflow-scrolling: touch;
}
}
针对具有高色彩深度显示的设备提供更高品质的图像资源。
@media (color-gamut: p3) {
.high-color-image {
content: url('image-p3-color-gamut.jpg');
}
}
根据设备的像素密度调整字体大小,以确保在不同设备上字体的物理尺寸一致。
@media (min-resolution: 2dppx) {
body {
font-size: calc(16px + (24 - 16) * ((100vw - 320px) / (1600 - 320)));
}
}
在宽屏设备上保持视频的宽高比,并在窄屏设备上全屏显示视频。
@media (min-aspect-ratio: 16/9) {
video {
width: 100%;
height: auto;
}
}
@media (max-aspect-ratio: 16/9) {
video {
width: auto;
height: 100%;
}
}
今天分享的内容非常干,也很实用,得空好好消化一下吧。
