惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Schneier on Security
Schneier on Security
N
Netflix TechBlog - Medium
IT之家
IT之家
MongoDB | Blog
MongoDB | Blog
博客园_首页
S
SegmentFault 最新的问题
H
Help Net Security
P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
T
The Blog of Author Tim Ferriss
量子位
GbyAI
GbyAI
M
MIT News - Artificial intelligence
Recorded Future
Recorded Future
P
Privacy & Cybersecurity Law Blog
B
Blog
月光博客
月光博客
博客园 - 聂微东
Vercel News
Vercel News
罗磊的独立博客
腾讯CDC
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
A
Arctic Wolf
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Stack Overflow Blog
Stack Overflow Blog
T
Threat Research - Cisco Blogs
Blog — PlanetScale
Blog — PlanetScale
L
Lohrmann on Cybersecurity
I
Intezer
小众软件
小众软件
T
The Exploit Database - CXSecurity.com
Jina AI
Jina AI
C
Check Point Blog
AWS News Blog
AWS News Blog
C
Cisco Blogs
Martin Fowler
Martin Fowler
The Last Watchdog
The Last Watchdog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
宝玉的分享
宝玉的分享
S
Security Affairs
大猫的无限游戏
大猫的无限游戏
N
News and Events Feed by Topic
雷峰网
雷峰网
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
H
Hacker News: Front Page
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
F
Full Disclosure
P
Proofpoint News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Security Blog
Microsoft Security Blog

囧克斯

奔四了,写给40岁的自己 有序退网 我和 Vue.js 的十年 我参与《代码之外 Beyond Code》的故事 博客站迁移至 VitePress 的备忘 写给我的奶奶 中文格式化小工具 zhlint 及其开发心得 vue-mark-display:用 markdown 语法轻松撰写幻灯片 我对技术会议的一些看法 VueConf Hangzhou 见闻 第四届 CSSConf CN 见闻 [译]Web 表单的未来 [译]苹果正在做一些他们的程序员明摆着不想要的东西 [译]为什么我不会无偿加班且你也不应该 [译]如果管理是唯一可走的路,那就完蛋了 [译]如何撰写 Git 提交信息 [译]C 程序的原则 Vue 2.0 来了! Weex 近 4 个月的开源之路 Weex 在 JS Runtime 内的多实例管理 我理解的 SPA 我理解的 Flux 架构 【整理】Vue 2.0 自 beta 1 到 beta 4 以来的主要更新 通过一张图走进 Vue 2.0 Code Review for Vue 2.0 Preview Vue 2.0 发布啦! 务实的小而美 Vue.js 1.0.0 发布了! [译]如何成为一名卓越的前端工程师 手机淘宝前端的图片相关工作流程梳理 [译]如何让办公室政治最小化 Vue.js 源码学习笔记 从原型到发布——“团队时间线” 1.0 开发心得 Vue + webpack 项目实践 用 Koa 写服务体验 webcomponents 笔记 之 配置管理 小秀个人的13~14年摄影作品 (共19张) 由今年D2前端论坛想到的 [译]CSS命名神马的真心难 [译]Git 分支的最佳实践 [译]撰写可测试的 JavaScript [译]语义化版本管理 [译]通过HTML5 Canvas API调节图像的亮度和颜色 [译]JavaScript V8性能小贴士 [译]视觉差,走起! [译]Chrome开发者工具中评估性能的五大新特性 精气神儿 细节无微不至,彩屏让人又爱又恨——新老“神机”大对决:Nokia 1050 vs Nokia 1202 秦升拿到红牌之后…… Connect中间件使用手册 巧用 RequireJS Optimizer 给传统的前端项目打包 编辑器小调查结果 [译]JSLint 文档 烟火——写给蛇年的傲游和我 小秀个人的全年摄影作品 (共15张) 2012年终毫无正能量的总结 标签?ID?还是CLASS? 微创新=伪创新 HTML5峰会归来 分享bookmarklet一则:随意阅读 国际羽联和中国队之间的恶性循环 ZeroClipboard 学习笔记 “思考人生” 听杨东杰弹吉他 学习精髓 网站装修笔记20120426 网站装修笔记20120414 网站装修笔记20120406 分享Typecho插件:百度统计助手 我的得奖感言 网站装修笔记20120331 用CSS3制作尖角标签按钮样式 分享Typecho插件:Markdown 解析器 + 编辑器 分享Typecho皮肤:我的字很大 汇总自己过去的一些HTML5科普文章 html5中的消息通信简介 + 我的新网站开张 网站装修计划 Typed Arrays 是神马? 文明看球 HTML5中的文件处理 之 File Writer API HTML5中的文件处理 之 File API 独生子女、互相等和不耐烦 IndexedDB技术简介(四) IndexedDB技术简介(三) IndexedDB技术简介(二) IndexedDB技术简介(一) 把博客的字体进一步调大,同时去掉了侧边栏 “模仿别人是为了找到自己” 写给我未婚妻的2011年 写给自己的2011年 手把手教你入门EaselJS做HTML5动画 “吃了吧,不吃就浪费了” 写给傲游的2011年 所谓专业 写给HTML5的2011年 对HTML5中LocalStorage的一些使用建议 回味一下我2011年看到的最过瘾的5场足球比赛 浅浅浅谈开饭店被顾客吃出“异物”的用户体验 前端的本职 继续对Mac穷追猛打 之 修改原生按钮文字大小的技巧
用Sass重新整理自己的博客主题样式
勾三股四 · 2013-06-05 · via 囧克斯

