sass编写高质量的css---(基础语法结构)
一:基础
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---(基础语法结构)的更多相关文章
- 编写高质量Python程序(三)基础语法
本系列文章为<编写高质量代码--改善Python程序的91个建议>的精华汇总. 关于导入模块 Python的3种引入外部模块的方式:import语句.from ... import ... ...
- 如何编写高质量CSS
虽然写过很多css代码,但每次动手写都让我痛苦不堪,如何组织好那一堆堆的代码,如何提高代码复用率,甚至如何命名类,这些都让我纠结.下面的浅显的谈一谈在看了<编写高质量代码>中的html和c ...
- 编写高质量代码——html、css、javascript
[编写高质量代码]1.注释的必要性:增加代码的可读性.2.web标准:由一系列的标准组合而成,其核心理念是将网页的结构.样式.行为分离,所以他可分为:结构标准.样式标准和行为标准.3.一个符合标准的网 ...
- 编写高质量代码改善java程序的151个建议——[1-3]基础?亦是基础
原创地址: http://www.cnblogs.com/Alandre/ (泥沙砖瓦浆木匠),需要转载的,保留下! Thanks The reasonable man adapts himse ...
- 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)
编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...
- C# 《编写高质量代码改善建议》整理&笔记 --(一)基本语言篇
题记:这是自己的观后感,工作两年了,本来打算好好学习设计模式,或者作为客户端深入了解GPU编程的,但是突然发现还有这么一本书. <编写高质量代码改善建议>,感觉这正是自己需要的. 我是做 ...
- 编写高质量代码改善C#程序的157个建议——建议103:区分组合和继承的应用场合
建议103:区分组合和继承的应用场合 继承所带来的多态性虽然是面向对象的一个重要特性,但这种特性不能在所有的场合中滥用.继承应该被当做设计架构的有用补充,而不是全部. 组合不能用于多态,但组合使用的频 ...
- 编写高质量JS代码中
前段时间看了几道关于前端javascript的面试题目,方觉函数调用模式等基础的重要性.于是,下定决心,好好补补基础,即便不能深入语言的内部设计模式,也要对基本面向对象概念有比较深入的理解. 继续上一 ...
- 编写高质量代码--改善python程序的建议(四)
原文发表在我的博客主页,转载请注明出处! 建议十八:有节制的使用from...import语句 python提供了三种方式引入外部模块: import语句 from...import... __imp ...
随机推荐
- 控件屏蔽Ctrl+C 复制
procedure ****.***KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin ) )) and (ssCtr ...
- Linux C++ TCP Socket通信实例
环境:Linux 语言:C++ 通信方式:TCP 下面用TCP协议编写一个简单的服务器.客户端,其中服务器端一直监听本机的6666号端口.如果收到连接请求,将接收请求并接收客户端发来的消息:客户端与服 ...
- SpringSecurity如何退出登录
⒈如何退出登录? SpringSecurity默认为我们提供了退出操作,我们只需要访问特定的url就可以退出登录了 <!DOCTYPE html> <html lang=" ...
- 【转】简单谈谈python的反射机制
[转]简单谈谈python的反射机制 对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面 ...
- Python-有关文件操作,函数调用几道练习:
1.写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作 2.写函数,计算传入字符串中[数字].[字母].[空格] 以及 [其他]的个数 3.写函数,判断用户传入的对象(字符串. ...
- 从运维角度来分析mysql数据库优化的一些关键点【转】
概述 一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善. 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分 ...
- 华为Qinq的配置
作者:邓聪聪 qinq(dot1q in dot1q)是一种二层环境中的二层vpn技术,用于二层ISP网络将相同客户网络中的vlan帧,再打一层vlan-tag的手段实现同一个客户的不同站点之间的数据 ...
- python3+selenium入门16-窗口截图
有时候需要把一些浏览器当前窗口截图下来,比如操作抱错的时候.WebDriver类下.get_screenshot_as_file()方法可窗口截图,需要传入一个截图文件名的路径.window要用\\当 ...
- 效率较高的php下读取文本文件的代码
主要用下面这两个方法fread和 fgets的区别大家需要注意下 fread :以字节位计算长度,按照指定的长度和次数读取数据,遇到结尾或完成指定长度读取后停止. fgets :整行读取,遇 ...
- cocosCreater开发时遇到的问题
生成vscode任务后无法编译: ctrl +p -> 输入task compile 编译任务时提示 :由于使用任务版本 0.1.0,以下工作区文件夹将被忽略 这是cocos默认生成的code ...