透過建立動態樣式來提高 CSS 程式碼的可讀性和可維護性
了解如何使用 CSS 變數建立日益複雜且高效的 Web 應用程式。
隨著Web 專案的發展並變得越來越複雜,擁有數千行的大量CSS 程式碼最終變得非常常見,並且在這些程式碼中,分配給屬性的值的重複頻率很可能還有大的。
正如您在下面的範例中看到的,顏色和背景顏色屬性中存在相同的值重複:
.one { color: #f0f0f0; background-color: #a52a2a; } .two { color: #f0f0f0; background-color: #a52a2a; } .three { color: #f0f0f0; background-color: #a52a2a; } .four { color: #f0f0f0; background-color: #a52a2a; }
在上面的例子中,相同的顏色可以在程式碼中數百個不同的地方使用。由於普通屬性的值相對固定,如果將來你決定改變所有具有相同顏色的元素的顏色,這將需要你在整個程式碼中手動搜尋顏色值並將其替換為相同的顏色。
但是,當使用 CSS 變數時,您作為 Web 開發人員的生活開始變得更加高效,CSS 變數允許將值儲存在一個位置,然後可以在其他多個位置引用。
需要明確的是,CSS 變數基本上是自訂屬性,而不是直接的實際程式變數。 CSS 變數的值在必要時計算,僅限於元素的範圍,並且不能動態操作或在樣式執行期間更改其值。
程式語言中的變數是可以包含不同類型值的資料存儲,並在程式執行過程中進行操作和修改,而 CSS 中的變數用於儲存特定值,以便在 CSS 屬性中重複使用。
現在,在下面的範例中,交換變數的固定值並使用var() 函數代替屬性值來檢索變數值,如果您決定更改顏色,則只需要更改變數的值,並且使用該變數的所有實例將自動更新:
:root { --text-primary: #f0f0f0; --bg-primary: #a52a2a; } .one { color: var(--text-primary); background-color: var(--bg-primary); } .two { color: var(--text-primary); background-color: var(--bg-primary); } .three { color: var(--text-primary); background-color: var(--bg-primary); } .four { color: var(--text-primary); background-color: var(--bg-primary); }
非常酷,對吧?如果您想了解 CSS 變數所能提供的所有潛力,請留到本文結束。
祝您閱讀愉快!
概括
- 變數基本上就是屬性
- 變數範圍
- var() 函數
- 屬性和變數的無效值
變數基本上就是屬性
好吧,我的目的不是要讓你感到困惑!但是,是的,這表明 CSS 變數和 CSS 屬性在文件中定義樣式的結果相同,並且在語法和使用方面相似,但是它們具有完全不同的功能,如下所示。
變數標識符
可以使用雙連字符 (--) 輕鬆識別變量,後跟區分大小寫字母的變量名稱,最後是對該變量有效的值:
--bg-secondary: #00ff00;
如您在上面的範例中所看到的,變數的額外好處之一是您為它們定義的名稱是自訂的且相對語義的,這意味著--bg-secondary 識別碼更容易理解為與主(或主要)背景顏色相關的輔助背景顏色,而不是直接插入十六進位代碼#00ff00.
作為屬性中的值與變數相比,屬性不允許在名稱開頭使用連字符,因為連字符用於將單字分隔成複合屬性,例如 font-size、text-align 等。例外的是,有一些帶有前綴-webkit、-moz、-ms 和-o 的特定屬性在名稱開頭使用單個連字符,這些屬性用於尚未完全標準化或納入的實驗性功能官方CSS 規範.
--text-selected: none; user-select: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none;
這樣,無論有沒有連字符,您都可以區分該屬性的用途。
變數值
可以賦給變數的值與任何屬性值對應的值相同,可以是一個或多個值的序列,只要該序列不包含該屬性不允許的值或只是一個無效值:
--horizontal: left; --text-color: #0000ff; --shadow: 0 0 10px #3a3939, 0 0 20px #666565; --gradient: linear-gradient(90deg, #3c719e 0%, #2323ab 35%);
Embora existam semelhanças entre as variáveis CSS e propriedades CSS, ambas têm propósitos e funcionalidades diferentes, enquanto uma é usada para armazenar e reutilizar valores, a outra define estilos específicos para elementos individuais.
Herança da Variável
As variáveis CSS podem ser herdadas, assim como as propriedades normais do CSS, isso significa, que ao definir um valor para uma variável em um elemento, ela será aplicada automaticamente a todos os elementos que forem descendentes desse mesmo elemento, a menos que eles definam um novo valor.
Como, por exemplo:
.father { --font-small: 16px; } .child-1 { --font-small: 3.4em; }
<div class="father"> <div class="child-1"></div> <div class="child-2"></div> </div>
No exemplo acima, o resultado para cada elemento será:
- Para o elemento com a classe .father será definido: 16px.
- Para o elemento com a classe .child-1 será definido: 3.4em.
- Para o elemento com a classe .child-2 será definido o valor herdado do elemento pai: 16px.
Por conta disso, toda vez que você usar uma variável em um determinado elemento, tanto este elemento quanto os elementos dentro dele, também poderão ter os mesmos valores definidos na variável.
Escopo da variável
As variáveis CSS possuem como escopo os elementos em que as mesmas foram declaradas. O escopo nada mais é que a área ou contexto em que uma variável pode ser acessada e utilizada.
Existem dois tipos de escopos para as variáveis o escopo Global e Local. As variáveis de escopo global é uma variável que está disponível para ser usada em todo o documento, enquanto as variáveis de escopo local, limita o uso da variável em elementos específicos.
Escopo da Global
É muito útil o escopo global para tornar uma variável CSS acessível para todos os elementos do documento.
Como, por exemplo:
:root { --bg-dark: #1b1a1a; } #first-box { background-color: var(--bg-dark); } #second-box { background-color: var(--bg-dark); }
No exemplo acima, a variável --bg-dark foi declarada no escopo da pseudo-classe :root, isso significa, que essa variável vai estar disponível para qualquer elemento. Faz sentido, declarar neste caso a variável no escopo global já que na página pode existir vários elementos com um design escuro.
A pseudo-classe :root é comumente utilizada para a declaração de variáveis, isso porque, ela é semelhante à raiz de uma árvore e basicamente se refere ao elemento que faz com que todos os outros elementos do documento fiquem contidos dentro dele, assim como os ramos e nós de uma árvore estão contidos na raiz da árvore.
Ao utilizar a pseudo-classe :root para declarar as suas variáveis, lembre-se que ela é semelhante ao seletor de elemento html, exceto que ela possui a especificidade mais alta de 0–0–1–0, enquanto o seletor htmlpossui a especificidade mais baixa de 0–0–0–1.
Escopo Local
O escopo local é a limitação que uma variável CSS vai ter para ser acessível dentro de um determinado elemento.
Como, por exemplo:
#third-box { --bg-info: #00ff00; background-color: var(--bg-info); } #fourth-box { background-color: var(--bg-info); }
No exemplo acima, a variável --bg-info foi declarada no escopo do elemento que possui o id (#third-box), isso significa, que essa variável só vai estar disponível dentro deste elemento, ou seja, a cor de fundo só vai ser aplicada nele ou nos elementos dentro dele.
Enquanto ao tentar chamar a mesma variável para o elemento com id (#fourth-box) ela é "especificada como não definida" e a cor de fundo não será aplicada. Se você tiver a certeza que apenas alguns elementos na página vai receber um estilo específico, faz sentido usar o escopo local no elemento pai desses elementos.
Dependendo da sua necessidade, você pode declarar a variável com o mesmo nome ou com outros valores diferentes para elementos distintos:
#third-box { --bg-info: #00ff00; background-color: var(--bg-info); } #fourth-box { --bg-info: #0000ff; background-color: var(--bg-info); }
No exemplo acima, as variáveis estão sendo declaradas em escopos diferentes (cada variável possui o seu próprio escopo), isso quer dizer que não são as mesmas variáveis.
Função var()
Como foi visto anteriormente nos exemplos, a função var() do CSS é usada para referenciar e aplicar os valores das variáveis CSS em diferentes propriedades ao longo do código:
:root { --text-dark: #0e0e0e; } .section-alert { color: var(--text-dark); }
Mas, existe uma funcionalidade a mais que cerca essa função que é o valor de fallback que veremos logo a seguir, no qual pode ser útil ao trabalhar com Custom elements e Shadow DOM.
Valor de Fallback
O valor de fallback é um valor alternativo na função var() usado quando a variável fornecida não estiver definida ou for inválida.
A sintaxe é bem simples, a função var() aceita dois argumentos separados por uma vírgula, por tanto, o primeiro argumento é o nome da variável e caso for definido um segundo argumento ele será o valor de fallback que será usado no lugar da variável indisponível.
Como, por exemplo:
.section-alert { color: var(--text-dark, #202020); }
No exemplo acima, se a variável text-dark não estiver disponível o valor #202020 será utilizado na propriedade.
Entenda que o valor de fallback não é usado para oferecer um valor alternativo para navegadores que não oferecem suporte a variáveis e sim, para navegadores que oferecem suporte a variáveis para que o mesmo possa escolher um valor diferente se a variável fornecida não estiver definida ou tiver um valor inválido.
Múltiplos Valores de Fallback
Como a função var() aceita apenas dois argumentos, caso você faça algo semelhante ao exemplo abaixo será considerado inválido:
.section-info { color: var(--text-dark, #202020, #454545); }
Porém, você consegue fornecer mais de um valor de fallback, definindo no segundo argumento da função var() outra função var():
.section-info { color: var(--text-dark, var(--text-normal, #454545)); }
No exemplo acima, caso a variável --text-dark esteja indisponível será usado a variável --text-normal e que por sua vez, se também não estiver disponível será usado o valor de argumento #454545.
Valores Inválidos de Propriedades e Variáveis
Se você tentar atribuir um valor qualquer a uma propriedade normal que seja inválido, quando o navegador encontrar este valor ele simplesmente vai descartar e os elementos vão receber os valores que teriam se a declaração simplesmente não existisse.
Como, por exemplo:
div { background-color: orange; } div { background-color: 4rem; }
No exemplo acima, foi especificado o valor de 4rem a propriedade background-color da segunda regra, esse valor definitivamente está incorreto já que essa propriedade e todas as propriedades do CSS aceita um determinado conjunto de valores válidos. O valor 4rem é comum e pode ser utilizado em propriedades como font-size, padding, margine etc.
Nesse caso, por conta do valor ser inválido para essa propriedade a declaração é descartada e o resultado é como se a regra não existisse ou seja, a primeira regra será aplicada e a cor de fundo da div ficará laranja.
Isso ocorre, porque o navegador segue as regras da cascata no processamento e renderização de estilos. Quando várias regras se aplicam ao mesmo elemento, o navegador precisa determinar qual delas deve prevalecer. Essas regras são brevemente avaliadas com base em sua especificidade e ordem de precedência (no caso do exemplo anterior pelo fato das duas regras terem seletores com a mesma especificidade foi levado em conta a ordem de precedência).
Por tanto, quando o navegador encontra uma declaração com um valor inválido para uma propriedade normal, ele entende que essa declaração não é válida e a descarta. O navegador então passa para a próxima declaração que seja possivelmente válida. Se não houver mais nenhuma declaração aplicável, o navegador utiliza o valor herdado ou inicial do elemento.
Isso garante, uma melhor experiência de navegação estável e confiável para os usuários, evitando que os elementos sejam exibidos de forma confusa ou não intencional quando não há declarações de estilo explícitas.
No entanto, as variáveis vão se comportar de maneira diferente em relação as propriedades normais. Quando o navegador encontra uma função var() referenciando uma variável inválida, o valor inicial ou herdado da propriedade é usado.
O exemplo abaixo é exatamente o do exemplo anterior, exceto que é usado uma variável:
:root { --bg-color: 4rem; } div { background-color: orange; } div { background-color: var(--bg-color); }
Nesse caso, o valor 4rem da variável é inválido para a propriedade background-color da última regra e a ordem de precedência não será levada em consideração aqui, ou seja, a cor orange da segunda regra não será aplicada. Como a propriedade background-color não é herdável, o navegador aplicará o valor inicial dessa propriedade, que é transparente ou rgba(0, 0, 0, 0).
Conclusão
Essas são as variáveis CSS que podem ser usadas em diversos momentos e situações para fornecer maior flexibilidade e reutilização de código. Portanto, se você precisar definir valores comuns, trabalhar com responsividade ou criar temas e personalização, pode ser muito útil utilizar variáveis CSS. Elas não apenas simplificam o processo de manutenção do código, mas também tornam o design mais consistente e fácil de ajustar conforme necessário. Adotar variáveis CSS é uma prática inteligente que pode elevar a eficiência e a qualidade de seus projetos de desenvolvimento web.
以上是透過建立動態樣式來提高 CSS 程式碼的可讀性和可維護性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

backdrop-filter用於對元素背後的內容應用視覺效果,1.使用backdrop-filter:blur(10px)等語法實現毛玻璃效果;2.支持blur、brightness、contrast等多種濾鏡函數並可疊加;3.常用於玻璃態卡片設計,需確保元素與背景重疊;4.現代瀏覽器支持良好,可用@supports提供降級方案;5.避免過大模糊值和頻繁重繪以優化性能,該屬性僅在元素背後有內容時生效。

首先通過JavaScript獲取用戶系統偏好和本地存儲的主題設置,初始化頁面主題;1.HTML結構包含一個按鈕用於觸發主題切換;2.CSS使用:root定義亮色主題變量,.dark-mode類定義暗色主題變量,並通過var()應用這些變量;3.JavaScript檢測prefers-color-scheme並讀取localStorage決定初始主題;4.點擊按鈕時切換html元素上的dark-mode類,並將當前狀態保存至localStorage;5.所有顏色變化均帶有0.3秒過渡動畫,提升用戶

用戶代理樣式表是瀏覽器自動應用的默認CSS樣式,用於確保未添加自定義樣式的HTML元素仍具基本可讀性。它們影響頁面初始外觀,但不同瀏覽器存在差異,可能導致不一致顯示。開發者常通過重置或標準化樣式來解決這一問題。使用開發者工具的“計算”或“樣式”面板可查看默認樣式。常見覆蓋操作包括清除內外邊距、修改鏈接下劃線、調整標題大小及統一按鈕樣式。理解用戶代理樣式有助於提升跨瀏覽器一致性並實現精準佈局控制。

鏈接的樣式應通過偽類區分不同狀態,1.使用a:link設置未訪問鏈接樣式,2.a:visited設置已訪問鏈接,3.a:hover設置懸停效果,4.a:active設置點擊時樣式,5.a:focus確保鍵盤可訪問性,始終遵循LVHA順序以避免樣式衝突,可通過添加padding、cursor:pointer和保留或自定義焦點輪廓來提升可用性和可訪問性,還可使用border-bottom或動畫下劃線等自定義視覺效果,最終確保鏈接在所有狀態下均有良好用戶體驗和可訪問性。

Theaspect-ratioCSSpropertydefinesthewidth-to-heightratioofanelement,ensuringconsistentproportionsinresponsivedesigns.1.Itisapplieddirectlytoelementslikeimages,videos,orcontainersusingsyntaxsuchasaspect-ratio:16/9.2.Commonusecasesincludemaintainingres

:emptyPseudo-classSelectSelectsselemtswithnochildrenorcontent,包括pacesorcomments,sonlyTrulyEmpterementLikeMatchit; 1.ItcanhideEmptycontainersbousing:intume {note {note display:none;} toCleanuplayouts; 2.ItallowSaddingplacePlacePlacePlaceLanderStylingLingvia :: Forefore :: Forefor :: show offor :: show

vw和vh單位通過將元素尺寸與視口寬度和高度關聯,實現響應式設計;1vw等於視口寬度的1%,1vh等於視口高度的1%;常用於全屏區域、響應式字體和彈性間距;1.全屏區域使用100vh或更優的100dvh避免移動瀏覽器地址欄影響;2.響應式字體可用5vw並結合clamp(1.5rem,3vw,3rem)限制最小和最大尺寸;3.彈性間距如width:80vw、margin:5vhauto、padding:2vh3vw可使佈局自適應;需注意移動設備兼容性、可訪問性及固定寬度內容衝突,建議優先使用dvh

Define@keyframesbouncewith0%,100%attranslateY(0)and50%attranslateY(-20px)tocreateabasicbounce.2.Applytheanimationtoanelementusinganimation:bounce0.6sease-in-outinfiniteforsmooth,continuousmotion.3.Forrealism,use@keyframesrealistic-bouncewithscale(1.1
