一:基础
1、Sass:最早也是最成熟的CSS预处理语言
2、Less:兼容CSS的最流行的css预处理语言
3、Stylus:主要用于node.js社区

二:scss写法
1)混入
@mixin alert($color:blue){
color:$color;
}

2)继承(p继承block类的样式)
.block{
margin:0;
padding:0;
}

p{
@extend .block
}

3)变量
a.局部变量:在具体的元素内部定义变量

body{
$color:red;//局部变量,只有body可以访问到
$color:red !global;//全局变量,h1也可以访问到
color:$color;
}

h1{

color:$color;//这里可以访问到的是带有!global的全局变量
}

b.全局变量(h1例子)

c.变量默认值
$font-size:12px;//由于先后顺序问题,会取14px的,这个是初始值。
$font-size:14px;//相对于12px的变量属于重新赋值,要是想优先取12px的,需要

在12px后面加上!default才算是默认值优先

d.多值变量
$paddings:10px 20px 30px 50px;//定义
$maps:(color:red,borderColor:blue);

body{

padding:$paddings;//全部使用
padding-left:nth($paddings,1);//表示取第一个值即10px;

注意:这里的索引值是1、2、3、4,而不是往常习惯的索引0123。

background-color:map-get($maps,color);//使用了color
border-color:map-get($maps,borderColor);

}

e.变量特殊用法

1)$className:main;//定义

.#{$className}{//使用
width:50px;
height:20px;
}

css渲染结果:
.main{
width:50px;
height:20px;
}

2)$text-info:red;//定义

h2{
color:$text_info;//中划线等同于下划线
}

4)导入
1.原生CSS导入
@import "css.css";
@import "http://css.css";

2.导入css.scss
@import "css";

5)嵌套
1、&:引用父级的元素
a{
color:red;
&:hover{
color:blue;
}
}

渲染结果:
a{ color: red;}

a:hover{ color:blue;}

2、@at-root:跳出嵌套
body{
background: red;
header{
width:200px;
.box{//这样写box是在body和header内部
height:200px;
}
}
}

body{
background: red;
header{
width:200px;
@at-root.box{//这样写box是在body和header外部,单独出来了
height:200px;
}
@media screen and(max-width:600px){
@at-root .box{//@media类的无法跳出嵌套,box依然会在@media内部
color: blue;
}
}
}
}

body{
background: red;
header{
width:200px;
@at-root.box{//这样写box是在body和header外部,单独出来了
height:200px;
}
@media screen and(max-width:600px){
@at-root(without:media){
.box{//可以跳出嵌套,box会在@media外部
color: blue;
}
}
}
@at-root .text-info{
color:red;
@at-root nav &{
color:blue;
}
}
}

text-info渲染效果
.text-info{
color:red;
}
nav .text-info{
color:blue;
}

6)继承与多继承

.text{
color: red;
}

.box{
background: yellow;
}

.small{//继承了.text,.box两个的样式
@extend .text,.box;
}

1.继承的局限性:包含选择器和相邻兄弟选择器无法继承;若继承的元素是a,而a又

有hover状态,则该状态也会被继承过来。

2.交叉继承:
a span{
font-weight:900;
}
div .box{
@extend span;
}

渲染结果(奇怪):a span , a div .box , div a .box{ font-weight:900;}

3.在@midia内继承的作用域:只能继承@midia内部的元素

@media screen and(max-width:600px){
.alert{ color:red; }
.samll{
@extend .alert;
}
}

渲染效果:@media screen and(max-width:600px){
.alert,.samll{ color:red; }
}

4.占位选择器:没有使用到,但是依然存在或者不愿意继承过去
%alert{ font-size:20px;}

.text{ color:blue;}

.am{
@extend %alert,.text;
}

渲染效果:.text{ color:blue;} .am{color:blue;}

占位选择器的意义在于:对于公用的属性,可以定义出来,要是某些元素没有使用到

,就使用占位选择器,这样就不会将该属性继承过去。

$bt:true;
$bf:false;

5、运算符:1)必须和前后的元素用空格隔开,否则编译器会认为找不到定义的元素。
2)运算单位必须一致,且都必须要,但是除法不同,如果只有一个有单位

,则必须是前面的也就是被除数有单位( height:(100px/2);),否则报错。

$width1:20px;
$width2:10px;
.box{ width: $width1 + $width2; padding:$width1 + $width2 auto;}
渲染结果:.box{ width:30px; padding:30px auto;}

p{ width: $width2/2; width:round($width2)/2; height:(100px/2);}
渲染结果:p{width: 5px; width: 5px; height:50px;}

6、双引号的问题:即编译时只看前一个是否有引号,有则结果也有,没有,则结果也

没有

a:hover{ content: "A" + bc;}--结果-->a:hover{ content: "ABC";}
a:hover{ content: A + 'bc';}--结果-->a:hover{ content: ABC;}

7、Mixin:传递参数运用会更灵活。

例一:@mixin cont{ color: red;}
body{ @include cont;}--结果--> body{ color:red;}这样写的效果类似于继承

