px、em 和 rem 的區別:深入理解 CSS 中的單位

文章目錄

    • 前言
    • 一、`px` - 像素 (Pixel)
    • 二、`em` - 相對父元素字體大小 (Ems)
    • 三、`rem` - 相對于根元素字體大小 (Root Ems)
    • 四、綜合比較
    • 結語


前言

在CSS中,pxemrem是三種用于定義尺寸(如寬度、高度、邊距、填充等)的長度單位。它們各自有不同的特性,適用于不同的場景。接下來我們將更詳細地探討這三種單位。


一、px - 像素 (Pixel)

  • 定義
    • px代表像素,是一個絕對單位,它的大小固定且與設備無關,通常表示屏幕上一個點的大小。
  • 計算方式
    • 在大多數現代顯示器上,1px等于屏幕上的一個物理像素點。然而,在高分辨率顯示器(例如Retina顯示屏)上,1px可能對應多個物理像素以保持視覺清晰度。
  • 適用場景
    • 當你需要精確控制元素的尺寸或位置時,比如設計圖標或需要對齊的圖形元素。
    • 對于需要保證一致性的布局部分,如導航欄的高度或按鈕的尺寸。
  • 使用方法
    • 直接為屬性賦值,無需考慮上下文環境的影響。
    /* 設置一個div的寬度為200像素 */
    div {width: 200px;
    }
    
  • 注意事項
    • 使用px可能會限制頁面的響應性和可訪問性,因為用戶無法通過瀏覽器設置輕松調整文本大小。
    • 在移動設備上,固定的px值可能不適合所有屏幕尺寸,影響用戶體驗。

二、em - 相對父元素字體大小 (Ems)

  • 定義
    • em是一種相對單位,其值基于當前元素的字體大小。如果未特別指定,則默認為繼承自父元素的字體大小。1em等于當前元素的字體大小。
  • 計算方式
    • 如果一個元素沒有明確指定字體大小,它會從最近的非靜態定位的祖先元素繼承字體大小。因此,em的值依賴于上下文環境中的字體大小設定。
  • 適用場景
    • 適合創建可以隨著父元素變化而自動調整的靈活布局。
    • 可以用作字體大小的單位,使整個文檔樹能夠根據根元素的比例縮放。
  • 使用方法
    • em的值是相對于直接父元素的字體大小。對于嵌套的元素,子元素的em值會累積,即子元素的尺寸是基于父元素的em值計算的。
    /* 如果html的字體大小是16px,默認情況下,下面的p標簽將有32px的字體大小 */
    p {font-size: 2em; /* 2 * 父元素的字體大小 */
    }/* 子元素的em值會累積 */
    .parent {font-size: 2em;
    }
    .parent .child {font-size: 1.5em; /* 1.5 * parent的字體大小 = 3em = 48px */
    }
    
  • 注意事項
    • 因為em是相對于父元素的字體大小,所以在嵌套結構中,每個子元素的em值都是基于其直接父元素的字體大小,這可能導致尺寸累積效應,增加計算復雜度。
    • 如果不注意,這種累積效應可能會導致難以預料的結果,特別是在深層次嵌套的情況下。

三、rem - 相對于根元素字體大小 (Root Ems)

  • 定義
    • rem也是一種相對單位,但它不是相對于父元素,而是相對于HTML文檔的根元素(即<html>標簽)的字體大小。這意味著無論元素位于DOM樹的哪個位置,rem的值都是一致的。
  • 計算方式
    • 1rem等于HTML根元素的字體大小。如果未指定,則默認為瀏覽器的默認字體大小,通常是16px。
  • 使用場景
    • 創建完全獨立于任何特定父元素的響應式設計,確保所有元素按照相同的基準進行縮放。
    • 簡化了復雜的嵌套結構中的尺寸管理問題,因為不需要考慮父元素的影響。
  • 使用方法
    • rem的值是相對于根元素的字體大小。你可以通過改變根元素的字體大小來統一調整整個頁面的尺寸。
    /* 設定根元素的字體大小 */
    html {font-size: 62.5%; /* 默認16px -> 10px */
    }/* 根據根元素字體大小設定其他元素 */
    body {font-size: 1.4rem; /* 1.4 * 10px = 14px */
    }h1 {font-size: 2.4rem; /* 2.4 * 10px = 24px */
    }/* 修改根元素字體大小會影響所有rem單位 */
    @media (min-width: 768px) {html {font-size: 75%; /* 新的1rem = 12px */}
    }
    
  • 注意事項
    • 要想讓rem生效,最好是在全局樣式表中設定根元素的字體大小。例如,可以通過html { font-size: 62.5%; }將默認字體大小設置為10px,使得后續的rem計算更加直觀。
      在一些舊版本的瀏覽器中可能存在兼容性問題,但目前主流瀏覽器都已經支持rem

