Skip to main content

Command Palette

Search for a command to run...

Sass中通过mixin封装透明背景模块

Published
1 min read

之前讲到过CSS实现背景透明完美解决方案
在Sass里可以通过mixin将其封装起来。

先回顾一下

/* 白色背景,透明度0.6 */
.alpha60 {
  background: rgb(255, 255, 255);
  background: rgba(255, 255, 255, 0.6);
  background: transparent\9;
  zoom: 1;
  filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99ffffff, endColorstr=#99ffffff);
  -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99ffffff, endColorstr=#99ffffff)";
}

分析

需要做的工作有:

  • 颜色和透明值应该通过参数传入
  • 需要能计算出rgba值:rgb(255, 255, 255)
  • 需要计算出IE下的值#99ffffff
  • 封装成minix模块,以便调用

过程

Sass的文档不全,为了查找一些计算函数,我只好去源码里找。
开始想寻求的是一个转十六进制的方法,结果发现ie_hex_str已经实现了。
在这里贴段里面的实现代码,来看看Sass的计算功能:

# Sass
alpha = (color.alpha * 255).round.to_s(16).rjust(2, '0')
# 等价于JS中的:
Math.round(0.6 * 255).toString(16);

最后的rjust方法,应该是空位补零。

非常有用的两个页面: 函数源码在线调试Sass

总结

最终代码如下:

@mixin better_transparentize($color, $alpha)
  $c: rgba($color, $alpha)
  $ie_c: ie_hex_str($c)
  background: rgba($color, 1)
  background: $c
  background: transparent\9
  zoom: 1
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#{$ie_c}, endColorstr=#{$ie_c})
  -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#{$ie_c}, endColorstr=#{$ie_c})"

然后在需要的地方直接引用即可,如:

.box
  @include better_transparentize(white, .8)

More from this blog

学习AngularJS方法(翻译)

这个AngularJS课程意在为你揭露Angular各方面话题的最佳资源。我们尽量展示其各方面优势,使得你可得到这些话题完整的全景。 课程 课程的学习曲线就像曲棍球。在初期离开地面时可以轻松的几个基本功能的应用开始,但当应用变大变复杂时,若不注意结构会使开发变得棘手与笨重。 AngularJS入门时, 随便看几篇教程与文档的“准备-射击-瞄准”的学习方法会导致混淆与挫折。 这个课程可以带你遍历Angular的每个关键点。最后你可以流畅高效地架构大型应用。 预备知识 掌握HTML、CSS、Jav...

Sep 7, 20131 min read

Arch升级失败后修复glibc记录

起因 $ pacman -Syu时提示错误, 因为Arch前段时间将/lib目录链到了/usr/lib, 见公告The /lib directory becomes a symlink。 当时没有看到这篇公告,而在网上搜到某贴说使用--force参数, 结果执行完后系统挂掉,因glibc不存在,所有命令行不可使用。 解决方法 从光盘启动Arch。 $ fdisk -l查看磁盘状态, 我的系统分区为/dev/sda6。 创建目录:$ mkdir /root/tmp_disk。 mount分区,我...

Aug 10, 20122 min read

Fancyoung's Blog

19 posts