Sass

远远关注Sass很久了,今天终于鼓起勇气写了我的第一个Sass文件

Sass简介 ​

一种CSS的预处理程序,基于Ruby运行。安装过程和相关的准备工作非常简单:

  1. 当然首先要安装Ruby
  2. gem install ruby,必要的环境下需要在命令前加上sudo
  3. 进入我的博客主题文件夹,运行sass-convert style.css style.sass,把我的css文件先转换成sass文件
  4. 运行sass --watch style.sass:style.css,使得程序自动把style.sass文件接下来的任何改动自动同步转换到style.css

这时,新的Sass文件就创建完毕了!^_^ 去碎觉……

呵呵,开个玩笑。其实这样的Sass文件虽然格式上没有任何问题,但和直接撰写CSS几乎没区别。而Sass除了可以让我们少写几个花括号和分号之外,其实还有很多实用的特性是我们真正需要的。

无论如何,现在的这个Sass文件是一个整理的基础,接下来,我们就来一步一步整理这个文件,同时也一步一步熟悉Sass的特性。


Variables: 变量与计算 ​

我把CSS文件中通用的字体、颜色等等属性值归纳了出来,并找到其中的相关性,比如文本框的边框颜色始终比链接的文字颜色亮一些,即:

a {
  color: #0c0;
}

input:not([type]),
input[type="text"],
input[type="password"] {
  border: 2px lime solid;
}

在Sass中将其改写为:

$color-link: #0c0

a
  color: $color-link

input:not([type]),
input[type="text"],
input[type="password"]
  border: 2px lighten($color-link, 10%) solid

即可,输出的结果不变。

Nesting:选择器嵌套 ​

把嵌套着的选择器添加不同的缩进,同时把重复表达的外层选择器去掉。如:

h2 {
  margin: 0.75em 0;
  padding: 0.25em 0.5em;
  background-color: rgba(0, 204, 0, 0.4);
  color: #339933;
}

h2 strong {
  color: white;
}

h2 a {
  color: #009900;
}

h2 a:hover {
  background: yellow;
  color: black;
}

可以转换为:

h2
  margin: 0.75em 0
  padding: 0.25em 0.5em
  background-color: rgba($color-link, 0.4) // 链接颜色,透明度40%
  color: desaturate($color-link, 50%) // 链接颜色,饱和度减少50%

  strong
    color: white

  a
    color: darken($color-link, 10%) // 链接颜色,变暗10%

    &:hover
      background: $color-mark // 特殊标记的颜色
      color: black

