CSS - 媒體查詢



CSS中的媒體查詢用於根據螢幕尺寸、解析度和其他使用者裝置特性應用不同的CSS樣式。媒體查詢使用@media規則,在滿足特定條件時包含額外的CSS屬性塊。媒體查詢也可用於單獨設定頁面的可列印版本樣式。

語法

@media not|only mediatype and (media feature) and (media feature) {
    CSS-Code;
}

這裡,media-type可以是screen、print、speech等,而media-feature可以是寬度、高度、縱橫比、方向等特性。

你可能已經注意到,同一個網站在移動裝置和桌面裝置上的顯示效果不同。這種螢幕相關的樣式是使用CSS媒體查詢實現的。在本教程中,我們將學習媒體查詢及其相關的屬性。

目錄


 

媒體型別

媒體型別用於CSS媒體查詢,根據裝置應用不同的樣式。最常見的媒體型別是allprintscreen。如果未指定媒體型別,則匹配所有裝置。

  • all: 預設值。此值適用於所有媒體型別。
  • print: 此值僅在列印文件時有效。
  • screen: 此值僅對螢幕有效,例如計算機、平板電腦和智慧手機。
JavaScript提供了一個名為CSSMediaRule的CSS物件模型介面,可用於訪問使用@media CSS @規則建立的規則。

CSS媒體型別Print

有時為使用者生成的列印版本不需要螢幕中顯示的所有樣式。列印版本通常以灰度樣式或簡單的淺色生成。建議這種設計,因為深色背景會消耗印表機更多的墨水。

示例

以下示例演示了使用媒體型別為print的CSS媒體查詢。

<!DOCTYPE html>
<html>
<head>
    <style>
        body{
            background-color: black;
            color: white;
            padding: 10px;
        }
        @media print {
            body { 
                background-color: white;
                color: black;
                padding: 10px;
            }
        }
        button {
            background-color: aqua;
            padding: 5px;
        }
    </style>
</head>
<body>
    <h3> Tutorialspoint </h3>
    <p>CSS Media Type - Print</p>
    <p>
        Background is white for printable version of this page.
        Check out...
    </p>

    <button onclick="printPage()">Print Page</button>
    <script>
    function printPage() {
        window.print();
    }
    </script>
</body>
</html>

CSS媒體型別All

這用於指定在所有螢幕尺寸、可列印版本和其他版本中使用的通用樣式。

示例

以下示例演示了使用媒體型別為all的CSS媒體查詢。

<!DOCTYPE html>
<html>
<head>
    <style>
        @media all {
            body{
                background-color: black;
                color: white;
                padding: 10px;
            }
        }
    </style>
</head>

<body>
    <h3>Tutorialspoint </h3>
    <p> CSS Media Type - All </p>
    <p> 
        In printable version or any screen size, the 
        styles of this page is same.
    </p>
    <button onclick="printPage()">
        Print Page
    </button>
    <script>
        function printPage() {
        window.print();
        }
    </script>
</body>
</html>

CSS媒體型別Screen

此值僅對螢幕有效,例如計算機、平板電腦和智慧手機。

示例

以下示例演示瞭如果螢幕尺寸大於500px,背景顏色將更改為粉紅色,文字顏色將更改為藍色。

<!DOCTYPE html>
<html>
<head>
    <style>
        .container {
            display: flex;
            flex-direction: row;
            padding: 10px;
            gap: 10px;
        }
        .child{
            padding: 10px;
            background-color: #f0f0f0;
            border: 2px solid;
        }
        @media screen and (max-width: 500px) {
            .container {
                flex-direction: column;
            }
        }
    </style>
</head>
<body>
    <p>
        Orientation of child elements depend on screen size,
        for screen size less than 500px, children align in 
        two different columns. 
    </p>
    <div class="container">
        <div class="child" > HTML </div>
        <div class="child"> CSS </div>
    </div>
</body>
</html>

媒體查詢的寬度範圍

在媒體查詢中,也可以這樣指定螢幕寬度範圍。

@media (width > 700px) {
   /* Styles for screens that are at least 700px wide */
}    

示例

