Sass变量、嵌套_html/css_WEB-ITnose
声明变量
定义变量的语法
Sass 的变量包括三个部分:
声明变量的符号“$”
变量名称
赋予变量的值
简单的示例,假设你的按钮颜色可以给其声明几个变量:
1 $brand-primary : darken(#428bca, 6.5%) !default;/* #337ab7*/2 $btn-primary-color : #fff !default;3 $btn-primary-bg : $brand-primary !default;4 $btn-primary-border : darken($btn-primary-bg, 5%) !default;5 /*如果值后面加上!default则表示默认值。*/
普通变量与默认变量
普通变量
定义之后可以在全局范围内使用
1 $fontSize: 12px;2 body{3 font-size:$fontSize;4 }
编译后的CSS代码:
1 body{2 font-size:12px;3 }
默认变量
sass的默认变量仅需要在值的后面加上!default即可。
1 $baseLineHeight:1.5 !default;2 body{3 line-height: $baseLineHeight;4 }
编译后的css代码:
1 body{2 line-height:1.5;3 }
sass 的默认变量一般是用来设置默认值,然后根据需求来覆盖的,覆盖的方式也很简单,只需要在默认变量之前重新声明下变量即可。
1 $baseLineHeight: 2;2 $baseLineHeight: 1.5 !default;3 body{4 line-height: $baseLineHeight; 5 }
编译后的css代码:
1 body{2 line-height:2;3 }
可以看出现在编译后的 line-height 为 2,而不是我们默认的 1.5。默认变量的价值在进行组件化开发的时候会非常有用。
局部变量和全局变量
如果已经存在同名的全局变量,从 3.4 版本开始,Sass 已经可以正确处理作用域的概念,并通过创建一个新的局部变量来代替。
全局变量与局部变量
1 /*SCSS*/ 2 $color: orange !default;/*定义全局变量(在选择器、函数、混合宏...的外面定义的变量为全局变量)*/ 3 .block { 4 color: $color;//调用全局变量 5 } 6 em { 7 $color: red;//定义局部变量 8 a { 9 color: $color;//调用局部变量10 }11 }12 span {13 color: $color;//调用全局变量14 }
css 的结果:
1 /*CSS*/ 2 .block { 3 color: orange; 4 } 5 em a { 6 color: red; 7 } 8 span { 9 color: orange;10 }
在元素内部定义的变量不会影响其他元素。如此可以简单的理解成,全局变量就是定义在元素外面的变量,如下代码:
$color:orange !default;
$color 就是一个全局变量,而定义在元素内部的变量,比如 $color:red; 是一个局部变量。
全局变量的影子
当在局部范围(选择器内、函数内、混合宏内...)声明一个已经存在于全局范围内的变量时,局部变量就成为了全局变量的影子。基本上,局部变量只会在局部范围内覆盖全局变量。
上面例子中的 em 选择器内的变量 $color 就是一个全局变量的影子。
1 /*SCSS*/ 2 $color: orange !default;//定义全局变量 3 .block { 4 color: $color;//调用全局变量 5 } 6 em { 7 $color: red;//定义局部变量(全局变量 $color 的影子) 8 a { 9 color: $color;//调用局部变量10 }11 }
什么时候声明变量?
建议:创建变量只适用于感觉确有必要的情况下。不要为了某些骇客行为而声明新变量,这丝毫没有作用。只有满足所有下述标准时方可创建新变量:
1、该值至少重复出现了两次;
2、该值至少可能会被更新一次;
3、该值所有的表现都与变量有关(非巧合)。
4、基本上,没有理由声明一个永远不需要更新或者只在单一地方使用变量。
嵌套-选择器嵌套
Sass 中还提供了选择器嵌套功能,但这也并不意味着你在 Sass 中的嵌套是无节制的,因为你嵌套的层级越深,编译出来的 CSS 代码的选择器层级将越深
Sass 的嵌套分为三种:
选择器嵌套
属性嵌套
伪类嵌套
1、选择器嵌套
假设我们有一段这样的结构:
1 <header>2 <nav>3 <a href=“##”>Home</a>4 <a href=“##”>About</a>5 <a href=“##”>Blog</a>6 </nav>7 <header>
想选中 header 中的 a 标签,在写 CSS 会这样写:
1 nav a {2 color:red;3 }4 header nav a {5 color:green;6 }
那么在 Sass 中,就可以使用选择器的嵌套来实现:
1 nav {2 a {3 color: red;4 5 header & {6 color:green;7 }8 } 9 }
嵌套-属性嵌套
Sass中还提供属性嵌套,CSS有一些属性前缀相同,只是后缀不一样,比如:border-top/border-right,与这个类似的还有margin、padding、font等属性。
例:
1 .box{2 border-top: 1px solid red;3 border-bottom: 1px solid green;4 }
在Sass中可以这样写:
1 .box{2 border:{3 top: 1px solid red;4 bottom: 1px solid green;5 }6 }
嵌套-伪类嵌套
伪类嵌套和属性嵌套非常类似,只不过他需要借助“&”符号一起配合使用。
就拿经典的“clearfix”为例吧:
1 .clearfix{ 2 &:before,&:after { 3 content:""; 4 display: table; 5 } 6 &:after { 7 clear:both; 8 overflow: hidden; 9 }10 }
编译出来的 CSS:
1 clearfix:before, .clearfix:after {2 content: "";3 display: table;4 }5 .clearfix:after {6 clear: both;7 overflow: hidden;8 }
避免选择器嵌套:
选择器嵌套最大的问题是将使最终的代码难以阅读。开发者需要花费巨大精力计算不同缩进级别下的选择器具体的表现效果。
选择器越具体则声明语句越冗长,而且对最近选择器的引用(&)也越频繁。在某些时候,出现混淆选择器路径和探索下一级选择器的错误率很高,这非常不值得。
为了防止此类情况,我们应该尽可能避免选择器嵌套。然而,显然只有少数情况适应这一措施。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

HTML、CSS和JavaScript在Web开发中的作用分别是:1.HTML定义网页结构,2.CSS控制网页样式,3.JavaScript添加动态行为。它们共同构建了现代网站的框架、美观和交互性。

HTML的未来趋势是语义化和Web组件,CSS的未来趋势是CSS-in-JS和CSSHoudini,JavaScript的未来趋势是WebAssembly和Serverless。1.HTML的语义化提高可访问性和SEO效果,Web组件提升开发效率但需注意浏览器兼容性。2.CSS-in-JS增强样式管理灵活性但可能增大文件体积,CSSHoudini允许直接操作CSS渲染。3.WebAssembly优化浏览器应用性能但学习曲线陡,Serverless简化开发但需优化冷启动问题。

HTML的未来充满了无限可能。1)新功能和标准将包括更多的语义化标签和WebComponents的普及。2)网页设计趋势将继续向响应式和无障碍设计发展。3)性能优化将通过响应式图片加载和延迟加载技术提升用户体验。

