Scss 入门初体验

前言

CSS 原生代码的书写,在以往的开发中由于项目的增大会变得越来越难以维护。结构愈发庞大,类名、id各种选择器越来越多,在开发中书写样式时需要不断地重复父类名,且类名越来越长,名字越来越少,这对于项目的维护非常不利。有时候想要修改某个位置的样式,在几千行 CSS 样式代码中去定位该样式的位置是十分麻烦的。同时,CSS 在之前并不支持变量、函数之类的运算操作,不利于代码的复用,一样的样式除了复制粘贴之外别无选择。鉴于以上种种原因,社区涌现了几个优秀的 CSS 强化工具,目前主流便是 Scss 与 Less。本文集主要记录讲解 Scss 的使用,Less 在另一个文集。不过,Scss 完成之前并不会更新 Less 的文章。实际上这两种 CSS 强化工具乃至其他强化工具都大同小异,常用功能也相差不大,两者都很容易掌握。但本文集的目的在于记录 Scss 的使用方法,作为使用手册的同时,会研究一点实用且强大的小技巧,希望对 Scss 的使用更进一步。

Sass 与 Scss

两者其实是一个东西,区别在于书写样式。Sass 舍弃了大括号和分号,大括号使用空格代替,分号使用换行代替,本质在于减少无用代码的书写。Scss 则是对二者进行了保留。两者各有优势,使用上因人而异。官方演示案例使用 Scss 样式,本人习惯也是 Scss,Scss 在样式上贴近原生 CSS,阅读观感上也是更为舒服些。不过还是那句话,在语法和功能上二者并无区别,使用什么书写形式在于你自己。本文集主要讲解 Scss 的使用。

Scss 基础书写语法

本文集不会对 Scss 做全盘的记录和介绍,会记录一些实用的、常用的方法,也会研究一点 Scss 强大的小技巧,但这些强化其实内容很多,实用的也就那么几个点,没必要用那么复杂,与其研究 Scss,不如研究原生 CSS3。在一些方法上,原生的 CSS 有着更强大的能力和可读性。工具本身的使用就是如此,什么好用就用什么,能简单就简单,效率与实用永远是第一位的。

嵌套

在一众 CSS 强化工具中,代码嵌套是一个最基础的增强,这让 CSS 代码变得层次清晰,结构明了,更易读易维护。但无论这些形式如何花里胡哨,这些代码最终都会编译为原生的 CSS。但这无关紧要了,重要的是开发者方便了,效率更高,项目更加易于管理:

#main p {
  color: #00ff00;
  width: 97%;
  .redbox {
    background-color: #ff0000;
    color: #000000;
  }
}

编译后:

#main p {
  color: #00ff00;
  width: 97%; 
}
#main p .redbox {
  background-color: #ff0000;
  color: #000000; 
}

父选择器简写:&

有时,我们在嵌套了很多层后,想要使用到父选择器,比如要使用到伪元素或者伪类,就需要使用到父选择器。但这时已经嵌套了很多层,再回去找父选择器是哪个,再使用它,这并不比原生 CSS 好多少,于是,& 符号便成了父选择器的代词或语法糖,例如需要给父元素加个 hover:

a {
  font-weight: bold;
  text-decoration: none;
  &:hover { text-decoration: underline; }
  body.firefox & { font-weight: normal; }
}

属性嵌套

让我们再重复一遍 Scss 等强化工具的使命是什么?写得更少!既然如此,想象一下,我们在写字体样式时,是不是需要写一连串的font-xxxx?那么,Scss 同样做了简化:

.funky {
  font: {
    family: fantasy;
    size: 30em;
    weight: bold;
  }
}

变量

CSS3 也支持变量,使用 -- 开头,但 Scss
里的变量使用 $ 开头,这与许多库的选择一样,$ 就是如此方便和舒适。Scss 的变量同样支持块作用域,在 { } 里声明的变量属于局部变量,之外的属于全局作用域,如果想要让一个块级作用域的变量成为全局作用域变量,可以在其后使用!global进行声明。

// $ 定义变量
$width: 5em;
#main {
  width: $width;
}

// 局部变全局
#main {
  $width: 5em !global;
  width: $width;
}
#sidebar {
  width: $width;
}

好吧,既然是初体验,讲到这里也差不多了。对于一些简单的样式,以上 Scss 技巧已经够用了,且以上书写形式也是最常用的。不过,既然是有进阶,这点东西自然是不够的。后面我们会研究更强大的 Scss 功能,包括mixin,函数等。其实,原生的 CSS3 的许多功能吃透也是不容易的,没有太多人深究 Scss 这种东西,如果写得太复杂,维护你代码的兄弟估计得对你进行亲切地问候了。

记住,简单实用,高效易维护是使用这些工具的基本原则。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容