以下示例演示了當螢幕寬度在600px到800px之間時,背景顏色更改為黃色,文字顏色更改為紅色。

<!DOCTYPE html>
<html>
<head>
    <style>
    p {
        color: blue;
    }
    @media (600px < width < 800px) {
        p {
            background-color: yellow;
            color: red;
        }
    }
    </style>
</head>

<body>
    <h1>Tutorialspoint</h1>
    <p>CSS Media Type - Screen</p>
    <p>Resize the browser size to see the effect.</p>
</body>

</html>

逗號分隔的媒體型別

媒體查詢中的逗號類似於邏輯“OR”運算子。

以下宣告將應用於螢幕寬度小於500px或可列印版本。也可以使用OR運算子代替逗號。

@media (min-width: 500px), print {
    /* Styles */
}    

示例

以下示例演示了使用逗號分隔的媒體型別。在列印模式下以及螢幕尺寸>500px時,背景顏色會發生變化。

<!DOCTYPE html>
<html>

<head>
    <style>
        body {
            background-color: white;
            color: black;
        }
        @media (min-width: 500px), print {
            body {
                background-color: black;
                color: white;
            }
        }
    button {
        background-color: violet;
        padding: 5px;
    }
    </style>
</head>

<body>
    <h1>CSS Media Type - Screen and Print</h1>
    <p>
        Resize the window to less than 500px to see the 
        background and font color changes to default.
    </p>

    <p>
        Click on below button to see the effect when you 
        print the page. ( Enable background graphics options 
        if any at print section )
    </p>
    <button onclick="printPage()">Print Page</button>
    <script>
        function printPage() {
            window.print();
        }
    </script>
</body>
</html>

僅使用CSS媒體型別

僅使用媒體型別僅在整個媒體查詢匹配時才應用樣式。這有助於防止舊版瀏覽器應用樣式。

示例

以下示例演示了當螢幕寬度在500px到700px之間時,背景顏色更改為粉紅色,文字顏色更改為藍色。

<!DOCTYPE html>
<html>

<head>
    <style>
    body {
        color: red;
    }
    @media only screen and (min-width: 500px) and (max-width: 700px) {
        body {
            color: blue;
            background-color: pink;
        }
    }
    </style>
</head>
<body>
   <h1>Tutorialspoint</h1>
   <p>CSS Media Type - Screen</p>
   <p>
    Resize the browser window to see the effect.
</p>
</body>
</html>

CSS媒體查詢AND運算子

AND運算子用於組合媒體查詢中的多個條件。這兩個條件都必須為真,樣式才能應用。

示例

此示例演示了當螢幕寬度在500px到700px之間時,將新增樣式。

<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en">
<head>
    <style>
        body {
            background-color: lightgray;
            color: black;
        }
        @media (min-width: 500px) and (max-width: 700px) {
            body {
                background-color: lightgreen;
                color: blue;
            }
        }
    </style>
</head>
<body>
    <h1> Media Query with AND Operator</h1>
    <p> 
        Resize the browser window between 500px and 700px 
        to see the effect.
    </p>
</body>
</html>

媒體查詢NOT運算子

NOT運算子否定媒體查詢,僅當媒體查詢不匹配時才應用樣式。

NOT運算子在媒體查詢中最後進行評估,因此上述媒體查詢將按如下方式評估。

@media not (all and (monochrome)) {
   /* … */
}

/* It's not evaluated like this:*/ 
@media (not all) and (monochrome) {
    /* … */
 }

示例

在此示例中,NOT運算子否定條件width < 700。

<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en">
<head>
    <style>
        body {
            background-color: lightgray;
            color: black;
        }
        @media not screen and (width < 700px) {
            body {
                background-color: orange;
                color: white;
            }
        }
    </style>
</head>
<body>
    <h1> Media Query with NOT Operator </h1>
    <p> 
        Resize the browser window to less than 700px 
        to see the effect.
    </p>
</body>
</html>

建立複雜的媒體查詢

可以使用andnotonly運算子組合多個條件來建立複雜的媒體查詢。還可以將多個媒體查詢組合成逗號分隔的列表。

示例

