CSS @media 规则

CSS @media 语法

在 CSS 中,@media 规则用于根据设备的特征(如屏幕尺寸、设备方向等),动态地应用不同的样式。

语法:

@media 媒体类型 and (媒体特性) {
    /* 当条件满足时应用的 CSS 样式 */
}

说明:

对于 “媒体类型” 来说,常见的有以下几种(如下表所示)。

@media 媒体类型
类型 说明
screen 适用于屏幕设备(如电脑、手机、平板等)
print 适用于打印设备
all 适用于所有设备

对于 “媒体特性” 来说,常见的有以下几种。

@media 媒体特性
特性 说明
width 视口的宽度
height 视口的高度
orientation 设备的方向(例如纵向或横向)
min-width 视口的最小宽度
max-width 视口的最大宽度

我们可以使用 “逻辑运算符” 来组合多个媒体查询:

  • and:多个条件都满足时才应用样式。
  • or(逗号 ,):只要满足其中一个条件,就应用样式。
  • not:用于排除某个特定的媒体查询条件。
  • only:确保旧版浏览器不应用某个媒体查询的样式。

在现代浏览器中,我们可以使用更直观的数学符号来编写媒体查询。 比如:@media (max-width: 600px) 可以简写为 @media (width <= 600px)。

提示: 实际上,绿叶网之所以能在 PC 端和移动端会有不同的布局效果,就是使用了 CSS 媒体查询(@media)来实现的。

CSS @media 摘要

属于 CSS 媒体查询
使用频率
是否继承
默认值
兼容性 查看
官方文档 查看
MDN 查看

CSS @media 示例

接下来,我们通过几个简单的例子来讲解一下 CSS @media 规则是如何使用的。

示例 1:@media 根据 “视口宽度” 应用不同样式

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        /* 默认样式(大于等于 600px) */
        body {
            background-color: lightgreen;
            font-size: 24px;
        }

        /* 当屏幕尺寸小于 600px 时 */
        @media screen and (max-width: 600px) {
            body {
                background-color: lightblue;
                font-size: 16px;
            }
        }
    </style>
</head>
<body>
    <h3>绿叶网</h3>
    <p>为好教程,全力以赴</p>
</body>
</html>

默认情况下,页面效果如下图 1 所示。当屏幕尺寸小于 600 px 时,页面效果如下图 2 所示。

@media 根据 “视口宽度” 应用不同样式(1)

@media 根据 “视口宽度” 应用不同样式(2)

分析:

在这个例子中,我们使用了 @media 规则来根据视口宽度应用不同样式。当视口宽度小于 600px 时,背景会变为浅蓝色,并且字体变小;当宽度大于或等于 600px 时,背景会变为浅绿色,并且字体变大。

提示: 在实际开发中,根据视口宽度应用不同样式,这是 @media 最常见的应用场景。

示例 2:@media 根据 “设备方向” 应用不同布局

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        body {
            font-family: Arial, sans-serif;
            text-align: center;
        }
        .container {
            width: 90%;
            margin: 20px auto;
            border: 2px solid #333;
            padding: 10px;
            background-color: #f4f4f4;
        }
        
        /* 当设备处于纵向模式(高度大于宽度)时 */
        @media (orientation: portrait) {
            .container {
                background-color: #ffe6e6;
            }
        }
        /* 当设备处于横向模式(宽度大于高度)时 */
        @media (orientation: landscape) {
            .container {
                background-color: #e6ffef;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>绿叶网</h1>
        <p>为好教程,全力以赴。</p>
    </div>
</body>
</html>

当设备处于纵向模式(高度大于宽度)时,页面效果如下图 1 所示。当设备处于横向模式(宽度大于高度)时,页面效果如下图 2 所示。

@media 根据 “设备方向” 应用不同布局(1)

@media 根据 “设备方向” 应用不同布局(2)

分析:

在这个例子中,我们使用了 @media 规则来根据设备(如手机或平板)的横向(landscape)或纵向(portrait)模式来调整布局。

  • @media (orientation: portrait):表示在设备处于纵向模式时将 .container 的背景色设置为浅红色。
  • @media (orientation: landscape):表示在设备处于横向模式时将 .container 的背景色设置为浅绿色。

示例 3:@media 为 “打印设备” 设置特定样式

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        /* 屏幕显示样式 */
        body {
            font-family: 'Times New Roman', Times, serif;
            color: #333;
        }
        header, nav, footer {
            background-color: #eee;
            padding: 10px;
            border-bottom: 1px solid #ccc;
        }

        /* 打印时应用此样式 */
        @media print {
            nav, footer {
                display: none;   /* 打印时隐藏导航和页脚 */
            }
            body {
                font-family: Georgia, serif;
                font-size: 12pt;
                color: #000;
            }
            a {
                text-decoration: none;   /* 打印时移除链接下划线 */
                color: #000;
            }
            a[href]:after {
                content: " (" attr(href) ")";   /* 在链接后显示URL */
            }
        }
    </style>
</head>
<body>
    <header>
        <h1>绿叶网</h1>
    </header>
    <nav>
        <ul>
            <li><a href="#">教程</a></li>
            <li><a href="#">手册</a></li>
            <li><a href="#">工具</a></li>
            <li><a href="#">课程</a></li>
        </ul>
    </nav>
    <main>
        <p>为好教程,全力以赴。</p>
        <p>……</p>
        <p>……</p>
    </main>
    <footer>
        <p>版权所有 © 2025</p>
    </footer>
</body>
</html>

页面效果如下图所示。

@media 为 “打印设备” 设置特定样式

分析:

在这个例子中,我们使用了 @media 规则来为打印设备定义特殊的样式,例如移除导航菜单和调整字体以节省墨水。

上一篇: @规则

下一篇: @keyframes

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号