例二:@mixin mount($color:red,$padding:30px;){
color: $color;
padding:$padding;
}
body{@include mount(#f0f);}--结果-->body{ color:#f0f;}//这样只能适用于一

个参数。

body{@include mount($padding:40px;);}--结果-->body{ padding:40px;}//这样

适用于多个参数,使用键值对的方式。

在mixin定义时参数后打三点,表示调用时可以传递n个参数。
例三:@mixin box-shadow($shadow...){
-moz-box-shadow:$shadow;
-webkit-box-shadow:$shadow;
box-shadow:$shadow;
}

.shadow{
@include -moz-box-shadow(0px 4px 4px red,0 0 4px #647787);
@include -webkit-box-shadow(0px 4px 4px red,0 0 4px #647787);
@include box-shadow(0px 4px 4px red,0 0 4px #647787);
}

8、针对响应式布局采用mixin实现即 media query mixin
定义:
@mixin style-for-iphone{
@media only screen and(min-device-width:320px)and (max-device-

with:560px){
@content;
}
}

使用:
@include style-for-iphone{
background:red;
}

渲染结果:

@media only screen and(min-device-width:320px)and (max-device-

with:560px){
background:red;
}

sass编写高质量的css---(基础语法结构)的更多相关文章

  1. 编写高质量Python程序(三)基础语法

    本系列文章为<编写高质量代码--改善Python程序的91个建议>的精华汇总. 关于导入模块 Python的3种引入外部模块的方式:import语句.from ... import ... ...

  2. 如何编写高质量CSS

    虽然写过很多css代码,但每次动手写都让我痛苦不堪,如何组织好那一堆堆的代码,如何提高代码复用率,甚至如何命名类,这些都让我纠结.下面的浅显的谈一谈在看了<编写高质量代码>中的html和c ...

  3. 编写高质量代码——html、css、javascript

    [编写高质量代码]1.注释的必要性:增加代码的可读性.2.web标准:由一系列的标准组合而成,其核心理念是将网页的结构.样式.行为分离,所以他可分为:结构标准.样式标准和行为标准.3.一个符合标准的网 ...

  4. 编写高质量代码改善java程序的151个建议——[1-3]基础?亦是基础

    原创地址:   http://www.cnblogs.com/Alandre/  (泥沙砖瓦浆木匠),需要转载的,保留下! Thanks The reasonable man adapts himse ...

  5. 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)

    编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...

  6. C# 《编写高质量代码改善建议》整理&笔记 --(一)基本语言篇

     题记:这是自己的观后感,工作两年了,本来打算好好学习设计模式,或者作为客户端深入了解GPU编程的,但是突然发现还有这么一本书. <编写高质量代码改善建议>,感觉这正是自己需要的. 我是做 ...

  7. 编写高质量代码改善C#程序的157个建议——建议103:区分组合和继承的应用场合

    建议103:区分组合和继承的应用场合 继承所带来的多态性虽然是面向对象的一个重要特性,但这种特性不能在所有的场合中滥用.继承应该被当做设计架构的有用补充,而不是全部. 组合不能用于多态,但组合使用的频 ...

  8. 编写高质量JS代码中

    前段时间看了几道关于前端javascript的面试题目,方觉函数调用模式等基础的重要性.于是,下定决心,好好补补基础,即便不能深入语言的内部设计模式,也要对基本面向对象概念有比较深入的理解. 继续上一 ...

  9. 编写高质量代码--改善python程序的建议(四)

    原文发表在我的博客主页,转载请注明出处! 建议十八:有节制的使用from...import语句 python提供了三种方式引入外部模块: import语句 from...import... __imp ...

随机推荐

  1. 转:MVC,MVP 和 MVVM 的图示

    MVC,MVP 和 MVVM 的图示 - 阮一峰的网络日志http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html 作者: 阮一峰 日期: 201 ...

  2. 解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 问题

    通过这里的回答,我们可以知道: Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证. 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说 ...

  3. ASP.NET MVC - 多国语言的简单实现

    定义一个类 public class Book {     public int ID { get; set; }     public string Title { get; set; }      ...

  4. log4j - 输出格式控制, PatternLayout参数含义以及详细配置

    转载自:https://blog.csdn.net/reserved_person/article/details/52849505 做项目被log4j的输出格式化参数搞烦了,索性把API的相关部分大 ...

  5. 【上载虚拟机】XX是一个Workstations 12.X虚拟机,不受XX支持。请选择其他主机或将虚拟机的硬件版本更改为以下选项之一。

    背景 由于搭建集群时,要使用Ubuntu系统,还有一点就是咱们使用的Ubuntu系统是定制的,但是它是一个虚拟机,需要通过VMware Workstations这款软件,把咱们定制好的Ubuntu系统 ...

  6. python3字典中items()和python2.x中iteritems()有什么不同?

    在Python2.x中: items() 用于返回一个字典的拷贝列表[Returns a copy of the list of all items (key/value pairs) in D],占 ...

  7. Linux 应用层的时间编程【转】

    转自:https://blog.csdn.net/chinalj2009/article/details/21223681 浅析 Linux 中的时间编程和实现原理,第 1 部分: Linux 应用层 ...

  8. npm 安装 sass-loader 失败的解决办法

    You got to add python to your PATH variable. One thing you can do is Edit your Path variable now and ...

  9. NOI2019 SX 模拟赛 no.5

    Mas 的童年 题目描述:不知道传送门有没有用? 反正就是对于每个前缀序列求一个断点,使得断点左右两个区间的 分别的异或和 的和最大 分析 jzoj 原题? 但是我 TM 代码没存账号也过期了啊! 然 ...

  10. node ,npm和nvm 版本的管理

    node npm :node 的包管理 nvm :node 的版本管理 node -v ---->查看node 的版本  (v---->version) npm -v ----->n ...