在此示例中,我們組合了多個媒體查詢,嘗試更改瀏覽器寬度以檢視多種效果。

<!DOCTYPE html>
<html>
<head>
    <style>
        body {
            background-color: lightgray;
            color: black;
        }
        @media only screen and (min-width: 500px) and (max-width: 700px) {
            body {
                background-color: pink;
                color: blue;
            }
        }
        @media not screen and (max-width: 700px) {
            body {
                background-color: orange;
                color: white;
            }
        }
    </style>
</head>

<body>
    <h1> 
        Media Query with AND, NOT, and ONLY Operators 
    </h1>
    <p> 
        Resize the browser window to see the effects.
    </p>
</body>
</html>

CSS媒體查詢螢幕方向

我們可以為使用者裝置的特定方向(橫向或縱向)定義樣式。此預設值為縱向。

@media (orientation: portrait) {
    /* Styles */
}

示例

以下示例演示了當螢幕寬度大於500px且裝置處於橫向方向時,文字顏色更改為藍色。

<!DOCTYPE html>
<html>

<head>
    <style>
        body {
            color: red;
        }
        @media (min-width: 500px) and (orientation: landscape) {
            body {
                color: blue;
            }
        }
    </style>
</head>

<body>
    <h3>Resize the browser window to see the effect.</h3>
    <p>
        The text color changed to blue when the viewport width is 
        at least 500px and the device is in landscape orientation.
    </p>
</body>
</html>

媒體查詢功能列表

CSS媒體查詢功能用於根據特定特性、輸出裝置或環境將不同的樣式應用於網頁。

以下是與媒體功能相關的CSS屬性列表。

媒體功能 描述 示例
any-hover 檢查使用者的任何輸入裝置是否可以將滑鼠懸停在頁面上的元素上。
any-pointer 確定使用者是否擁有指向裝置(例如滑鼠)以及該裝置是否準確。
aspect-ratio 檢查視口或渲染表面的縱橫比。
color 指定輸出裝置所需的顏色分量的位數。
color-gamut 根據使用者裝置可以顯示的顏色範圍,將不同的樣式應用於網頁。
color-index 檢查裝置可以顯示多少種顏色。
device-aspect-ratio 檢查輸出裝置的寬度和高度之間的縱橫比。此媒體功能已過時,很少使用。請改用aspect-ratio媒體功能。
device-height 檢查輸出裝置顯示區域的高度。此媒體功能已過時,很少使用。請改用height媒體功能。
device-width 檢查輸出裝置顯示區域的寬度。此媒體特性已過時,很少使用。建議使用 width 媒體特性。
display-mode 根據 web 應用程式的當前顯示模式檢測和設定 web 內容樣式。(fullscreen | standalone | minimal-ui | browser | window-controls-overlay)
dynamic-range 檢查使用者代理和輸出裝置是否支援高亮度、對比度和色深。
forced-colors 檢查使用者是否在其裝置上啟用了強制顏色模式。
grid 檢查使用者裝置或螢幕是否支援網格佈局。
height 確定視窗的高度。
hover 確定使用者的裝置是否能夠懸停在元素上。
monochrome 確定輸出裝置的單色幀緩衝區中用於表示每個畫素的位數。
orientation 檢查裝置的螢幕或頁面是處於縱向還是橫向。
overflow-block 確定使用者裝置如何處理垂直方向上超出初始容器邊界的內容。
overflow-inline 確定使用者裝置如何處理水平方向上超出初始容器邊界的內容。
pointer 檢查使用者是否擁有可以用來指向和點選的指向裝置,例如滑鼠或觸控式螢幕。
prefers-color-scheme 確定使用者是否更傾向於網站使用淺色模式或深色模式。
prefers-contrast 檢查使用者是否希望網站具有更高或更低的對比度。
prefers-reduced-motion 檢查使用者是否在其裝置上啟用了設定以減少不必要的移動動畫。
resolution 檢查螢幕上每英寸顯示的畫素數量。
width 確定視窗的寬度。
update 檢查使用者裝置更改內容外觀後,內容在螢幕上的顯示效果。
廣告
© . All rights reserved.