復雜的網站都會有大量的CSS代碼,通常也會有許多重復的值。
舉個例子,同樣一個顏色值可能在成千上百個地方被使用到,如果這個值發生了變化,需要全局搜索并且一個一個替換,效率不高且容易出錯。
自定義屬性在某個地方存儲一個值,然后在其他許多地方引用它。另一個好處是語義化的標識。比如,--main-text-color 會比 #00ff00 更易理解,尤其是這個顏色值在其他上下文中也被使用到。
自定義屬性(有時候也被稱作CSS變量或者級聯變量)是由CSS作者定義的,它包含的值可以在整個文檔中重復使用。
由自定義屬性標記設定值(比如: --main-color: black;),由 var() 函數來獲取值(比如: color: **var(--main-color)**;)。
在構建大型站點時,作者通常會面對可維護性的挑戰。在這些網頁中,所使用的CSS 的數量是非常龐大的,并且在許多場合大量的信息會重復使用。
例如,在網頁中維護一個配色方案,意味著一些顏色在 CSS 文件中多次出現,并被重復使用。當你修改配色方案時,不論是調整某個顏色或完全修改整個配色,都會成為一個復雜的問題,不容出錯,而單純查找替換是遠遠不夠的。
如果使用了CSS 框架,這種情況會變得尤其糟糕,此時如果要修改顏色,則需要對框架本身進行修改。
在這些場合使用 LESS 或 Sass 類似的預處理器是非常有幫助的,但是這種通過添加額外步驟的方式,可能會增加系統的復雜性。
CSS變量為我們帶來一些預處理器的便利,并且不需要額外的編譯。
這些變量的第二個優勢就是名稱本身就包含了語義的信息。CSS 文件變得易讀和理解。main-text-color比文檔中的#00ff00更容易理解,特別是同樣的顏色出現在不同的文件中的時候。
下面是 CSS 變量的使用方法和步驟。
我們都知道,在 JS 中要使用一個變量前,必須聲明這個表變量。在 CSS 中也是一樣的道理。
聲明一個自定義屬性,屬性名需要以兩個減號(--)開始,屬性值則可以是任何有效的CSS值。和其他屬性一樣,自定義屬性也是寫在規則集之內的,如下:
body {
--bg-color: #7F583F;
--color: #F7EFD2;
}
上面代碼中,body選擇器里面聲明了兩個變量:--bg-color和--color。
它們與color、font-size等正式屬性沒有什么不同,只是沒有默認含義。所以 CSS 變量(CSS variable)又叫做**"CSS 自定義屬性"**(CSS custom properties)。
規則集所指定的選擇器定義了自定義屬性的可見作用域。通常的最佳實踐是定義在根偽類 :root下,這樣就可以在HTML文檔的任何地方訪問到它了:
:root {
--main-bg-color: #eee;
}
自定義屬性名是大小寫敏感的,--my-color 和 --My-color 會被認為是兩個不同的自定義屬性。
通過var()函數來讀取變量。語法如下:
var(custom-property-name, value)
變量名稱必須以兩個破折號(--)開頭,且區分大小寫!
使用方法:
element {
background-color: var(--main-bg-color);
}
變量也可以使用在變量聲明中:
:root {
--primary-color: #eee;
--primary-bg-color: var(--main-bg-color);
}
變量值只能用作屬性值,不能用作屬性名。
在 JS 代碼中,我們可能需要讀取 CSS 變量的值,其方法如下:
const root = document.querySelector(":root");
// 設置 CSS 變量
root.style.setProperty("--main-bg-color", "red");
// 讀取 CSS 變量
const computedStyle = getComputedStyle(root);
const mainBgColor = computedStyle.getPropertyValue("--main-bg-color");
console.log(mainBgColor);
// 刪除 CSS 變量
root.style.removeProperty("--main-bg-color");
以上就是關于 CSS 變量的一些基本概念及使用方法,更多詳情待后續!
靈活使用 CSS 變量,不僅可以提高生產力,也能夠提高代碼的可閱讀性和維護性。
~
~
~ 本文完
學習有趣的知識,結識有趣的朋友,塑造有趣的靈魂!
大家好!我是〖編程三昧〗的作者 隱逸王,我的公眾號是『編程三昧』,歡迎關注,希望大家多多指教!
知識與技能并重,內力和外功兼修,理論和實踐兩手都要抓、兩手都要硬!
PHP中預定義了幾個超級全局變量(superglobals),它們在一個腳本的全部作用域中你不需要特別說明,就可以在函數及類中使用。
1、$GLOBALS 是PHP的一個超級全局變量組,在一個PHP腳本的全部作用域中都可以訪問。
$GLOBALS 是一個包含了全部變量的全局組合數組。變量的名字就是數組的鍵。
<?php
$x = 'tiantian';
$y = '好';
function add()
{
$GLOBALS['a'] = $GLOBALS['x'].$GLOBALS['y'];
}
add();
echo $a;
?>
以上實例中 a 是一個$GLOBALS數組中的超級全局變量,該變量同樣可以在函數外訪問。
2、 $_SERVER 是一個包含了諸如頭信息(header)、路徑(path)、以及腳本位置(script locations)等等信息的數組。
$_SERVER 變量中的重要元素:
<?php
echo $_SERVER['PHP_SELF']; // 結果:/index.php 注釋:當前執行腳本的文件名
echo "<br>";
echo $_SERVER['SERVER_NAME']; // 結果:abcphp.com 注釋:當前運行腳本所在的服務器的主機名。
echo "<br>";
echo $_SERVER['HTTP_HOST']; // 結果:abcphp.com 注釋:當前請求頭中 Host: 項的內容,如果存在的話。
echo "<br>";
echo $_SERVER['HTTP_REFERER']; // 結果:" " 注釋:引導用戶代理到當前頁的前一頁的地址(如果存在)。
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT']; // 結果:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 注釋:
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];// 結果:/index.php 注釋:包含當前腳本的路徑。這在頁面需要指向自己時非常有用。
echo "<br>";
echo $_SERVER['GATEWAY_INTERFACE']; // 結果:CGI/1.1 注釋:服務器使用的 CGI 規范的版本;
echo "<br>";
echo $_SERVER['SERVER_ADDR']; // 結果:127.0.0.1 注釋:當前運行腳本所在的服務器的 IP 地址。
echo "<br>";
echo $_SERVER['SERVER_SOFTWARE']; // 結果:nginx/1.15.11 注釋:服務器標識字符串,在響應請求時的頭信息中給出。
echo "<br>";
echo $_SERVER['SERVER_PROTOCOL']; // 結果:HTTP/1.1 注釋:請求頁面時通信協議的名稱和版本。
echo "<br>";
echo $_SERVER['REQUEST_METHOD']; // 結果:GET 注釋:訪問頁面使用的請求方法;例如,"GET", "HEAD","POST","PUT"。
echo "<br>";
echo $_SERVER['REQUEST_TIME']; // 結果:1630663828 注釋:請求開始時的時間戳。從 PHP 5.1.0 起可用。
echo "<br>";
echo $_SERVER['QUERY_STRING']; // 結果:" " 注釋:query string(查詢字符串),如果有的話,通過它進行頁面訪問。
echo "<br>";
echo $_SERVER['HTTP_ACCEPT']; // 結果:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 注釋:當前請求頭中 Accept: 項的內容,如果存在的話。
echo "<br>";
echo $_SERVER['HTTP_ACCEPT_CHARSET']; // 結果:" " 注釋:當前請求頭中 Accept-Charset: 項的內容,如果存在的話。例:"iso-8859-1,*,utf-8"。
echo "<br>";
echo $_SERVER['HTTPS']; // 結果:" " 注釋:如果腳本是通過 HTTPS 協議被訪問,則被設為一個非空的值。
echo "<br>";
echo $_SERVER['REMOTE_ADDR']; // 結果:127.0.0.1 注釋:瀏覽當前頁面的用戶的 IP 地址。
echo "<br>";
echo $_SERVER['REMOTE_HOST']; // 結果:" " 注釋:瀏覽當前頁面的用戶的主機名。DNS 反向解析不依賴于用戶的 REMOTE_ADDR。
echo "<br>";
echo $_SERVER['REMOTE_PORT']; // 結果:58836 注釋:用戶機器上連接到 Web 服務器所使用的端口號。
echo "<br>";
echo $_SERVER['SCRIPT_FILENAME']; // 結果:F:/phpstudy_pro/WWW/php/index.php 注釋:當前執行腳本的絕對路徑。
echo "<br>";
echo $_SERVER['SERVER_ADMIN']; // 結果:" " 注釋:該值指明了 Apache 服務器配置文件中的 SERVER_ADMIN 參數。
echo "<br>";
echo $_SERVER['SERVER_PORT']; // 結果:80 注釋: Web 服務器使用的端口。默認值為 "80"。如果使用 SSL 安全連接,則這個值為用戶設置的 HTTP 端口。
echo "<br>";
echo $_SERVER['SERVER_SIGNATURE']; // 結果:" " 注釋:包含了服務器版本和虛擬主機名的字符串。
echo "<br>";
echo $_SERVER['PATH_TRANSLATED']; // 結果:F:/phpstudy_pro/WWW/php 注釋:當前腳本所在文件系統(非文檔根目錄)的基本路徑。
echo "<br>";
echo $_SERVER['SCRIPT_URI']; // 結果:" " 注釋:URI 用來指定要訪問的頁面。例如 "/index.html"。
?>
3、$_REQUEST 用于收集HTML表單提交的數據。
以下實例顯示了一個輸入字段(input)及提交按鈕(submit)的表單(form)。 當用戶通過點擊 "Submit" ,我們可以使用超級全局變量 $_REQUEST 來收集表單中的 input 字段數據:
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
//$_SERVER['PHP_SELF'] 當前執行腳本的文件名
Name: <input type="text" name="rname">
<input type="submit">
</form>
<?php
$name = $_REQUEST['rname'];
echo $name;
?>
</body>
</html>
4、$_POST 被廣泛應用于收集表單數據,在HTML form標簽的指定該屬性:"method="post"。
以下實例顯示了一個輸入字段(input)及提交按鈕(submit)的表單(form)。 當用戶通過點擊 "Submit" 按鈕提交表單數據時,使用超級全局變量 $_POST 來收集表單中的 input 字段數據:
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
$name = $_POST['fname'];
echo $name;
?>
</body>
</html>
5、$_GET 同樣被廣泛應用于收集表單數據,在HTML form標簽的指定該屬性:"method="get"。
<html>
<body>
<form method="get" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
$name = $_POST['fname'];
echo $name;
?>
</body>
</html>
$_GET 也可以收集URL中發送的數據。
果你正在構建網站或Web應用程序,你應該已經知道代碼重復被認為是一種不良實踐。
這就是為什么你應該學習如何使用CSS變量來減少你編寫的CSS代碼量并將你的樣式帶到一個新的水平。
最成功的Web應用程序擁有令人驚嘆的設計。不幸的是,為了達到預期的效果,Web開發人員需要準備大量的樣式。這迫使我們在許多不同的元素中重復值,比如顏色。
幸運的是,現代樣式表支持CSS變量,這使您可以減少代碼庫中的重復。你不需要像CSS模塊、Less或SASS這樣的外部工具來利用它。
在這個全面的指南中,我將向您展示如何有效地使用CSS變量,涵蓋從純HTML和CSS的基本示例到更高級的框架,如React和Next.js。
(本文內容參考:java567.com)
*請認真填寫需求信息,我們會在24小時內與您取得聯系。