Sass笔记补充

sass中常用的mixin封装

  • 网站整体居中
@mixin site-center($width: 960px) {
  width: $width;
  margin: 0 auto;
}
  • clearfix清除浮动
@mixin clearfix() {
  &before,
  &after {
    content: '';
    display: table;
  }
}
  • 圆角边框
@mixin border-radius($radius) {
    -webkit-border-radius: $radius;
     -moz-border-radius: $radius;
      -ms-border-radius: $radius;
          border-radius: $radius;
}
  • 浏览器前缀
@mixin css3($property, $value) {
        @each $prefix in -webkit-,
        -moz-,
        -ms-,
        -o-,
        '' {
            #{$prefix}#{$property}: $value;
        }
    }
  • 动画keyframes生成
@mixin keyframes($animationName) {
    @-webkit-keyframes #{$animationName} {
        @content;
    }
    @-moz-keyframes #{$animationName} {
        @content;
    }
    @-o-keyframes #{$animationName} {
        @content;
    }
    @keyframes #{$animationName} {
        @content;
    }
}
  • 文本溢出用...显示
@mixin text-ellipsis () {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

text-overflow:ellipsis属性来实现单行文本的溢出显示省略号(…)。当然部分浏览器还需要加宽度width属性

  • 纯css实现三角形
/* 箭头
arrow(direction, size, color);
*/
@mixin arrow($direction, $size, $color) {
    width: 0;
    height: 0;
    line-height: 0;
    font-size: 0;
    overflow: hidden;
    border-width: $size;
    cursor: pointer;
    @if $direction == top {
        border-style: dashed dashed solid dashed;
        border-color: transparent transparent $color transparent;
        border-top: none;
    }
    @else if $direction == bottom {
        border-style: solid dashed dashed dashed;
        border-color: $color transparent transparent transparent;
        border-bottom: none;
    }
    @else if $direction == right {
        border-style: dashed dashed dashed solid;
        border-color: transparent transparent transparent $color;
        border-right: none;
    }
    @else if $direction == left {
        border-style: dashed solid dashed dashed;
        border-color: transparent $color transparent transparent;
        border-left: none;
    }
}
  • 媒体查询
@mixin screen($min,$max){
    @media screen and (min-width:$min) and (max-width: $max){
        @content; //@content代表内容是自定义的
    }
}
@mixin min-screen($width){
    @media screen and (min-width: $width){
        @content;
    }
}
@mixin max-screen($width){
    @media screen and (max-width: $width){
        @content;
    }
}

Sass中的mixin和%placeholder的本质区别

  • mixin基本用法
@mixin box($width: 100px, $height: 100px) {
  width: $width;
  height: $height;
  box-shadow: 0 0 5px black;
  margin: 10px;
}

.smallBox {
  @include box(100px, 100px);
}
.bigBox {
  @include box(200px, 200px);
}
编译后的代码:
.smallBox {
  width: 100px;
  height: 100px;
  box-shadow: 0 0 5px black;
  margin: 10px;
}
.bigBox {
  width: 200px;
  height: 200px;
  box-shadow: 0 0 5px black;
  margin: 10px;
}

可以看到,Mixin不过是将代码复制了一块

  • %placeholder的基本用法

%placeholder 与 Mixin 差不多,但是不能传入参数。而且他不是直接复制代码块,而是将共有的属性提到前面,然后使用这两个 div 的选择器一起去调用。

%box {
  box-shadow: 0px 0px 5px black;
  margin: 10px;
}

.smallBox {
  @extend %box;
  width: 100px;
  height: 100px;
}
.bigBox {
  @extend %box;
  width: 200px;
  height: 200px;
}
编译后的代码:
.smallBox, .bigBox {
  box-shadow: 0px 0px 5px black;
  margin: 10px;
}
.smallBox {
  width: 100px;
  height: 100px;
}
.bigBox {
  width: 200px;
  height: 200px;
}

总结

我们会发现,在编译后,%placeholder会帮我们把重复引用的代码进行合并,但是使用mixin的时候并不会,并且,不能%placeholder不能传递参数,只能定义一段重复的代码段,而mixin可以传参数,封装一些需要传参数的代码

利用placeholder进行性能优化

  • 通过上面的比较,我们可以知道,利用%placeholder能将重复代码合并的特性,将现有的css重复样式抽离出来,根据代码的块的不同拆分成多个不同的%placeholder

大型项目的sass目录该如何组织

通过搜索相关资料,总结出以下几个构建文件的目录以及其详情:

  • Base

base/ 文件夹包含了项目中一些相关的基础样式,比如normalize.css和一些关于文本排版方面的

  • Helpers

helpers/文件夹(或utils/)主要包含了项目中关于Sass的工具和帮助之类。在里面放置了我们需要使用的_function.scss,和_mixin.scss。在这里还包含了一个_variables.scss文件(有的地方也称其为_config.scss),这里包含项目中所有的全局变量(比如排版本上的,配色方案等等)。

_variables.scss
_mixin.scss
_function.scss
_placeholders.scss(也有称为_helpers.scss)

  • Layout

layout/文件夹(有时也称为partials/)中放置了大量的文件,每个文件主要用于布局方面的,比如说"header",“footer”等。他也会包括_grid.scss文件,用来创建网格系统。

_grid.scss
_header.scss
_footer.scss
_sidebar.scss
_forms.scss

  • Components
    对于一些小组件,都放在了components/文件夹(通常也称为modules/)

_media.scss
_carousel.scss
_thumbnails.scss

  • Page

如果你需要针对一些页面写特定的样式,我想将他们放在page/文件夹中,并且以页面的名称来命名。例如,你的首页需要制作一个特定的样式,那么你就可以在page/文件夹中创建一个名叫_home.scss文件。

  • Themes

要为一个大型的网站制作多个主题,那么有一个theme/文件夹是非常有意义的。你可以把主题相关的文件放在这个文件夹中。

_theme.scss
_admin.scss

  • Vendors

主要用来包含来自外部的库和框架的CSS文件。比如Bootstrap,jQueryUI。把这些文件放在同一个文件夹中。
例如:
bootstrap.scss
jquery-ui.scss

config.rb的其它配置项及作用

# import-once 保证后面如果重复引用了模块,那么只会使用一次,虽然引用了多次,但不会报错
# 例如 import 'compass/reset' ...  import 'compass/reset'  只会使用一次
# 但是如果真的需要引用两次,那么怎么办呢?这样写 import 'compass/reset!' 在后面添加 ! 
require 'compass/import-once/activate'
# 可以使用compass-normalize来替换掉原来的compass/reset
require 'compass-normalize'

# 解析后的显示方式
# 如果项目即将上线,就需要压缩CSS以确保文件尽可能的小,这时候只需要把output_style设置为:compressed
# output_style = :expanded or :nested or :compact or :compressed
output_style = :expanded

# 样式打包发布后的根目录
http_path = "/"  
# 存放css文件的目录
css_dir = "css"  
# 存放sass的目录
sass_dir = "sass"
# 存放图片的目录,当在css或者sass中引入的时候,不需要加上img这个目录
images_dir = "img" 
# 存放js的文件目录
javascripts_dir = "js"
# 取消生成注释
line_comments=true


# 当我们编译Sass文件时,在我们的根目录会出现.sass-cache文件夹,看文件夹名就知道这里放的该是Sass缓存文件,设置为true可以帮我们加快sass文件的编译
cache = true


# 使用相对路径进行查找文件
# relative_assets = true

# 设置开发或者生产环境
# enviroment = :production :development

# 设置偏向的语法  :sass :scss
# preferred_syntax = :sass

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

推荐阅读更多精彩内容