sassmagic 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/sassmagic.rb +1 -1
- data/stylesheets/sassmagic/README.md +11 -11
- data/stylesheets/sassmagic/base/_reset.scss +285 -0
- data/stylesheets/sassmagic/helpers/_helpers.scss +11 -13
- data/stylesheets/sassmagic/helpers/_mixins.scss +1 -0
- data/stylesheets/sassmagic/helpers/mixins/README.md +21 -20
- data/stylesheets/sassmagic/helpers/mixins/_backgroundTransparent.scss +5 -4
- data/stylesheets/sassmagic/helpers/mixins/_content.scss +17 -14
- data/stylesheets/sassmagic/helpers/mixins/_ellipsis-overflow.scss +8 -8
- data/stylesheets/sassmagic/helpers/mixins/_float.scss +9 -8
- data/stylesheets/sassmagic/helpers/mixins/_px2rem.scss +43 -1
- data/stylesheets/sassmagic/helpers/mixins/_quantity-queries.scss +212 -0
- data/stylesheets/sassmagic/helpers/mixins/_resizable.scss +4 -2
- data/stylesheets/sassmagic/helpers/mixins/_stickyFooter.scss +7 -4
- data/stylesheets/sassmagic/helpers/mixins/_triangle.scss +25 -0
- data/stylesheets/sassmagic/helpers/mixins/_visuallyHidden.scss +22 -22
- metadata +5 -2
data/lib/sassmagic.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
## 目录结构
|
2
2
|
|
3
3
|
sassmagic/
|
4
4
|
|
|
@@ -47,48 +47,48 @@
|
|
47
47
|
|
|
48
48
|
`– main.scss # primary Sass file
|
49
49
|
|
50
|
-
|
50
|
+
### 目录结构描述
|
51
51
|
|
52
52
|
目录结构采用的是常见的7-1模式的结构:7个文件夹,1个文件。基本上,你需要将所有的部件放进7个不同的文件夹和一个位于根目录的文件(通常命名为 main.scss)中——这个文件编译时会引用所有文件夹而形成一个CSS样式表。
|
53
53
|
|
54
|
-
####base
|
54
|
+
#### base
|
55
55
|
|
56
56
|
`base/`文件夹存放项目中的模板文件。在这里,可以找到重置文件、排版规范文件或者一个样式表(我通常命名为`_base.scss`)——定义一些HTML元素公认的标准样式。
|
57
57
|
|
58
|
-
####components
|
58
|
+
#### components
|
59
59
|
|
60
60
|
对于小型组件来说,有一个`components/`文件夹来存放。相对于`partials/`的宏观(定义全局线框结构),`components/`更专注于局部组件。该文件夹包含各类具体模块,基本上是所有的独立模块,比如一个滑块、一个加载块、一个部件……由于整个网站或应用程序主要由微型模块构成,`components/`中往往有大量文件。
|
61
61
|
|
62
|
-
####partials
|
62
|
+
#### partials
|
63
63
|
|
64
64
|
`partials/`文件夹存放构建网站或者应用程序使用到的布局部分。该文件夹存放网站主体(头部、尾部、导航栏、侧边栏...)的样式表、栅格系统甚至是所有表单的CSS样式。(备注:常常也命名为`layout/`)。
|
65
65
|
|
66
|
-
####pages
|
66
|
+
#### pages
|
67
67
|
|
68
68
|
如果页面有特定的样式,最好将该样式文件放进`pages/`文件夹并用页面名字。例如,主页通常具有独特的样式,因此可以在`pages/`下包含一个`_home.scss`以实现需求。
|
69
69
|
|
70
|
-
####themes
|
70
|
+
#### themes
|
71
71
|
|
72
72
|
在大型网站和应用程序中,往往有多种主题。虽有多种方式管理这些主题,但是我个人更喜欢把它们存放在`themes/`文件夹中。
|
73
73
|
|
74
|
-
####helpers
|
74
|
+
#### helpers
|
75
75
|
|
76
76
|
`helpers/`文件夹包含了整个项目中使用到的Sass辅助工具,这里存放着每一个全局变量、函数、混合宏和占位符。(备注,常常也命名为`utils/`)
|
77
77
|
|
78
78
|
该文件夹的经验法则是,编译后这里不应该输出任何CSS,单纯的只是一些Sass辅助工具。
|
79
79
|
|
80
|
-
####vendors
|
80
|
+
#### vendors
|
81
81
|
|
82
82
|
最后但并非最终的,大多数的项目都有一个`vendors/`文件夹,用来存放所有外部库和框架(Normalize, Bootstrap, jQueryUI, FancyCarouselSliderjQueryPowered……)的CSS文件。将这些文件放在同一个文件中是一个很好的说明方式:"嘿,这些不是我的代码,无关我的责任。"
|
83
83
|
|
84
84
|
如果你重写了任何库或框架的部分,建议设置第8个文件夹`vendors-extensions/`来存放,并使用相同的名字命名。例如,`vendors-extensions/_boostrap.scss`文件存放所有重写Bootstrap默认CSS之后的CSS规则。这是为了避免在原库或者框架文件中进行二次编辑。
|
85
85
|
|
86
|
-
####main.scss
|
86
|
+
#### main.scss
|
87
87
|
|
88
88
|
主文件(通常写作`main.scss`,也常常命名为`style.scss`)应该是整个代码库中唯一开头不用下划线命名的Sass文件。除 `@import`和注释外,该文件不应该包含任何其他代码。
|
89
89
|
|
90
90
|
|
91
|
-
#####main.scss文件引入顺序
|
91
|
+
##### main.scss文件引入顺序
|
92
92
|
|
93
93
|
文件应该按照存在的位置顺序依次被引用进来:
|
94
94
|
|
@@ -0,0 +1,285 @@
|
|
1
|
+
// sanitize.scss: https://github.com/jonathantneal/sanitize.css/blob/master/sanitize.scss
|
2
|
+
// normalize.scss: https://github.com/kristerkari/normalize.scss/blob/master/_normalize.scss
|
3
|
+
|
4
|
+
// Define variables
|
5
|
+
|
6
|
+
$root-box-sizing: border-box !default;
|
7
|
+
$root-cursor: default !default;
|
8
|
+
$root-font-family: sans-serif !default;
|
9
|
+
$root-font-size: 16px !default;
|
10
|
+
$root-line-height: 1.5 !default;
|
11
|
+
$root-text-rendering: optimizeLegibility !default;
|
12
|
+
|
13
|
+
$anchor-text-decoration: none !default;
|
14
|
+
$form-element-background-color: transparent !default;
|
15
|
+
$form-element-min-height: if(unitless($root-line-height), #{$root-line-height}em, if(unit($root-line-height) != '%', $root-line-height, null)) !default;
|
16
|
+
$media-element-vertical-align: middle !default;
|
17
|
+
$monospace-font-family: monospace !default;
|
18
|
+
$nav-list-style: none !default;
|
19
|
+
$small-font-size: 75% !default;
|
20
|
+
$table-border-collapse: collapse !default;
|
21
|
+
$table-border-spacing: 0 !default;
|
22
|
+
$textarea-resize: vertical !default;
|
23
|
+
|
24
|
+
:root {
|
25
|
+
-ms-overflow-style: -ms-autohiding-scrollbar; // IE11+
|
26
|
+
overflow-y: scroll; // All browsers without overlaying scrollbars
|
27
|
+
text-size-adjust: 100%; // iOS 8+
|
28
|
+
}
|
29
|
+
|
30
|
+
//details: // Firefox 36+, Internet Explorer 11+, Windows Phone 8.1+
|
31
|
+
//main: Android 4.3-, Internet Explorer 11+, Windows Phone 8.1+
|
32
|
+
//summary: // Firefox 36+, Internet Explorer 11+, Windows Phone 8.1+
|
33
|
+
|
34
|
+
details,main,summary {
|
35
|
+
display: block;
|
36
|
+
}
|
37
|
+
|
38
|
+
//template: Android 4.3-, Internet Explorer 11+, iOS 7-, Safari 7-, Windows Phone 8.1+
|
39
|
+
//[hidden]:Internet Explorer 10-
|
40
|
+
|
41
|
+
template, [hidden] {
|
42
|
+
display: none;
|
43
|
+
}
|
44
|
+
audio:not([controls]){
|
45
|
+
display: none; //Chrome 40+, iOS 8+, Safari 8+
|
46
|
+
height: 0; //Remove excess height in iOS5 devices
|
47
|
+
}
|
48
|
+
|
49
|
+
input {
|
50
|
+
&[type="number"] {
|
51
|
+
width: auto; // Firefox 36+
|
52
|
+
}
|
53
|
+
|
54
|
+
&[type="search"] {
|
55
|
+
-webkit-appearance: textfield; // Safari 8+
|
56
|
+
|
57
|
+
&::-webkit-search-cancel-button,
|
58
|
+
&::-webkit-search-decoration {
|
59
|
+
-webkit-appearance: none; // Safari 8+
|
60
|
+
}
|
61
|
+
}
|
62
|
+
}
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
pre {
|
67
|
+
overflow: auto; // Internet Explorer 11+
|
68
|
+
}
|
69
|
+
|
70
|
+
progress {
|
71
|
+
display: inline-block; // Internet Explorer 11+, Windows Phone 8.1+
|
72
|
+
}
|
73
|
+
|
74
|
+
small {
|
75
|
+
font-size: $small-font-size; // All browsers
|
76
|
+
}
|
77
|
+
|
78
|
+
|
79
|
+
textarea {
|
80
|
+
overflow: auto; // Internet Explorer 11+
|
81
|
+
}
|
82
|
+
|
83
|
+
|
84
|
+
[unselectable] {
|
85
|
+
user-select: none; // Android 4.4+, Chrome 40+, Firefox 36+, iOS 8+, Safari 8+
|
86
|
+
}
|
87
|
+
|
88
|
+
|
89
|
+
/*
|
90
|
+
* Universal inheritance
|
91
|
+
*/
|
92
|
+
|
93
|
+
*,
|
94
|
+
::before,
|
95
|
+
::after {
|
96
|
+
box-sizing: inherit;
|
97
|
+
}
|
98
|
+
|
99
|
+
* {
|
100
|
+
font-size: inherit;
|
101
|
+
line-height: inherit;
|
102
|
+
}
|
103
|
+
|
104
|
+
::before,
|
105
|
+
::after {
|
106
|
+
text-decoration: inherit;
|
107
|
+
vertical-align: inherit;
|
108
|
+
}
|
109
|
+
|
110
|
+
|
111
|
+
|
112
|
+
//Opinionated defaults
|
113
|
+
|
114
|
+
|
115
|
+
// specify solid border style of all elements
|
116
|
+
|
117
|
+
*,
|
118
|
+
::before,
|
119
|
+
::after {
|
120
|
+
border-style: solid;
|
121
|
+
border-width: 0;
|
122
|
+
}
|
123
|
+
|
124
|
+
// remove margin and padding of all elements
|
125
|
+
|
126
|
+
* {
|
127
|
+
margin: 0;
|
128
|
+
padding: 0;
|
129
|
+
}
|
130
|
+
|
131
|
+
// specify the root styles of the document
|
132
|
+
|
133
|
+
:root {
|
134
|
+
box-sizing: $root-box-sizing;
|
135
|
+
cursor: $root-cursor;
|
136
|
+
font: #{$root-font-size}/#{$root-line-height} $root-font-family;
|
137
|
+
text-rendering: $root-text-rendering;
|
138
|
+
}
|
139
|
+
|
140
|
+
// specify the text decoration of anchors
|
141
|
+
|
142
|
+
a {
|
143
|
+
text-decoration: $anchor-text-decoration;
|
144
|
+
}
|
145
|
+
|
146
|
+
// specify media element style
|
147
|
+
|
148
|
+
audio,
|
149
|
+
canvas,
|
150
|
+
iframe,
|
151
|
+
img,
|
152
|
+
svg,
|
153
|
+
video {
|
154
|
+
vertical-align: $media-element-vertical-align;
|
155
|
+
}
|
156
|
+
|
157
|
+
// specify the background color of form elements
|
158
|
+
|
159
|
+
button,
|
160
|
+
input,
|
161
|
+
select,
|
162
|
+
textarea {
|
163
|
+
background-color: $form-element-background-color;
|
164
|
+
}
|
165
|
+
|
166
|
+
// specify inheritance of form elements
|
167
|
+
|
168
|
+
button,
|
169
|
+
input,
|
170
|
+
select,
|
171
|
+
textarea {
|
172
|
+
color: inherit;
|
173
|
+
font-family: inherit;
|
174
|
+
font-style: inherit;
|
175
|
+
font-weight: inherit;
|
176
|
+
min-height: $form-element-min-height; // specify the minimum height of form elements
|
177
|
+
}
|
178
|
+
|
179
|
+
// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
180
|
+
// and `video` controls
|
181
|
+
// 2. Corrects inability to style clickable 'input' types in iOS
|
182
|
+
// 3. Improves usability and consistency of cursor style between image-type
|
183
|
+
// 'input' and others
|
184
|
+
// Known issue: inner spacing remains in IE6
|
185
|
+
|
186
|
+
button,
|
187
|
+
html input[type="button"], // 1
|
188
|
+
input[type="reset"],
|
189
|
+
input[type="submit"] {
|
190
|
+
-webkit-appearance: button; // 2
|
191
|
+
cursor: pointer; // 3
|
192
|
+
}
|
193
|
+
|
194
|
+
// Re-set default cursor for disabled elements
|
195
|
+
|
196
|
+
button[disabled],
|
197
|
+
input[disabled] {
|
198
|
+
cursor: default;
|
199
|
+
}
|
200
|
+
|
201
|
+
input {
|
202
|
+
// 1. Addresses appearance set to searchfield in S5, Chrome
|
203
|
+
// 2. Addresses box-sizing set to border-box in S5, Chrome (include -moz to future-proof)
|
204
|
+
&[type="search"] {
|
205
|
+
-webkit-appearance: textfield; // 1
|
206
|
+
-webkit-box-sizing: content-box; // 2
|
207
|
+
box-sizing: content-box;
|
208
|
+
|
209
|
+
// Remove inner padding and search cancel button in Safari 5 and Chrome
|
210
|
+
// on OS X.
|
211
|
+
&::-webkit-search-cancel-button,
|
212
|
+
&::-webkit-search-decoration {
|
213
|
+
-webkit-appearance: none;
|
214
|
+
}
|
215
|
+
}
|
216
|
+
|
217
|
+
// 1. Address box sizing set to `content-box` in IE 8/9/10.
|
218
|
+
// 2. Remove excess padding in IE 8/9/10.
|
219
|
+
&[type="checkbox"],
|
220
|
+
&[type="radio"] {
|
221
|
+
box-sizing: border-box; // 1
|
222
|
+
padding: 0; // 2
|
223
|
+
}
|
224
|
+
}
|
225
|
+
|
226
|
+
// specify the font family of code elements
|
227
|
+
|
228
|
+
code,
|
229
|
+
kbd,
|
230
|
+
pre,
|
231
|
+
samp {
|
232
|
+
font-family: $monospace-font-family, monospace;
|
233
|
+
}
|
234
|
+
|
235
|
+
// specify the list style of nav lists
|
236
|
+
|
237
|
+
nav ol,
|
238
|
+
nav ul {
|
239
|
+
list-style: $nav-list-style;
|
240
|
+
}
|
241
|
+
|
242
|
+
// style select like a standard input
|
243
|
+
|
244
|
+
select {
|
245
|
+
-moz-appearance: none; // Firefox 36+
|
246
|
+
-webkit-appearance: none; // Chrome 41+
|
247
|
+
|
248
|
+
&::-ms-expand {
|
249
|
+
display: none; // Internet Explorer 11+
|
250
|
+
}
|
251
|
+
|
252
|
+
&::-ms-value {
|
253
|
+
color: currentColor; // Internet Explorer 11+
|
254
|
+
}
|
255
|
+
}
|
256
|
+
|
257
|
+
// specify the border styles of tables
|
258
|
+
|
259
|
+
table {
|
260
|
+
border-collapse: $table-border-collapse;
|
261
|
+
border-spacing: $table-border-spacing;
|
262
|
+
}
|
263
|
+
|
264
|
+
// specify textarea resizability
|
265
|
+
|
266
|
+
textarea {
|
267
|
+
resize: $textarea-resize;
|
268
|
+
}
|
269
|
+
|
270
|
+
img {
|
271
|
+
border: 0;
|
272
|
+
}
|
273
|
+
|
274
|
+
// hide content from screens but not screenreaders
|
275
|
+
|
276
|
+
@media screen {
|
277
|
+
[hidden~="screen"] {
|
278
|
+
display: inherit;
|
279
|
+
}
|
280
|
+
|
281
|
+
[hidden~="screen"]:not(:active):not(:focus):not(:target) {
|
282
|
+
clip: rect(0 0 0 0) !important;
|
283
|
+
position: absolute !important;
|
284
|
+
}
|
285
|
+
}
|
@@ -1,24 +1,22 @@
|
|
1
1
|
//pull-left
|
2
2
|
%pull-left {
|
3
|
-
|
3
|
+
@include float(left);
|
4
4
|
}
|
5
5
|
|
6
6
|
//pull-right
|
7
|
-
|
8
7
|
%pull-right {
|
9
|
-
|
8
|
+
@include float(right);
|
10
9
|
}
|
11
10
|
|
12
11
|
//clearfix
|
13
|
-
|
14
12
|
%clearfix {
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
13
|
+
&:before,
|
14
|
+
&:after {
|
15
|
+
content:"";
|
16
|
+
display: table;
|
17
|
+
}
|
18
|
+
&:after {
|
19
|
+
overflow: hidden;
|
20
|
+
clear: both;
|
21
|
+
}
|
24
22
|
}
|
@@ -1,28 +1,29 @@
|
|
1
|
-
#Mixins使用方法
|
1
|
+
# Mixins使用方法
|
2
2
|
|
3
3
|
Sass中的mixins默认情况下可以不调用任何参数,此时调用的参数为定义mixins是设置的参数;第二种情形是调用是指定参数。Sass调用mixins都是通过`@include`关键词。
|
4
4
|
|
5
|
-
###1. ellipsis-overflow
|
5
|
+
### 1. ellipsis-overflow
|
6
6
|
|
7
|
-
|
7
|
+
#### 功能
|
8
8
|
|
9
9
|
字符截取,末尾出现三个`...`。
|
10
10
|
|
11
|
-
|
11
|
+
#### 参数
|
12
12
|
|
13
|
-
|
13
|
+
- `$line`,行数,默认值为`1`。
|
14
|
+
- `$substract`,指定元素需要去掉的宽度,默认值为`0`。
|
14
15
|
|
15
|
-
|
16
|
+
#### 调用
|
16
17
|
|
17
|
-
调用默认参数值,也就是`$substract`值为0;
|
18
|
+
调用默认参数值,也就是`$line`值为1,`$substract`值为0;
|
18
19
|
|
19
20
|
@include ellipsis-overflow;
|
20
21
|
|
21
22
|
指定能数值调用:
|
22
23
|
|
23
|
-
@include ellipsis-overflow(
|
24
|
+
@include ellipsis-overflow(2); // 显示两行文字之后加省略号
|
24
25
|
|
25
|
-
|
26
|
+
#### 示例
|
26
27
|
|
27
28
|
SCSS
|
28
29
|
|
@@ -39,18 +40,18 @@ CSS
|
|
39
40
|
width: 80%;
|
40
41
|
}
|
41
42
|
|
42
|
-
###2. float
|
43
|
+
### 2. float
|
43
44
|
|
44
|
-
|
45
|
+
#### 功能
|
45
46
|
|
46
47
|
设置元素浮动方向。
|
47
48
|
|
48
|
-
|
49
|
+
#### 参数
|
49
50
|
|
50
51
|
- `$direction`: 定义浮动方向,默认值为`left`。可选值为`left`、`right`和`none`。
|
51
52
|
- `$support-for-ie`:布尔值,默认值为`true`。可选值为`true`和`flase`。(如果不需要考虑兼容IE6,可以去掉这个参数)。
|
52
53
|
|
53
|
-
|
54
|
+
#### 调用
|
54
55
|
|
55
56
|
默认调用方法:
|
56
57
|
|
@@ -60,7 +61,7 @@ CSS
|
|
60
61
|
|
61
62
|
@include float(right, false);
|
62
63
|
|
63
|
-
|
64
|
+
#### 示例
|
64
65
|
|
65
66
|
SCSS
|
66
67
|
|
@@ -83,19 +84,19 @@ CSS
|
|
83
84
|
float: right;
|
84
85
|
}
|
85
86
|
|
86
|
-
###3.backgroundTransparent
|
87
|
+
### 3.backgroundTransparent
|
87
88
|
|
88
|
-
|
89
|
+
#### 功能
|
89
90
|
|
90
91
|
设置带有透明度的背景颜色。
|
91
92
|
|
92
|
-
|
93
|
+
#### 参数
|
93
94
|
|
94
95
|
- `$color`: 背景颜色
|
95
96
|
- `$opacity`: 透明度
|
96
97
|
- `$support-for-ie`: 布尔值,默认`false`,如果需要兼容低版本浏览器,只需要将其设置为`true`
|
97
98
|
|
98
|
-
|
99
|
+
#### 调用
|
99
100
|
|
100
101
|
默认调用方法:
|
101
102
|
|
@@ -105,7 +106,7 @@ CSS
|
|
105
106
|
|
106
107
|
@include backgroundTransparent(#000,.5,true);
|
107
108
|
|
108
|
-
|
109
|
+
#### 示例
|
109
110
|
|
110
111
|
SCSS
|
111
112
|
|
@@ -117,4 +118,4 @@ CSS
|
|
117
118
|
|
118
119
|
.box {
|
119
120
|
background-color: rgba(0, 0, 0, 0.5);
|
120
|
-
}
|
121
|
+
}
|
@@ -1,12 +1,13 @@
|
|
1
1
|
//Author:Janking (https://github.com/Janking)
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
/// 设置背景透明
|
3
|
+
/// @param {[string]} $color - 背景颜色
|
4
|
+
/// @param {[string]} $opacity - 透明度
|
5
|
+
/// @param {[boolen]} $support-for-ie [false] 是否支持IE
|
6
|
+
/// @link https://gist.github.com/airen/040f6f06bcc8b3176d8a
|
5
7
|
@mixin backgroundTransparent($color,$opacity,$support-for-ie:false){
|
6
8
|
background-color:rgba($color,$opacity);
|
7
9
|
@if $support-for-ie{
|
8
10
|
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#{ie-hex-str(rgba($color,$opacity))},endColorstr=#{ie-hex-str(rgba($color,$opacity))});
|
9
|
-
|
10
11
|
:root & {
|
11
12
|
filter:none;
|
12
13
|
}
|
@@ -1,15 +1,18 @@
|
|
1
|
-
|
2
|
-
@
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
1
|
+
/// 设置元素的content内容
|
2
|
+
/// @param {[string]} $attr - 元素属性
|
3
|
+
/// @param {[string]} $content [null] 内容值
|
4
|
+
/// @link https://gist.github.com/08bce58e9af2fa223118
|
5
|
+
@mixin content($attr, $content:null) {
|
6
|
+
@if $attr {
|
7
|
+
display: inline-block;
|
8
|
+
content: $attr;
|
9
|
+
}
|
10
|
+
@else if $content ! null {
|
11
|
+
content: quote($content);
|
12
|
+
display: inline-block;
|
13
|
+
}
|
14
|
+
@else {
|
15
|
+
content: "";
|
16
|
+
display: table;
|
17
|
+
}
|
15
18
|
}
|
@@ -1,9 +1,9 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
/// 文字溢出省略号
|
2
|
+
/// @param {[string]} $substract [0] 预留区域百分比%
|
3
|
+
/// @link https://gist.github.com/airen/caf49ca5c5e7743f9996
|
3
4
|
@mixin ellipsis-overflow($substract:0) {
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
}
|
9
|
-
|
5
|
+
overflow: hidden;
|
6
|
+
text-overflow: ellipsis;
|
7
|
+
white-space: nowrap;
|
8
|
+
width: 100% - $substract;
|
9
|
+
}
|
@@ -1,9 +1,10 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
@
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
1
|
+
/// 设置元素的float属性
|
2
|
+
/// @param {[string]} $direction [left] float方向
|
3
|
+
/// @param {[boolen]} $support-for-ie [true] 是否支持IE
|
4
|
+
/// @link https://gist.github.com/airen/d7f8ad25c982750dcb86
|
5
|
+
@mixin float($direction: left, $support-for-ie:true) {
|
6
|
+
float: unquote($direction);
|
7
|
+
@if $support-for-ie {
|
8
|
+
_display: inline;
|
9
|
+
}
|
9
10
|
}
|
@@ -1,6 +1,11 @@
|
|
1
1
|
//Thanks: https://github.com/bitmanic/rem/blob/master/stylesheets/_rem.scss by @benfrain (https://github.com/benfrain)
|
2
2
|
|
3
|
-
|
3
|
+
/// px转rem,需要sass>=3.4,libsass推荐用pxToremCalc
|
4
|
+
/// @param {[string]} $property - 属性值
|
5
|
+
/// @param {[string]} $px-values - 像素值 如10px
|
6
|
+
/// @param {[string]} $px-values [16px] 基础字号像素值
|
7
|
+
/// @param {[boolen]} $support-for-ie [true] 是否支持IE
|
8
|
+
/// @link https://gist.github.com/airen/cdf85f2a704fbca00dec
|
4
9
|
|
5
10
|
@mixin px2rem($property,$px-values,$baseline-px:16px,$support-for-ie:false){
|
6
11
|
//Conver the baseline into rems
|
@@ -25,4 +30,41 @@
|
|
25
30
|
// Return the property and its list of converted values
|
26
31
|
#{$property}: $rem-values;
|
27
32
|
}
|
33
|
+
}
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
|
38
|
+
/// 去掉单位,比如100px => 100
|
39
|
+
/// @param {[string]} $number - 带单位或者不带单位的数值
|
40
|
+
@function strip-units($number) {
|
41
|
+
@return $number / ($number * 0 + 1);
|
42
|
+
}
|
43
|
+
|
44
|
+
/// px转rem 默认字号16px,可以全局设置$browser-default-font-size,eg: @include pxToremCalc(padding,10,20,10);
|
45
|
+
/// @param {[string]} $property - 属性值
|
46
|
+
/// @param {[string]} $values... - 像素值 如10px,支持传入多值
|
47
|
+
@mixin remCalc($property, $values...) {
|
48
|
+
$browser-default-font-size:16px !default;
|
49
|
+
$max: length($values);//返回$values列表的长度值
|
50
|
+
$pxValues: '';
|
51
|
+
$remValues: '';
|
52
|
+
@for $i from 1 through $max {
|
53
|
+
$value: strip-units(nth($values, $i));//返回$values列表中的第$i个值,并将单位值去掉
|
54
|
+
$browser-default-font-size: strip-units($browser-default-font-size);
|
55
|
+
$remValues: #{$remValues + $value / $browser-default-font-size}rem;
|
56
|
+
@if $i < $max {
|
57
|
+
$remValues: #{$remValues + " "};
|
58
|
+
}
|
59
|
+
}
|
60
|
+
@for $i from 1 through $max {
|
61
|
+
$value: strip-units(nth($values, $i));
|
62
|
+
$pxValues: #{$pxValues + $value}px;
|
63
|
+
@if $i < $max {
|
64
|
+
$pxValues: #{$pxValues + " "};
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
68
|
+
// #{$property}: $pxValues; //不支持rem的输出px
|
69
|
+
#{$property}: $remValues;
|
28
70
|
}
|
@@ -0,0 +1,212 @@
|
|
1
|
+
// 教程:http://alistapart.com/article/quantity-queries-for-css
|
2
|
+
// quantity-queries SCSS:https://github.com/danielguillan/quantity-queries/blob/master/stylesheets/_quantity-queries.scss
|
3
|
+
// Demo: http://codepen.io/danielguillan/pen/GgBOxm
|
4
|
+
|
5
|
+
// -----------------------------------------------------------------------------
|
6
|
+
// Quantity queries
|
7
|
+
// -----------------------------------------------------------------------------
|
8
|
+
// Table of contents:
|
9
|
+
// 1. Last Simple Selector
|
10
|
+
// 2. Build Quantity Selector
|
11
|
+
// 3. At least
|
12
|
+
// 4. At most
|
13
|
+
// 5. Between
|
14
|
+
// 6. Exactly
|
15
|
+
|
16
|
+
|
17
|
+
// -----------------------------------------------------------------------------
|
18
|
+
// 1. Last Simple Selector
|
19
|
+
// -----------------------------------------------------------------------------
|
20
|
+
|
21
|
+
/// Find the last simple selector in a given selector
|
22
|
+
/// @access private
|
23
|
+
/// @param {list | string} $selector - A single selector
|
24
|
+
/// @return {string} - The last simple selector in $selector
|
25
|
+
/// @example scss
|
26
|
+
/// $result: _last-simple-selector(ul > li); // li
|
27
|
+
|
28
|
+
@function _last-simple-selector($selector) {
|
29
|
+
$parsed: selector-parse($selector);
|
30
|
+
|
31
|
+
@if length($parsed) > 1 {
|
32
|
+
@error '`#{$selector}` contains #{length($parsed)} selectors and the `_last-simple-selector()`function accepts only 1.';
|
33
|
+
}
|
34
|
+
$last-simple-selector: nth(nth($parsed, 1), -1);
|
35
|
+
|
36
|
+
@return $last-simple-selector;
|
37
|
+
}
|
38
|
+
|
39
|
+
|
40
|
+
// -----------------------------------------------------------------------------
|
41
|
+
// 2. Build Quantity Selector
|
42
|
+
// -----------------------------------------------------------------------------
|
43
|
+
|
44
|
+
/// Builds the selector for the quantity query
|
45
|
+
/// @access private
|
46
|
+
/// @param {string} $selector-append - The selector to be appended
|
47
|
+
/// @param {string} $last-selector - The item's selector
|
48
|
+
/// @return {list} - The final quantity query selector
|
49
|
+
|
50
|
+
@function _build-quantity-selector($selector-append, $last-selector) {
|
51
|
+
$quantity-selector: ();
|
52
|
+
|
53
|
+
@each $s in & {
|
54
|
+
$last-simple-selector: '~' + if($last-selector, $last-selector, _last-simple-selector($s));
|
55
|
+
$sel: selector-append($s, $selector-append);
|
56
|
+
$sel2: selector-nest($sel, $last-simple-selector);
|
57
|
+
$quantity-selector: append($quantity-selector, $sel, 'comma');
|
58
|
+
$quantity-selector: append($quantity-selector, $sel2 , 'comma');
|
59
|
+
}
|
60
|
+
|
61
|
+
@return $quantity-selector;
|
62
|
+
}
|
63
|
+
|
64
|
+
|
65
|
+
// -----------------------------------------------------------------------------
|
66
|
+
// 3. At least
|
67
|
+
// -----------------------------------------------------------------------------
|
68
|
+
|
69
|
+
/// Query when total items is at least N items
|
70
|
+
/// @param {number} $count - Quantity to match (equal or more)
|
71
|
+
/// @example scss - Make the items color red when there are 4 items or more
|
72
|
+
/// ul li {
|
73
|
+
/// @include at-least(4) { color: red; }
|
74
|
+
/// }
|
75
|
+
/// @example scss - Make the items color blue when there are 6 items or more and use '*' (element agnostic) as the item selector
|
76
|
+
/// ul li {
|
77
|
+
/// @include at-least(6, '*') { color: blue; }
|
78
|
+
/// }
|
79
|
+
|
80
|
+
@mixin at-least($count, $selector: null) {
|
81
|
+
$selector-append: ':nth-last-child(n+#{$count})';
|
82
|
+
|
83
|
+
@if type-of($count) != 'number' or not unitless($count) or $count < 1 {
|
84
|
+
@error '`#{$count}` is not a valid number for `at-least`';
|
85
|
+
}
|
86
|
+
|
87
|
+
@if $selector != null and (type-of($selector) != 'string' or length($selector) > 1) {
|
88
|
+
@error '`#{$selector}` is not a valid selector for `at-least`';
|
89
|
+
}
|
90
|
+
|
91
|
+
$at-least-selector: _build-quantity-selector($selector-append, $selector);
|
92
|
+
|
93
|
+
|
94
|
+
@at-root #{$at-least-selector} {
|
95
|
+
@content;
|
96
|
+
}
|
97
|
+
}
|
98
|
+
|
99
|
+
|
100
|
+
// -----------------------------------------------------------------------------
|
101
|
+
// 4. At most
|
102
|
+
// -----------------------------------------------------------------------------
|
103
|
+
|
104
|
+
/// Query when total items is at most N items
|
105
|
+
/// @param {number} $count - Quantity to match (equal or less)
|
106
|
+
/// @example scss - Make the items color red when there are 4 items or less
|
107
|
+
/// ul li {
|
108
|
+
/// @include at-most(4) { color: red; }
|
109
|
+
/// }
|
110
|
+
/// @example scss - Make the items color blue when there are 6 items or less and use '*' (element agnostic) as the item selector
|
111
|
+
/// ul li {
|
112
|
+
/// @include at-most(6, '*') { color: blue; }
|
113
|
+
/// }
|
114
|
+
|
115
|
+
@mixin at-most($count, $selector: null) {
|
116
|
+
$selector-append: ':nth-last-child(-n+#{$count}):first-child';
|
117
|
+
|
118
|
+
@if type-of($count) != 'number' or not unitless($count) or $count < 1 {
|
119
|
+
@error '`#{$count}` is not a valid number for `at-most`.';
|
120
|
+
}
|
121
|
+
|
122
|
+
@if $selector != null and (type-of($selector) != 'string' or length($selector) > 1) {
|
123
|
+
@error '`#{$selector}` is not a valid selector for `at-most`';
|
124
|
+
}
|
125
|
+
|
126
|
+
$at-most-selector: _build-quantity-selector($selector-append, $selector);
|
127
|
+
|
128
|
+
|
129
|
+
@at-root #{$at-most-selector} {
|
130
|
+
@content;
|
131
|
+
}
|
132
|
+
}
|
133
|
+
|
134
|
+
|
135
|
+
// -----------------------------------------------------------------------------
|
136
|
+
// 5. Between
|
137
|
+
// -----------------------------------------------------------------------------
|
138
|
+
|
139
|
+
/// Query when total items is at least X items and at most Y items
|
140
|
+
/// @param {number} $at-least - Lower quantity of items to match
|
141
|
+
/// @param {number} $at-most - Higher quantity of items to match
|
142
|
+
/// @example scss - Make the items color red when there are at least 2 and at most 4 items
|
143
|
+
/// ul li {
|
144
|
+
/// @include between(4, 8) { color: red; }
|
145
|
+
/// }
|
146
|
+
/// @example scss - Make the items color blue when there are at least 6 items and at most 10 items and use '*' (element agnostic) as the item selector
|
147
|
+
/// ul li {
|
148
|
+
/// @include between(6, 10, '*') { color: blue; }
|
149
|
+
/// }
|
150
|
+
|
151
|
+
|
152
|
+
@mixin between($first, $last, $selector: null) {
|
153
|
+
$selector-append: ':nth-last-child(n+#{$first}):nth-last-child(-n+#{$last}):first-child';
|
154
|
+
|
155
|
+
@if type-of($first) != 'number' or not unitless($first) or $first < 1 {
|
156
|
+
@error '`#{$first}` is not a valid number for `between`';
|
157
|
+
}
|
158
|
+
|
159
|
+
@if type-of($last) != 'number' or not unitless($last) or $last < 1 {
|
160
|
+
@error '`#{$last}` is not a valid number for `between`';
|
161
|
+
}
|
162
|
+
|
163
|
+
@if $first > $last {
|
164
|
+
@error '#{$first} can´t be larger that #{$last} for `between`';
|
165
|
+
}
|
166
|
+
|
167
|
+
@if $selector != null and (type-of($selector) != 'string' or length($selector) > 1) {
|
168
|
+
@error '`#{$selector}` is not a valid selector for `between`';
|
169
|
+
}
|
170
|
+
|
171
|
+
$between-selector: _build-quantity-selector($selector-append, $selector);
|
172
|
+
|
173
|
+
|
174
|
+
@at-root #{$between-selector} {
|
175
|
+
@content;
|
176
|
+
}
|
177
|
+
}
|
178
|
+
|
179
|
+
|
180
|
+
// -----------------------------------------------------------------------------
|
181
|
+
// 6. Exactly
|
182
|
+
// -----------------------------------------------------------------------------
|
183
|
+
|
184
|
+
/// Query when total items is exactly N items
|
185
|
+
/// @param {number} $count - Quantity to match (equal)
|
186
|
+
/// @example scss - Make the items color red when there are exactly 4 items
|
187
|
+
/// ul li {
|
188
|
+
/// @include exactly(4) { color: red; }
|
189
|
+
/// }
|
190
|
+
/// @example scss - Make the items color blue when there are exactly 6 items and use '*' (element agnostic) as the item selector
|
191
|
+
/// ul li {
|
192
|
+
/// @include exactly(6, '*') { color: blue; }
|
193
|
+
/// }
|
194
|
+
|
195
|
+
@mixin exactly($count, $selector: null) {
|
196
|
+
$selector-append: ':nth-last-child(#{$count}):first-child';
|
197
|
+
|
198
|
+
@if type-of($count) != 'number' or not unitless($count) or $count < 1 {
|
199
|
+
@error '`#{$count}` is not a valid number for `exactly`';
|
200
|
+
}
|
201
|
+
|
202
|
+
@if $selector != null and (type-of($selector) != 'string' or length($selector) > 1) {
|
203
|
+
@error '`#{$selector}` is not a valid selector for `exactly`';
|
204
|
+
}
|
205
|
+
|
206
|
+
$exactly-selector: _build-quantity-selector($selector-append, $selector);
|
207
|
+
|
208
|
+
|
209
|
+
@at-root #{$exactly-selector} {
|
210
|
+
@content;
|
211
|
+
}
|
212
|
+
}
|
@@ -1,4 +1,6 @@
|
|
1
|
+
/// 设置元素是否可以resize
|
2
|
+
/// @param {[string]} $direction - 方向 horizontal, vertical, both
|
1
3
|
@mixin resizable($direction) {
|
2
|
-
|
3
|
-
|
4
|
+
resize: $direction; // Options: horizontal, vertical, both
|
5
|
+
overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`
|
4
6
|
}
|
@@ -1,7 +1,6 @@
|
|
1
1
|
//From: http://compass-style.org/reference/compass/layout/sticky_footer/
|
2
2
|
|
3
|
-
//html
|
4
|
-
|
3
|
+
// html
|
5
4
|
// <body>
|
6
5
|
// <div id="wrapper">
|
7
6
|
// <div id="wrapper-inner"></div>
|
@@ -12,8 +11,12 @@
|
|
12
11
|
// </div>
|
13
12
|
// </body>
|
14
13
|
|
15
|
-
|
16
|
-
|
14
|
+
/// 设置底部元素sticky
|
15
|
+
/// @param {[string]} $footer-height - 底部元素高度
|
16
|
+
/// @param {[string]} $root-selector [unquote("#wrapper")] 页面root主元素选择器
|
17
|
+
/// @param {[string]} $root-footer-selector [unquote("#push")] 页面root底部元素选择器
|
18
|
+
/// @param {[string]} $footer-selector [unquote("#footer")] 底部元素选择器
|
19
|
+
/// @link https://gist.github.com/airen/2f7211d7819dddaf6003
|
17
20
|
|
18
21
|
@mixin stickyFooter($footer-height, $root-selector: unquote("#wrapper"), $root-footer-selector: unquote("#push"), $footer-selector: unquote("#footer")) {
|
19
22
|
html, body {
|
@@ -0,0 +1,25 @@
|
|
1
|
+
//http://www.w3cplus.com/preprocessor/sass-triangle-mixin.html
|
2
|
+
@mixin triangle($width, $height, $color, $direction) {
|
3
|
+
$width: $width/2;
|
4
|
+
$color-border-style: $height solid $color;
|
5
|
+
$transparent-border-style: $width solid transparent;
|
6
|
+
height: 0;
|
7
|
+
width: 0;
|
8
|
+
@if $direction == up {
|
9
|
+
border-bottom: $color-border-style;
|
10
|
+
border-left: $transparent-border-style;
|
11
|
+
border-right: $transparent-border-style;
|
12
|
+
} @else if $direction == right {
|
13
|
+
border-left: $color-border-style;
|
14
|
+
border-top: $transparent-border-style;
|
15
|
+
border-bottom: $transparent-border-style;
|
16
|
+
} @else if $direction == down {
|
17
|
+
border-top: $color-border-style;
|
18
|
+
border-left: $transparent-border-style;
|
19
|
+
border-right: $transparent-border-style;
|
20
|
+
} @else if $direction == left {
|
21
|
+
border-right: $color-border-style;
|
22
|
+
border-top: $transparent-border-style;
|
23
|
+
border-bottom: $transparent-border-style;
|
24
|
+
}
|
25
|
+
}
|
@@ -1,25 +1,25 @@
|
|
1
1
|
//@include visuallyHidden;
|
2
|
-
|
2
|
+
/// 设置元素隐藏,最常用来隐藏一个元素的方法是使用display:none,可这并不是一个完美的方法,这样会让屏幕阅读器无法读到这个元素。为了解决这个问题,使用另外一种方法来实现元素的隐藏,而这种方法仅在浏览器中隐藏了元素,而屏幕阅读器却能读到这个元素。
|
3
|
+
/// @param {[boolen]} $support-for-ie [true] 是否支持IE
|
4
|
+
/// @link http://www.w3cplus.com/preprocessor/ten-best-common-mixins.html
|
3
5
|
@mixin visuallyHidden($support-for-ie:true) {
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
width: auto;
|
24
|
-
}
|
6
|
+
@if $support-for-ie {
|
7
|
+
clip: rect(0, 0, 0, 0);
|
8
|
+
}
|
9
|
+
border: 0;
|
10
|
+
clip: rect(0 0 0 0);
|
11
|
+
height: 1px;
|
12
|
+
margin: -1px;
|
13
|
+
overflow: hidden;
|
14
|
+
padding: 0;
|
15
|
+
position: absolute;
|
16
|
+
width: 1px;
|
17
|
+
&.focusable:active, &.focusable:focus {
|
18
|
+
clip: auto;
|
19
|
+
height: auto;
|
20
|
+
margin: 0;
|
21
|
+
overflow: visible;
|
22
|
+
position: static;
|
23
|
+
width: auto;
|
24
|
+
}
|
25
25
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sassmagic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-04-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sass
|
@@ -48,6 +48,7 @@ files:
|
|
48
48
|
- lib/sassmagic/reset.rb
|
49
49
|
- lib/sassmagic/utils.rb
|
50
50
|
- lib/sassmagic.rb
|
51
|
+
- stylesheets/sassmagic/base/_reset.scss
|
51
52
|
- stylesheets/sassmagic/helpers/_helpers.scss
|
52
53
|
- stylesheets/sassmagic/helpers/_mixins.scss
|
53
54
|
- stylesheets/sassmagic/helpers/_variables.scss
|
@@ -56,8 +57,10 @@ files:
|
|
56
57
|
- stylesheets/sassmagic/helpers/mixins/_ellipsis-overflow.scss
|
57
58
|
- stylesheets/sassmagic/helpers/mixins/_float.scss
|
58
59
|
- stylesheets/sassmagic/helpers/mixins/_px2rem.scss
|
60
|
+
- stylesheets/sassmagic/helpers/mixins/_quantity-queries.scss
|
59
61
|
- stylesheets/sassmagic/helpers/mixins/_resizable.scss
|
60
62
|
- stylesheets/sassmagic/helpers/mixins/_stickyFooter.scss
|
63
|
+
- stylesheets/sassmagic/helpers/mixins/_triangle.scss
|
61
64
|
- stylesheets/sassmagic/helpers/mixins/_visuallyHidden.scss
|
62
65
|
- stylesheets/sassmagic/helpers/mixins/README.md
|
63
66
|
- stylesheets/sassmagic/main.scss
|