动态

详情 返回 返回

CSS值的處理過程 - 动态 详情

CSS值的定義到最終渲染實際上會經過一系列的步驟,這一過程在W3C Recommendation中有介紹,整個過程一共分為6步:

聲明值:應用於元素的每個屬性都會為它提供一個聲明值,當然也可能存在多個,比如在多個樣式表中重複聲明
級聯值:這一步其實就是在計算樣式屬性的權重,從而得到一個權重最高的值
指定值:它一般等於級聯值或者默認值,繼承屬性用的繼承值 inherit,非繼承屬性將用初始值 initial,也可以顯式的設置 initial/inherit/unset 等關鍵字,從而保證每個元素上的每個屬性都存在一個值
計算值:這一步是為CSS計算得出的值,轉為需要使用的像素值(色彩值等等),注意這裏最終得到的是絕對單位,比如rem在這一步就會轉換成px
使用值:獲取計算值並完成所有剩餘計算的結果,使其成為文檔格式化中使用的絕對理論值。
實際值:使用值原則上可以直接使用,但用户代理可能無法在給定環境中使用該值。例如,用户代理可能只能渲染具有整數像素寬度的邊框,因此可能必須近似於已使用的寬度。此外,元素的字體大小可能需要根據字體的可用性或font-size-adjust屬性的值進行調整。實際值是進行任何此類調整後的已使用值。
屬性 聲明值 級聯值 指定值 計算值 使用值 實際值
font-size font-size: 1.2em 1.2em 1.2em 14.1px 14.1px 14px
width width: 80% 80% 80% 80% 354.2px 354px
亞像素
像素是成像面的基本單位也是最小單位,通常被稱為圖像的物理分辨率。如果成像系統要顯示的對象尺寸小於物理分辨率時,成像系統是無法正常辨識出來的。亞像素是一種抽象概念,用於以邏輯像素的分數表示渲染對象的位置或大小,主要用於佈局和命中測試。當前實現將值表示為 1/64 像素的倍數。這使我們能夠使用整數數學並避免浮點不精確。儘管佈局計算是使用 LayoutUnits 完成的,但繪製時的值仍與整數像素值對齊,以與設備像素對齊。
在使用em, rem這樣的相對單位時, 瀏覽器計算出來的px很可能不是整數,進而在一些顯示設備上出現亞像素渲染問題,比如:圓形變橢圓、圖片顯示不全有切割、元素之間有縫隙等

瀏覽器如何計算亞像素
比如,我們在頁面上寫了一條0.3px的線,那麼瀏覽器的計算值是多少?

user avatar fennudemantou 头像 bukenengdeshi 头像 sysin 头像 howiecong 头像
点赞 4 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.