四、綜合比較

特性/單位pxemrem
類型絕對單位相對單位相對單位
參考點屏幕像素父元素字體大小根元素字體大小
適用場景需要精確控制的元素深層次嵌套結構全局響應式設計
優點精確、易于預測靈活、適應性強易維護、一致性好
缺點不利于響應式設計計算復雜、易出錯可能需要額外配置

結語

選擇哪種單位取決于你的具體需求以及你希望給用戶提供的體驗。對于那些追求像素級精度的設計師來說,px可能是最好的選擇;而對于想要創建更加靈活和響應式的網頁,em和rem則是更好的選項。特別是rem,由于其簡化了尺寸管理,并且提供了良好的可訪問性支持,因此在現代Web開發中越來越受歡迎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/66056.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66056.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66056.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【CI/CD構建】關于不小心將springMVC注解寫在service層

背景 之前寫一個接口的時候沒有察覺到將RequestBody這個注解帶到service層了。 今天提交代碼的時候&#xff0c;插件沒有檢測到這個低級錯誤&#xff0c;導致試飛構建連maven編譯都過不了&#xff0c;maven找不到程序包org.springframework.web.bind.annotation這個包 結果…

Oracle Dataguard(主庫為雙節點集群)配置詳解(4):配置備庫

Oracle Dataguard&#xff08;主庫為雙節點集群&#xff09;配置詳解&#xff08;4&#xff09;&#xff1a;配置備庫 目錄 Oracle Dataguard&#xff08;主庫為雙節點集群&#xff09;配置詳解&#xff08;4&#xff09;&#xff1a;配置備庫一、為備庫配置靜態監聽1、配置 li…

《深入理解Mybatis原理》Mybatis中的緩存實現原理

一級緩存實現 什么是一級緩存&#xff1f; 為什么使用一級緩存&#xff1f; 每當我們使用MyBatis開啟一次和數據庫的會話&#xff0c;MyBatis會創建出一個SqlSession對象表示一次數據庫會話。 在對數據庫的一次會話中&#xff0c;我們有可能會反復地執行完全相同的查詢語句&…

win32匯編環境,窗口程序中單選框的一般操作示例

;運行效果 ;win32匯編環境,窗口程序中單選框的一般操作示例 ;比如在窗口程序中生成單選框&#xff0c;默認哪項選中&#xff0c;判斷當前選中哪一項&#xff0c;讓哪項選中&#xff0c;得到選中項的名稱等 ;直接抄進RadAsm可編譯運行。重點部分加備注。 ;以下是ASM文件 ;>&g…

從transformer到informer

Transformer和Informer都是深度學習領域中的模型架構&#xff0c;它們主要用于處理序列數據&#xff0c;如自然語言處理&#xff08;NLP&#xff09;和時間序列預測任務。 **Transformer**&#xff1a; Transformer模型最初在2017年由Google的研究者提出&#xff0c;它在NLP領…

hive知識體系

hive知識體系 hive知識體系 鏈接: 1Hive概覽 鏈接: 2Hive表類型 鏈接: 3Hive數據抽樣 鏈接: 4Hive計算引擎 鏈接: 5Hive存儲與壓縮 鏈接: 6Hive Sql 大全 鏈接: 6Hive Sql 大全-Hive 函數 鏈接: 6Hive Sql 大全-窗口函數 鏈接: 7Hive執行計劃 鏈接: 8Hive SQL底層執行原理 鏈接…

優化 Azure Synapse Dedicated SQL Pool中的 SQL 執行性能的經驗方法

在 Azure Synapse Dedicated SQL Pool中優化 SQL 執行涉及了解底層體系結構&#xff08;例如分布和分區&#xff09;、查詢優化&#xff08;例如避免不必要的子查詢和聯接&#xff09;&#xff0c;以及利用具體化視圖和 PolyBase 等工具進行高效數據加載。 1.有效使用分布和分…

個人主頁搭建全流程(Nginx部署+SSL配置+DCDN加速)

前言 最近開始準備秋招&#xff0c;打算做一個個人主頁&#xff0c;以便在秋招市場上更有競爭力。 目前&#xff0c;現有的一些搭建主頁的博文教程存在以下一些問題&#xff1a; 使用Github Page進行部署&#xff0c;這在國內訪問容易受阻使用寶塔面板等框架&#xff0c;功能…

Spring MVC簡單數據綁定

