この文章は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" の要素: 10px
  • class="three" の要素: 2em
  • class="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の変数を使う的更多相关文章

  1. Windows PowerShell 入門(4)-変数と演算子

    Windows PowerShellにおける変数と演算子の使用方法について学びます.今回は代表的な演算子として.算術演算子.代入演算子.論理演算子.比較演算子.範囲演算子.置換演算子.ビット演算子.型 ...

  2. CSS visibility 属性 使元素占位,但不可见

    CSS visibility 属性 使元素占位,但不可见 h2 { visibility:hidden; } 浏览器支持 所有主流浏览器都支持 visibility 属性. 注释:任何的版本的 Int ...

  3. n个整数中,找出尽可能多的数使他们组成一个等差数列,求最长等差数列的长度

    例子:  3,8,4,5,6,2          返回值应该为 :5 这是昨天做的一道优酷土豆的编程题,和leetcode中的128/ Longest Consecutive Sequence 有点 ...

  4. Css中如何使英文和拼音变成全大写、全小写和首字母大写?

    想要实现英文和中文拼音变成全大写.全小写和首个字母大写,需要用到 css中text-transform样式属性,接下来介绍一下 1.text-transform的值 1)Capitalize:英文拼音 ...

  5. CSS清除浮动使父级元素展开的三个方法

    点评:一个没有设置高度的容器div内如果存在浮动元素(即使用了属性float:left或者float:right),那么该父级元素会无法展开,下面举个例子为大家详细介绍下,希望对大家有所帮助 一个没有 ...

  6. css文件 如何使背景图片大小适应div的大小

    对背景图片设置属性:background-size:cover;可以实现背景图片适应div的大小. background-size有3个属性: auto:当使用该属性的时候,背景图片将保持100% 的 ...

  7. Codeforces Round #205 (Div. 2)C 选取数列可以选择的数使总数最大——dp

    http://codeforces.com/contest/353/problem/C Codeforces Round #205 (Div. 2)C #include<stdio.h> ...

  8. ABAP 7.51 構文書き方変換について

    便利になったなぁと感じたコマンドのメモです.NetWeaver7.40 SP2から使えます. SAP NetWeaver AS for ABAP 7.51 Innovation Package – O ...

  9. 21、Cursorを使う

    例: (詳しい内容が後で追加) declare @tempTB table ( PEファンドコード ) ) --1.データ格納用の変数を声明 ) --2.Cursorを声明.内容を定義 declare ...

随机推荐

  1. Ansible:遇到错误 "sudo: /etc/sudoers is world writable\r\nsudo: no valid sudoers sources found, quitting

    执行ansible-playbook时,遇到该错误: 经过检查发现是因为在Linux中 /etc/sudoers该文件必须是只读权限的才行,故我们需要修改其权限为440,到root账户下修改,直接ch ...

  2. 新装Windows Server 2008 R2的设置

    原文链接:https://www.kafan.cn/edu/2898054.html 1.2008设置自动登录 具体方法:开始→运行→输入“rundll32 netplwiz.dll,UsersRun ...

  3. ssh 第一次登录输入yes 问题

    #!/bin/bash for i in hadoop01 hadoop02 hadoop03 hadoop04 hadoop05 hadoop06 hadoop07 hadoop08 hadoop0 ...

  4. windows server 域分发与分配软件

    参考网站:https://blog.csdn.net/southwind0/article/details/80734508 1.win 2008创建域 https://jingyan.baidu.c ...

  5. keepalived nginx 双机热备图文讲解

    http://blog.csdn.net/wanglei_storage/article/details/51175418

  6. 机器学习实战之朴素贝叶斯进行文档分类(Python 代码版)

    贝叶斯是搞概率论的.学术圈上有个贝叶斯学派.看起来吊吊的.关于贝叶斯是个啥网上有很多资料.想必读者基本都明了.我这里只简单概括下:贝叶斯分类其实就是基于先验概率的基础上的一种分类法,核心公式就是条件概 ...

  7. grep命令的常用选项

    Linux的grep命令是使用正则表达式进行文本搜索的,一些对程序员很有用的选项如下: -i   忽略大小写 -w  进行普通文件匹配,而不是正则表达式匹配 -c  只统计每个文件中匹配行数(默认是输 ...

  8. python 如何获取当前文件/文件夹

    python 如何获取当前文件/文件夹? 1.获取当前文件的实际路劲: os.path.realpath(__file__)          ==> D:\python_test\test_p ...

  9. ABAP-权限查询-用户信息系统

    事务代码:SUIM

  10. position: relative;导致页面卡顿

    1.现象: vue单页面项目 只有在某个页面切换的时候出现页面卡顿现象 经过长时间排查 确定最终原因是 该模块外层div使用  position: relative 根本原因:待完善