一:基础
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;
}

转载于:https://www.cnblogs.com/LindaBlog/p/9454671.html

sass编写高质量的css---(基础语法结构)相关推荐

  1. 编写高质量的代码--基础:结构和样式,行为的分离

    实现高质量的代码需要我们在结构和样式,行为的分离的基础上做到:精简,重用,有序. 精简:尽量减小文件的大小,提高页面加载速度. 重用:提高代码的重用性,减少冗余代码,提高开发速度. 有序:提高代码的结 ...

  2. 教你精确编写高质量高性能的MySQL语法

    在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的编写,刚开始不会体会出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度 ...

  3. 如何编写高质量CSS

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

  4. 编写高质量可维护的代码:优雅命名

    大家好,我是若川.今天分享一篇关于如何命名更优雅的文章. 点击下方卡片关注我.加个星标,或者查看源码等系列文章.学习源码整体架构系列.年度总结.JS基础系列 本文首发于政采云前端团队博客:编写高质量可 ...

  5. 读书笔记:编写高质量代码--web前端开发修炼之道(二:5章)

    读书笔记:编写高质量代码--web前端开发修炼之道 这本书看得断断续续,不连贯,笔记也是有些马虎了,想了解这本书内容的童鞋可以借鉴我的这篇笔记,希望对大家有帮助. 笔记有点长,所以分为一,二两个部分: ...

  6. 《编写高质量代码:改善c程序代码的125个建议》——第1章 数据,程序设计之根本建议1:认识ANSI C...

    本节书摘来自华章计算机<编写高质量代码:改善c程序代码的125个建议>一书中的第1章,建议1,作者:马 伟 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第1 ...

  7. 专业的LaTeX: 在Linux下编写高质量的文档

    专业的LaTeX: 在Linux下编写高质量的文档 Linux下的OpenOffice.KWord等字处理软件虽然在功能上与Microsoft Word类似,但目前在易用性和可用性方面仍然存在许多不足 ...

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

                 The reasonable man adapts himself to the world; The unreasonable one persists in trying ...

  9. ​如何编写高质量的C#代码(一)

    如何编写高质量的C#代码(一) 从"整洁代码"谈起 一千个读者,就有一千个哈姆雷特,代码质量也同样如此. 想必每一个对于代码有追求的开发者,对于"高质量"这个词 ...

最新文章

  1. Jmeter-3.0的源码导入eclipse并执行
  2. 超过1w的Github Star大佬和他们的公众号,太强了!
  3. python中的super用法详解_Python中super函数用法实例分析
  4. Java8新特性:Stream介绍和总结
  5. 【编程好习惯】避免使用魔数
  6. Java 并发(入门梳理)
  7. 【codevs1425】最小的N个和,如何像煞笔一样地写堆
  8. 【报告分享】抖音品牌主页运营官方指导手册.pdf(附下载链接)
  9. mac下安装nginx及相关配置
  10. 基于16QAM调制的OFDM系统仿真实现(MATLAB)
  11. VC版 MFC程序对话框资源移植
  12. matlab 几何布朗运动 股价,某股票价格遵循几何布朗运动
  13. Echarte柱状图文字位置
  14. 华为手机安装debug的apk时出现无效安装和与操作系统不兼容问题解决
  15. 华为奋力前行,以灵活多变的方式突围,成效显著
  16. 系统聚类算法并绘制谱系图
  17. 简单通过微信公众号获取OPEN ID
  18. Java程序员两年校招笔记总结分析——菜鸡求职
  19. tomcat-添加操作日志
  20. A2DP音频流在安卓系统中的实现

热门文章

  1. Linux应急响应入门--入侵排查(全面)
  2. python中 yield 的用法详解——最简单,最清晰的解释(排序节省内存消耗)
  3. 二十二、标志寄存器与栈(代码设计安全,与子程序寄存器安全类似)
  4. Oracle数据库导入导出 imp/exp备份还原
  5. linux开机启动详细流程图
  6. 在Unity3D项目中接入ShareSDK实现安卓平台微信分享功能(可使用ShareSDK默认UI或自定义UI)...
  7. iOS CGRectGetMaxX/Y 使用
  8. 在vue中使用express-mock搭建mock服务
  9. Djaongo 中间件
  10. Mysql对用户操作加审计功能——高级版