CSSの変数を使う
この文章はhttps://developer.mozilla.org/ja/docs/Web/CSS/Using_CSS_variablesを参考します。
これは実験段階の機能です。
この機能は複数のブラウザで開発中の状態にあります。互換性テーブルをチェックしてください。また、実験段階の機能の構文と挙動は、仕様変更に伴い各ブラウザの将来のバージョンで変更になる可能性があることに注意してください。
CSS 変数は、CSS 作者によって作成され、ドキュメント全体で再利用可能な特定の値を含むエンティティです。それらは、カスタムプロパティ記法(たとえば、--main-color: black;)によって設定し、var() 関数(たとえば、color: var(--main-color);)を使ってアクセスします。
複雑な Web サイトには、膨大な量の CSS があり、しばしば同じ値が使われています。たとえば、同じ色が異なる場所で数百使われており、色を変更する場合、グローバルに検索し、置き換えをしなくてはいけません。CSS 変数を使えば、1 箇所に値を保存しておき、複数の場所から参照できます。更なるメリットとして、意味的な識別をしやすくなります。たとえば、--main-text-color は #00ff00 より理解しやすいでしょう。とりわけ、同じ色がさまざまなコンテキストで使われる場合はそうです。
CSS 変数はカスケードの対象であり、親からの値を継承します。
基本的な使用方法
変数を宣言します:
element {
--main-bg-color: brown;
}
変数を使用します:
element {
background-color: var(--main-bg-color);
}
ノート: 初期仕様のカスタムプロパティの接頭辞は var- でしたが、最新の仕様では -- に変更されました。Firefox 31 以上は最新仕様に従っています。(バグ 985838)
CSS 変数の最初のステップ
それぞれ異なるクラスの要素に同じ色を付けるシンプルな CSS を考えてみましょう。
.one {
color: white;
background-color: brown;
margin: 10px;
width: 50px;
height: 50px;
display: inline-block;
}
.two {
color: white;
background-color: black;
margin: 10px;
width: 150px;
height: 70px;
display: inline-block;
}
.three {
color: white;
background-color: brown;
margin: 10px;
width: 75px;
}
.four {
color: white;
background-color: brown;
margin: 10px;
width: 100px;
}
.five {
background-color: brown;
}
これを下の HTML に適用します:
<div>
<div class="one"></div>
<div class="two">Text <span class="five">- more text</span></div>
<input class="three">
<textarea class="four">Lorem Ipsum</textarea>
</div>
このようになるはずです:

CSS 中に同じ宣言が繰り返し出てくることがわかるでしょうか。いろいろな場所で background color に brown を設定しています。カスケードの上流で変数を宣言し、継承を利用することでこの問題を自然に解決することもできます。大きなプロジェクトでは、常にこの手法が取れるわけではありません。:root 擬似クラスで変数を宣言することにより、変数を利用して CSS 作者は同じ値を繰り返し書くことをやめることができるのです。
:root {
--main-bg-color: brown;
}
.one {
color: white;
background-color: var(--main-bg-color);
margin: 10px;
width: 50px;
height: 50px;
display: inline-block;
}
.two {
color: white;
background-color: black;
margin: 10px;
width: 150px;
height: 70px;
display: inline-block;
}
.three {
color: white;
background-color: var(--main-bg-color);
margin: 10px;
width: 75px;
}
.four {
color: white;
background-color: var(--main-bg-color);
margin: 10px;
width: 100px;
}
.five {
background-color: var(--main-bg-color);
}
この結果は前の例と同じになるはずです。 望んだプロパティを 1 つの標準的な宣言で実現することができます。
CSS 変数の継承
カスタムプロパティは継承します。これはつまり、もし与えられた要素にカスタムプロパティの値がない場合、その値は親の値を使用するということです。
<div class="one">
<div class="two">
<div class="three">
</div>
<div class="four">
</div>
<div>
</div>
に下記の CSS を適用します。
.two {
--test: 10px;
}
.three {
--test: 2em;
}
この場合、var(--test) の結果は:
class="two"の要素:10pxclass="three"の要素:2emclass="four"の要素:10px(親から継承した)class="one"の要素; 無効な値、これはすべてのカスタムプロパティのデフォルト値です。
値と妥当性
古典的な CSS の妥当性のコンセプトとして、(値が)それぞれのプロパティに縛られているというものがあります。これはカスタムプロパティに関してはあまり使いやすいものではありません。カスタムプロパティの値が解析されるとき、ブラウザはそれがどこで使用されるのか知りません。そのため、ほぼすべての値を有効なものとみなす必要があります。
残念ながら、これらの有効な値は、var() 関数表記を使用して、それらが意味をなさないかもしれないコンテクストで使用できてしまいます。プロパティとカスタム変数が無効な CSS ステートメントを生成する可能性があることから、計算時の妥当性確認という新しいコンセプトが導かれます。
ブラウザ実装状況


