CSS 变量是 CSS 引入的一个新特性,目前绝大多数浏览器已经支持了,它可以帮助我们用更少的代码写出同样多的样式,大大提高了工作效率,本篇文章将教你如何使用 CSS 变量(css variable)。

CSS中原生的变量定义语法是:--*,变量使用语法是:var(--*),其中*表示变量名称

变量声明

使用 :root 来声明 css 变量,root 相当于根元素 html,例如声明一个背景颜色为红色的 red 变量,示例如下

:root{
   --red: #f00;
}

如何应用这个变量呢?使用 var() 函数。

div{
   background-color: var(--red);
}

这样,我们就给一个 div 盒子添加了一个属性,即设置它的背景颜色为红色。当然也可以同时定义多个变量,方便使用,注意:变量名对大小写敏感,nav-color 和 Nav-color 是完全不同的变量。

:root{
   --margin-top: 20px;
   --nav-color: #ff0;
   --Nav-color: #fff;
   --transition-duration: .5s;
}

全局变量与局部变量

前面我们在 :root里声明的变量都属于全局变量,也就是可以在 html 包裹下的任一class,id 都可以使用它;除此之外也可以定义局部变量,例如我们在 class 为 left 的 div 下定义局部变量:

.left{
   --left-margin: 60px;
   --left-background-color: #333;
}

这个时候,--left-margin 和 --left-background-color 就只能在 .left 包含下的容器才能使用这两个属性,同样是使用margin:var(--left-margin);来书写。

JavaScript 操作变量

JavaScript 可以操纵 css 变量,例如在 index.js 文件中有如下代码:

var root = document.querySelector(':root');     //获取根元素
var rootStyle = getComputedStyle(root);       //获取元素的 css
var red = rootStyle.getPropertyValue('--left-margin');   //获取 css 的样式值   60px
root.style.setProperty('--left-margin','50px');          //更改样式

响应式布局

由于事先定义好了变量,只需引入就可以使用,这样的话当我们想要修改一个属性值,例如修改某个盒子的背景颜色,只需更改变量的值,就可以全局应用到所有元素中,利用这一特性可以做响应式布局。

:root{
   --bg-color: #fff;
   --height: 1080px;
}
body{
   background-color: var(--bg-color);
   height: var(--height);
}
@media all and (max-width:450px) {
   :root{
       --bg-color: #000;
       --height: auto;
   }
}

上面的代码表示正常宽度下的 body 背景颜色为白色,高度为 1080 像素,而当宽度为 450px 大小的时候,此时 body 的背景颜色就变为了黑色,高度也变成自适应,只需要更改变量的值就可以实现响应,是不是很方便呢?