HTML、CSS和JavaScript在网页开发中的角色分别是:HTML负责内容结构,CSS负责样式,JavaScript负责动态行为。1.HTML通过标签定义网页结构和内容,确保语义化。2.CSS通过选择器和属性控制网页样式,使其美观易读。3.JavaScript通过脚本控制网页行为,实现动态和交互功能。

HTML是构建网页结构的基石。1.HTML定义内容结构和语义,使用、、等标签。2.提供语义化标记,如、、等,提升SEO效果。3.通过标签实现用户交互,需注意表单验证。4.使用、等高级元素结合JavaScript实现动态效果。5.常见错误包括标签未闭合和属性值未加引号,需使用验证工具。6.优化策略包括减少HTTP请求、压缩HTML、使用语义化标签等。

HTML的作用是通过标签和属性定义网页的结构和内容。1.HTML通过到、等标签组织内容,使其易于阅读和理解。2.使用语义化标签如、等增强可访问性和SEO。3.优化HTML代码可以提高网页加载速度和用户体验。

HTMLISNOTAPROGRAMMENGUAGE; ITISAMARKUMARKUPLAGUAGE.1)htmlStructures andFormatSwebContentusingtags.2)itworkswithcsssforstylingandjavascript for Interactivity,增强WebevebDevelopment。