[1] 最初、Chrome では、この機能を異なる構文で実装しており、CSS 変数を定義するために カスタムプロパティ名に -webkit-var- を必要としていました。その後、CSS 変数は -webkit-var() 関数内で接頭辞なしで使用できるようになりました。次いで、この実装は chrome://flags 下の Enable experimental WebKit features フラグでの切り替えの対象となりました。このフラグは、後に Enable experimental Web Platform features に変更されました。
[2] Chrome 34.0 では、パフォーマンスの問題のためこの機能は削除されています。
[3] Gecko 29 では、この機能は layout.css.variables.enabled 設定下で実装されていました。既定では false で、古い var-variablename構文が使われています。Gecko 31 から、既定で設定が使用できるようになっており、新しい --variablename 構文に対応しています。
CSSの変数を使う的更多相关文章
- Windows PowerShell 入門(4)-変数と演算子
Windows PowerShellにおける変数と演算子の使用方法について学びます.今回は代表的な演算子として.算術演算子.代入演算子.論理演算子.比較演算子.範囲演算子.置換演算子.ビット演算子.型 ...
- CSS visibility 属性 使元素占位,但不可见
CSS visibility 属性 使元素占位,但不可见 h2 { visibility:hidden; } 浏览器支持 所有主流浏览器都支持 visibility 属性. 注释:任何的版本的 Int ...
- n个整数中,找出尽可能多的数使他们组成一个等差数列,求最长等差数列的长度
例子: 3,8,4,5,6,2 返回值应该为 :5 这是昨天做的一道优酷土豆的编程题,和leetcode中的128/ Longest Consecutive Sequence 有点 ...
- Css中如何使英文和拼音变成全大写、全小写和首字母大写?
想要实现英文和中文拼音变成全大写.全小写和首个字母大写,需要用到 css中text-transform样式属性,接下来介绍一下 1.text-transform的值 1)Capitalize:英文拼音 ...
- CSS清除浮动使父级元素展开的三个方法
点评:一个没有设置高度的容器div内如果存在浮动元素(即使用了属性float:left或者float:right),那么该父级元素会无法展开,下面举个例子为大家详细介绍下,希望对大家有所帮助 一个没有 ...
- css文件 如何使背景图片大小适应div的大小
对背景图片设置属性:background-size:cover;可以实现背景图片适应div的大小. background-size有3个属性: auto:当使用该属性的时候,背景图片将保持100% 的 ...
- Codeforces Round #205 (Div. 2)C 选取数列可以选择的数使总数最大——dp
http://codeforces.com/contest/353/problem/C Codeforces Round #205 (Div. 2)C #include<stdio.h> ...
- ABAP 7.51 構文書き方変換について
便利になったなぁと感じたコマンドのメモです.NetWeaver7.40 SP2から使えます. SAP NetWeaver AS for ABAP 7.51 Innovation Package – O ...
- 21、Cursorを使う
例: (詳しい内容が後で追加) declare @tempTB table ( PEファンドコード ) ) --1.データ格納用の変数を声明 ) --2.Cursorを声明.内容を定義 declare ...
随机推荐
- An error was encountered while running(Domain=LaunchSerivcesError, Code=0)
今天突然遇到这样一个错误,编译可以通过,但是运行就会弹出这个错误提示: An error was encountered while running(Domain=LaunchSerivcesErro ...
- Java-左移右移-jdk8
移位有三种 << 左移,左边补0 >> 右移,正数左边补0,负数补1 >>> 右移, 正数,负数统一左边补0 来看几个奇葩的代码 public static ...
- Maven上传jar包到私服
1.认证,在M2_HOME/conf/settings.xml配置用户名密码 <server> <id>releases</id> <username> ...
- python中的remove
remove()从左到右寻找,移除找到的第一个指定元素,举个例子: 1 a = ["hello", "world", "world", &q ...
- Mybatis学习4——一对一关联查询方法1--创建实体
创建一个实体继承两个实体之一,另一个实体作为属性 实体1. order package pojo; import java.util.Date; public class Order { privat ...
- mezzanine的page_menu tag
mezzanine的head 导航条.左侧tree.footer是由page_menu产生的.page_menu的算法,先计算出每一页的孩子,然后再逐页去page_menu. @register.re ...
- C# 实现保留两位小数的方法
1.Math.Round(0.333333,2);//按照四舍五入的国际标准 2.double dbdata=0.335333; string str1=String.Format("{0: ...
- <记录> PHP Redis操作类
namespace common\controller; class Redis { public $redisObj = null; //redis实例化时静态变量 static protected ...
- Spring Cloud (5)hystrix 服务监控
1.pom 2.启动类 3. 微服务提供方 pom 4. 监控------已成功启动 --------------------------------------------------------- ...
- Redis String数据类型
get() del() set() setnx():如果key 不存在就进行设置,存在返回0 setex():设置value存在时间 setex color 10 red 在10s中,colo ...