实现响应式——CSS变量的更多相关文章

  1. SpaceBase – 基于 Sass 的响应式 CSS 框架

    SpaceBase 是一个基于 Sass 的响应式 CSS 框架.SpaceBase 是可以在建立和定制您的需要的一个样板层,它结合最佳实践为今天的响应式网页与我们对每一个项目中使用的核心组件. 在线 ...

  2. LayoutSimple简易响应式CSS布局框架

    开发这个css布局的目的是为了少做一些重复的工作,一是前端或多或少会开发一些很小的响应式项目, 二是UI设计的出来的界面总是各种布局各种样式,这个时候如果前端去使用Bootstrap或者Foundat ...

  3. kube框架结构-一个小型响应式CSS框架

    当你开始初建一个新的项目时,你可能需要一个不太复杂的基础框架,Kube框架应该是你最好的选择.一个独立的CSS文件,帮助你更简单的创建响应式的的布局设计. Kube Framework包括网格.按钮. ...

  4. elf,基于flexbox的响应式CSS框架

    官网地址:http://jrainlau.github.io/elf/项目地址:https://github.com/jrainlau/elf 介绍 取名为"精灵"的elf,是一个 ...

  5. Gumby – 基于 Sass 的灵活的,响应式 CSS 框架

    Gumby 框架是一个基于 SASS 的灵活的,响应式的 CSS 框架.可以借助其灵活,响应式的网格系统和 UI 套件快速创建逻辑的页面布局和应用程序原型. 您可能感兴趣的相关文章 35个让人惊讶的 ...

  6. 响应式css样式

    <div class="a"> 123 </div> @media(orientation:portrait) and (max-width:600px){ ...

  7. 响应式 css

    1.class 样式一般用class,命名:中横线分隔,如:div-logo id 一般用于js快速地区别和获取元素,命名:驼峰命名法,如:divLogo (中间首字母大写) 2.必不可少的图片,用& ...

  8. css 响应式(媒介查询)

    1.CSS 来实现响应式 CSS实现响应式网站的布局要用到的就是CSS中的媒体查询接下来来简单介绍一下: @media 类型 and (条件1) and (条件二){css样式} <link r ...

  9. 响应式开发(二)-----Bootstrap框架的介绍

    简介 Bootstrap,来自 Twitter,是目前最受欢迎的前端框架,是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的, ...

随机推荐

  1. 面试官问我,Redis分布式锁如何续期?懵了。

    前言 上一篇[面试官问我,使用Dubbo有没有遇到一些坑?我笑了.]之后,又有一位粉丝和我说在面试过程中被虐了.鉴于这位粉丝是之前肥朝的粉丝,而且周一又要开启新一轮的面试,为了回馈他长期以来的支持,所 ...

  2. 第41节:Java当中的类集框架

    Java当中的类集框架 类集框架,那么什么是类集框架,集合的种类有哪些,类集框架的基础结构. 类集框架是一组类和接口的集合,位于java.util包当中,是用来用户存储和管理对象的,在这个类集合框架中 ...

  3. __import__

    __import__有个参数 fromlist =[]1.当这个参数为空的时候__import__('a.b.c') 等效于 import a 2.__import__('a.b.c', fromli ...

  4. 冒泡 MS Azure 不便宜。。。

    一直在等 MS Azure 中国开卖, 最近有消息说正式商用了... 看看去,ok 发现官方网站 很奇葩.没有购买的地方 说毛线 啊 卧槽 欺骗感情还是吊人胃口? 好看了一下VM的价格,卧槽真不便宜. ...

  5. SVN+Axure版本管理&协同设计(一)

    1. SVN介绍 2.安装部署 环境介绍:Ubuntu16

  6. Eclipse For JavaEE安装、配置、测试

    Eclipse For JavaEE安装.配置.测试(win7_64bit) 目录 1.概述 2.本文用到的工具 3.安装与配置 4.JavaSE开发测试(确保JDK已正确安装) 5.JavaEE开发 ...

  7. leetcode — search-in-rotated-sorted-array

    /** * Source : https://oj.leetcode.com/problems/search-in-rotated-sorted-array/ * * Created by lverp ...

  8. 【原创+整理】简述何为调用约定,函数导出名以及extern C

    何为调用约定 调用约定指的是函数在调用时会按照不同规则,翻译成不同的汇编代码.这和参数的压栈顺序和栈的清理方式相关,也就是说不同的调用约定,这些方式会做相应改变.一般编译器是以默认的调用约定编译一份代 ...

  9. 五分钟轻松了解Hbase面向列的存储

    说明:从严格的列式存储的定义来看,Hbase并不属于列式存储,有人称它为面向列的存储,请各位看官注意这一点. 行式存储 传统的数据库是关系型的,且是按行来存储的.如下图: 其中只有张三把一行数据填满了 ...

  10. Java 并发编程-NIO 简明教程

    问题来源 在传统的架构中,对于客户端的每一次请求,服务器都会创建一个新的线程或者利用线程池复用去处理用户的一个请求,然后返回给用户结果,这样做在高并发的情况下会存在非常严重的性能问题:对于用户的每一次 ...