Sass @at-root (1)

SassConf大会上,给我们传递了Sass3.3的新特性。这些新特性有很多意义,特别是@at-root指令,这让你的代码会得更佳清洁。

今天我们主要一起来了解Sass中的@at-root特性的使用规范。

在具体了解@at-root规范之间,我们先来回忆Sass的嵌套功能。简单的来看一个示例。在我们的CSS中常见有这样的一段代码:

.foo {
    color:green;
}
.foo .bar {
    color:gray;
}

回到Sass中,实现上面的样式,我们可以使用Sass的嵌套来完成:

.foo {
    color: green;
    .bar {
        color: gray;
    }
}

除了上面的方法之外,还可以通过连体符&来实现:

.foo {
    color: green;

    & .bar {
        color: gray;
    }
}

如若简单实现:

.foo .bar {
    color: gray;
}

还可以使用另外一种特殊方式来实现:

.bar {
    .foo & {
        color: gray;
    }
}

在我们CSS中有一种命名方式是BEM,如:

.block {}
.block__element{}
.block--modifier{}

试想我们在Sass中是否可以通过下面的方式来实现上面样式代码:

#{&}_element{}

不仿我们来验证一下:

.block {
    color: red;

    #{&}__element {
        color:blue;
    }

    #{&}--modifier {
        color: orange;
    }
}

悲催的是,编译出来的CSS并不是我们想要的代码:

.block {
  color: red; }
  .block .block__element {
    color: blue; }
  .block .block--modifier {
    color: orange; }

但在LESS和Stylus中,能很好的实现BEM类名的形式。此时在想,在Sass中有没有这样的功能呢?值得幸运的是,在Sass3.3中新增加了@at-root特性,能实现上面BEM的特性:

.block {
    color: red;

    @at-root #{&}__element {
        color: blue;
    }

    @at-root #{&}--modifier {
        color:orange;
    }
}

@at-root特性

前而的例子告诉我们@at-root是什么。通过他可以告诉Sass,你不想嵌套选择器。当使用&选择器时,就算你不想嵌套选择器,Sass也会自动嵌套。但往往很多时候,我们是不想要嵌套选择器,例如BEM。使用@at-root#{&}可以引用父(在Sass中总是引用父选择器)和插值,可以嵌套,做一些其他的事情。接下来,我们通过一些实例来说明@at-root的特性。

@at-root运行环境

@at-root是Sass的新特性。要想能正常的运行@at-root,首先需要先安装Sass的全新版本:只要确保你的电脑上已经安装了Ruby,你可以直接打开终端命令运行下面的命令安装Sass:

$ gem install sass --pre 

如果你无法确认,你以前安装的Sass是不是最新版本,你可以通过:

$ sass -v

显示的版本信息:

Sass 3.3.0.rc.2 (Maptastic Maple)

如果不是,你可以使用下面的命令更新Sass:

$ gem update sass

注意,如果你的系统是刚升级到OS X 10.9 Mavericks,你得重新更新Command Line Tools:

$ xcode-select --install

重启您的终端命令,重新执行上面的命令就可以获取最新版本的Sass。请注意,这是一个未发表的版本,因为它还在开发中,但现在玩一点都不受影响,还可以体验Sass中新增加的一些特性

“Ben FrainThe things I want from Sass aren’t the things I thought I wanted一文中也详细的描述了Sass中新增的特性,如:Source Maps。”

@at-root规范

@at-root使用规范是如何工作,这里我们通过一些测试用例来做说明:

内联选择器模式

SCSS
.foo {
    @at-root .bar {
        color:gray;
    }
}
CSS
.bar {
  color: gray;
}

测试用例可以说明,@at-root的内联选择器模式,将不会让你的选择器发生任何的嵌套,直接移除了父选择。在来看一个嵌套深一点的用例:

SCSS
.foo {
    @at-root .bar {
        color: gray;

        @at-root button{
            color:red;

            @at-root span {
                color: orange;
            }
        }
    }
}
CSS
.bar {
  color: gray;
}
button {
  color: red;
}
span {
  color: orange;
}

在SCSS中嵌套,使用@at-root内联选择器模式,编译出来的CSS无任何嵌套,让代码更加的简单。回到SCSS中的嵌套中,如果不使用@at-root内联选择器模式,将会按代码的层级关系一层一层往下嵌套。如上例,将用例中的@at-root去掉之后,将会编译出像下面的CSS代码(了解过Sass)的同学,一点都不会觉得奇怪。

.foo .bar {
  color: gray;
}
.foo .bar button {
  color: red;
}
.foo .bar button span {
  color: orange;
}

Sass @at-root (1),布布扣,bubuko.com

时间: 2024-09-30 16:32:47

Sass @at-root (1)的相关文章

关于root(其他)用户拒绝登陆mysql的处理方法

1.1.   关于root(其他)用户拒绝登陆的处理方法 问题描述: [[email protected] mysql-install]# mysql -uroot-p Enter password: ERROR 1045 (28000): Access denied for user'root'@'localhost' (using password: YES) 1.1.1.      跳过权限表登陆 (1)重启数据库,跳过权限表方式登陆: [[email protected] mysql-i

sass的用法小结(四)进阶篇