【圖書介紹】《SpringSpring MVCMyBatis從零開始學&#xff08;視頻教學版&#xff09;&#xff08;第3版&#xff09;》_springspringmvcmybatis從零開始 代碼、課件、教學視頻與相關軟件包下載-CSDN博客 《SpringSpring MVCMyBatis從零開始學(視頻教學版)&#xff08;第3版&…

嵌入式系統Linux實時化(四)Xenomai應用開發測試

1、Xenomai 原生API 任務管理 Xenomai 本身提供的一系列多任務調度機制,主要有以下一些函數: int rt_task_create (RT_TASK task, const char name, int stksize, int prio, intmode) ; 任務的創建;int rt_task_start(RT_TASK task, void(entry)(void cookie), void cookie…

如何在Ubuntu上安裝和配置Git

版本控制系統&#xff08;VCS&#xff09;是軟件開發過程中不可或缺的工具之一&#xff0c;它幫助開發者跟蹤代碼變更、協作開發以及管理不同版本的項目。Git作為當前最流行的分布式版本控制系統&#xff0c;因其高效性和靈活性而廣受青睞。本文將指導你如何在Ubuntu操作系統上…

[python] bisect_right

等價于C中的upper_bound bisect_right 函數介紹 在Python的 bisect 模塊中&#xff0c; bisect_right &#xff08;別名 bisect &#xff09;用于在有序序列中查找插入點。插入點是在序列中插入元素后&#xff0c;序列仍保持有序的位置。 bisect_right 函數返回的插入點是在已…

Mac上安裝Label Studio

在Mac上安裝Anaconda并隨后安裝Label Studio&#xff0c;可以按照以下步驟進行&#xff1a; 1. 在Mac上安裝Anaconda 首先&#xff0c;你需要從Anaconda的官方網站下載適用于Mac的安裝程序。訪問Anaconda官網&#xff0c;點擊“Download Anaconda”按鈕&#xff0c;選擇適合M…

vscode開啟調試模式,結合Delve調試器調試golang項目詳細步驟

1.前期準備 (1).在vs code中的擴展程序中搜索并安裝Go擴展程序 (2).安裝 Delve 調試器 go install github.com/go-delve/delve/cmd/dlvlatest (3).打開vs code的命令面板&#xff0c;輸入Go: Install/Update Tools&#xff0c;并單擊該命令執行&#xff0c;安裝或更新Go語…

SQL面試題1:連續登陸問題

引言 場景介紹&#xff1a; 許多互聯網平臺為了提高用戶的參與度和忠誠度&#xff0c;會推出各種連續登錄獎勵機制。例如&#xff0c;游戲平臺會給連續登錄的玩家發放游戲道具、金幣等獎勵&#xff1b;學習類 APP 會為連續登錄學習的用戶提供積分&#xff0c;積分可兌換課程或…

爬山算法與模擬退火算法的全方面比較

一、基本概念與原理 1. 爬山算法 爬山算法是一種基于啟發式的局部搜索算法,通過不斷地向當前解的鄰域中搜索更優解來逼近全局最優解。它的核心思想是,從當前解出發,在鄰域內找到一個使目標函數值更大(或更小)的解作為新的當前解,直到找不到更優的解為止。 2.模擬退火算…

PostgreSQL 超級管理員詳解

1. 什么是 PostgreSQL 超級管理員 PostgreSQL 超級管理員&#xff08;superuser&#xff09;是擁有數據庫系統最高權限的用戶。他們可以執行任何數據庫操作&#xff0c;包括但不限于創建和刪除數據庫、用戶、表空間、模式等。超級管理員權限是 PostgreSQL 中權限的最高級別。 …

安裝本地測試安裝apache-doris

一、安裝前規劃 我的服務器是三臺麒麟服務器,2臺跑不起來,這是我本地的,內存分配的也不多。 fe192.168.1.13 主數據庫端口9030訪問 8Gbe192.168.1.13內存4G 硬盤50be192.168.1.14內存4G 硬盤50be192.168.1.12內存4G 硬盤5013同時安裝的fe和be 。 原理:192.168.1.13 服…

GPT(General Purpose Timer)定時器

基本概念&#xff1a; 在嵌入式系統中&#xff0c;General Purpose Timer&#xff08;GPT&#xff09;是一種非常重要的硬件組件&#xff0c;用于提供定時功能。 定義&#xff1a;通用定時器是一種能夠提供精確時間測量和控制功能的電子設備或電路模塊。它可以產生周期性的時…

集中式架構vs分布式架構

一、集中式架構 如何準確理解集中式架構 1. 集中式架構的定義 集中式架構是一種將系統的所有計算、存儲、數據處理和控制邏輯集中在一個或少數幾個節點上運行的架構模式。這些中央節點&#xff08;服務器或主機&#xff09;作為系統的核心&#xff0c;負責處理所有用戶請求和…