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"
の要素: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の変数を使う的更多相关文章
- 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 ...
随机推荐
- 20165205 2017-2018-2 《Java程序设计》实验三 敏捷开发与XP实践
20165205 2017-2018-2 <Java程序设计>实验三 敏捷开发与XP实践 实验内容 检查点1: 安装alibaba 插件,解决代码中的规范问题 首先把搭档加入到自己的项目中 ...
- ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - ROSMapModify - ROS地图修改
ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - 2 - MapModify地图修改 We can use gmapping model to genera ...
- uva-10085-搜索-最远状态的八数码
直接bfs即可,取最后一个状态 #include <iostream> #include <stdio.h> #include <string> #include ...
- Windows下python库的常用安装方法
目录: 1.pip安装(需要pip) 2.通过下载whl文件安装(需要pip) 3.在pythn官网下载安装包安装(不需要pip) 方法一:pip安装. 这是最 ...
- py库: xlwt 、xlrd (写读EXCEL文件)
写EXCEL文件 # -*- coding: utf-8 -*- import xlwt book = xlwt.Workbook(encoding = "utf-8", styl ...
- 30.纯 CSS 创作一个晃动的公告板
原文地址:https://segmentfault.com/a/1190000014983030 感想: 绝对定位+动画 HTML代码: <div class="signboard&q ...
- PHP Yii2.0PHPexecl导入。
use app\models\execl; use \PHPExcel; /*execl导入数据*/ public function Execlupload(){ if(Yii::$app->r ...
- tomcat中项目后有括号
引入他人项目时,由于报错,copy本地workspace下其他项目的 .settings和.project到该项目路径下 结果Eclipse 的 Server 中出现了 aaa(bbb)的情况 并且 ...
- redistemplate优雅地操作redis redis 工具类
参考:https://www.cnblogs.com/superfj/p/9232482.html redis 工具类 package com.service; import org.springfr ...
- vue语法小练习
实现功能:新增/删除 学生 <html> <head> <script src="https://cdn.staticfile.org/vue/2.2.2/vu ...