Sass 的数据类型 Sass 既然有了类似编程语言的功能,自然也就有了简单的数据类型.这里简单的介绍一些 Sass 中的数据类型,因为在后面的讨论中要用到有关的内容. Sass 中主要有六种数据类型: 数字型 (e.g. 1.2, 13, 10px) 文本型,单引号.双引号或者不加都可以 (e.g. “foo”, ‘bar’, baz) 颜色值类型 (e.g. blue, #04a3f9, rgba(255, 0, 0, 0.5)) 布尔值 (e.g. true, false) nulls (

sass的用法小结(三)

5. 混合器; 如果你的整个网站中有几处小小的样式类似(例如一致的颜色和字体),那么使用变量来统一处理这种情况是非常不错的选择.但是当你的样式变得越来越复杂,你需要大段大段的重用样式的代码,独立的变量就没办法应付这种情况了.你可以通过sass的混合器实现大段样式的重用. 混合器使用@mixin标识符定义.看上去很像其他的CSS @标识符,比如说@media或者@font-face.这个标识符给一大段样式赋予一个名字,这样你就可以轻易地通过引用这个名字重用这段样式.下边的这段sass代码,定义了一

Own your Android! Yet Another Universal Root(二)

利用 目标 直到现在我们已经看出这是一个典型的UAF漏洞并且一个位于用户空间迷途的文件描述符指向内核中的PING 套接字可以被攻击者获得.接下来我们要填充套接字对象,重新使用这个对象.之后我们可以执行内核中任意代码,最终完成Android设备的提权. 实际上,我们使用套接字对象的close函数.当close(sockfd)调用时,内核最终会进入如下代码 int inet_release(struct socket *sock) { struct sock *sk = sock->sk; if (

Sass&Compass学习笔记(一)

1.sass中可以使用变量 变量名以$符号开头,可包含所有可用作CSS类名的字符,包括下划线和中划线. 可见,中划线也是可以作为命名的字符,这是与很多其他语言的不同之处.变量的使用实例: $company-blue: #1875e7; h1#brand { color: $company-blue; } #sidebar { background-color: $company-blue; } 这个例子中,我们定义了一个$compay-blue变量,存放了#1875e7的颜色,因此,当多处需要改

sass的用法小结(二)

3. 导入SASS文件; css有一个特别不常用的特性,即@import规则,它允许在一个css文件中导入其他css文件.然而,后果是只有执行到@import时,浏览器才会去下载其他css文件,这导致页面加载起来特别慢. sass也有一个@import规则,但不同的是,sass的@import规则在生成css文件时就把相关文件导入进来.这意味着所有相关的样式被归纳到了同一个css文件中,而无需发起额外的下载请求.另外,所有在被导入文件中定义的变量和混合器(参见2.5节)均可在导入文件中使用. 使

支持新版chrome,用webstorm编译形成css和sourcemap,调试sass和less源文件(转)

旧版的chrome有个support for sass,但是新版chrome没有这个功能了.看到网上提供的方法比较多,也很乱,旧版新版的都有.而且不能指定自己所需要的路径. 所以就做了下改版. sass和less都有提供一个map文件,这个文件是用来干嘛的呢? .map文件是一个json格式的文件,可以直接调试less/sass源文件. ======================================================== 先是less配置(sass配置基本与less一

sass学习入门篇(三)

这章我们讲“嵌套”,嵌套包括两种:一,选择器嵌套.二是属性的嵌套.一般用选择器嵌套居多 一,选择器嵌套:指的是在一个选择器中嵌套另一个选择器来实现继承.使用&表示父元素选择器 li{ float :left; a{ color:#fff; &:hover{ color:#ddd; } } } 跟css用法一样,没什么说的. 二,属性嵌套,指的是有些属性拥有同一个开始单词,如border-width,border-color都是以border开头 .fshadow{ boder:{ styl

linux学习笔记(3):ubuntu使用超级管理员root登录

Ubuntu有一个与众不同的特点,那就是初次使用时,你无法作为root来登录系统,为什么会这样?这就要从系统的安装说起.对于其他Linux系统来 说,一般在安装过程就设定root密码,这样用户就能用它登录root帐户或使用su命令转换到超级用户身份.与之相反,Ubuntu默认安装时,并没有 给root用户设置口令,也没有启用root帐户.问题是要想作为root用户来运行命令该怎么办呢?没关系,我们可以使用sudo命令达此目的. sudo是linux下常用的允许普通用户使用超级用户权限的工具,该命

CSS预编译器:Sass(入门),更快的前端开发

Sass 扩展了 CSS3,增加了规则.变量.混入.选择器.继承等等特性.Sass 生成良好格式化的 CSS 代码,易于组织和维护. SASS是对CSS3(层叠样式表)的语法的一种扩充,它可以使用巢状.混入.选择子继承等功能,可以更有效有弹性的写出Stylesheet.Sass最后还是会编译出合法的CSS让浏览可以使用,也就是说它本身的语法并不太容易让浏览器识别(虽然它和CSS的语法非常的像,几乎一样),因为它不是标准的CSS格式,在它的语法内部可以使用动态变量等,所以它更像一种极简单的动态语言