Mixin:将可重用的CSS属性值混入不同的CSS规则当中 ​

这个特性是我花最多时间整理的,整理过后发现整个文件结构真的清晰很多。

提取出成套的样式 ​

比如我的博客主题中,3D的标题和按钮就是两套集成度重用性都很高的样式,我创建了@mixin title-3d@mixin button-3d两个大的属性集合:

@mixin title-3d
  ...
  &::before,
  &::after
    ...
  ...

@mixin button-3d
  ...
  &::before,
  &::after
    ...
  &:hover::before
    ...
  &:hover::after
    ...
  ...

随后我把这些属性集合应用到了标题和按钮上:

h2
  @include title-3d

button,
input[type="button"],
input[type="submit"],
.button-3d
  @include button-3d

继续归纳和抽象 ​

整理完上面这两个大的集合之后,我发现,其实3d的标题和按钮样式上其实也有很多想通的地方,于是我进一步抽象出了一些3d模型的通用集合:

@mixin short-transform
  -webkit-transition: -webkit-transform 0.3s

@mixin transform-origin-0
  -webkit-transform-origin: 50% 50%
@mixin transform-origin-1
  left: 0
  top: 0
  -webkit-transform-origin: 0% 0%
@mixin transform-origin-2
  right: 0
  top: 0
  -webkit-transform-origin: 100% 0%
@mixin transform-origin-3
  right: 0
  bottom: 0
  -webkit-transform-origin: 100% 100%
@mixin transform-origin-4
  left: 0
  bottom: 0
  -webkit-transform-origin: 0% 100%

@mixin init-3d
  @include short-transform
  @include transform-origin-0
  -webkit-transform-style: preserve-3d

@mixin p-element
  position: absolute
  content: ""

然后到之前的集合把这些通用集合抽象出来:

@mixin title-3d
  @include init-3d
  ...

  &::after,
  &::before
    @include p-element
    @include short-transform
    background-color: lighten($color-text, 30%)

  &::before
    height: 100%
    width: $button-3d-height*2
    @include transform-origin-1
    ...

  &::after
    height: 100%
    width: $button-3d-height*2
    @include transform-origin-2
    ...

统一封装不同浏览器的CSS前缀 ​

@mixin box-sizing($sizing: border-box)
  -moz-box-sizing: $sizing
  box-sizing: $sizing

@mixin transform($value...)
  -webkit-transform: $value
  transform: $value

@mixin transform-origin($value)
  -webkit-transform-origin: $value
  transform-origin: $value

@mixin transform-3d($value: preserve-3d)
  -webkit-transform-style: $value
  transform-style: $value

@mixin transform-perspective($value: 350px)
  -webkit-perspective: $value
  perspective: $value

@mixin transition($value...)
  -webkit-transition: $value
  transition: $value

@mixin transition-transform($duration: 0.3s)
  -webkit-transition: -webkit-transform $duration
  transition: transform $duration

...

Extend:选择器的继承 ​

其实这个特性和mixin很多时候可以二选一使用,比如这里的.button-3d选择器可以不必和buttoninput[type="button"]input[type="submit"]写在一起,可以写成:

.button-3d
  ...

button,
input[type="button"],
input[type="submit"]
  @extend .button-3d

不过我这里这样写的必要性不太大,所以就没有实际的例子可以分享了。

结语 ​

最终我的第一个Sass文件就这样整理完毕了。(p.s.当然这个文件未来可能还是会有改动,届时可能会和本篇文章描述的内容不符)

经过上面这几轮代码的整理,这个Sass文件才真的很Sass了。回顾这次整理的过程,先后用到了变量、运算、嵌套、重用属性等Sass的特性,简单明了,而且sass --watch命令、sass-convert命令可以方便的对文件进行监听和格式转换。我几乎在感觉不到学习成本的情况下提高了开发效率。这里也推荐大家试试看。