scut 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/dist/_scut.scss +1426 -0
  3. data/lib/scut.rb +10 -0
  4. metadata +61 -0
data/dist/_scut.scss ADDED
@@ -0,0 +1,1426 @@
1
+ /*
2
+ * Scut, a collection of Sass utilities to ease and improve our implementations of common style-code patterns.
3
+ * v0.5.0
4
+ * Docs at http://davidtheclark.github.io/scut
5
+ */
6
+
7
+ // SCUT CLEARFIX
8
+ // http://davidtheclark.github.io/scut/#clearfix
9
+
10
+ @mixin scut-clearfix {
11
+
12
+ &:after {
13
+ content: "";
14
+ display: table;
15
+ clear: both;
16
+ }
17
+
18
+ }
19
+
20
+ %scut-clearfix {
21
+ @include scut-clearfix;
22
+ }
23
+
24
+ // SCUT LIST: UNSTYLED
25
+ // http://davidtheclark.github.io/scut/#list_unstyled
26
+
27
+ @mixin scut-list-unstyled {
28
+
29
+ list-style-type: none;
30
+ margin: 0;
31
+ padding: 0;
32
+
33
+ }
34
+
35
+ %scut-list-unstyled {
36
+ @include scut-list-unstyled;
37
+ }
38
+
39
+ // SCUT LIST: FLOATED
40
+ // http://davidtheclark.github.io/scut/#list_floated
41
+
42
+ // Depends on `list-unstyled` and `clearfix`.
43
+
44
+ @mixin scut-list-floated (
45
+ $space: false,
46
+ $dir: left
47
+ ) {
48
+
49
+ @include scut-list-unstyled;
50
+ @include scut-clearfix;
51
+
52
+ & > li {
53
+ float: $dir;
54
+ }
55
+
56
+ @if $space {
57
+ & > li + li {
58
+ margin-#{$dir}: $space;
59
+ }
60
+ }
61
+
62
+ }
63
+
64
+ %scut-list-floated {
65
+ @include scut-list-floated;
66
+ }
67
+
68
+
69
+ // SCUT POSITIONING: COORDINATES
70
+ // http://davidtheclark.github.io/scut/#positioning_coordinates
71
+
72
+ @function scut-autoOrValue ($val) {
73
+ @if $val == a or $val == auto {
74
+ @return auto;
75
+ }
76
+ @else {
77
+ @return $val;
78
+ }
79
+ }
80
+
81
+ @mixin scut-coords (
82
+ $coordinates: n n n n
83
+ ) {
84
+
85
+ $top: nth($coordinates, 1);
86
+ $right: nth($coordinates, 2);
87
+ $bottom: nth($coordinates, 3);
88
+ $left: nth($coordinates, 4);
89
+
90
+ @if $top != n {
91
+ top: scut-autoOrValue($top);
92
+ }
93
+ @if $right != n {
94
+ right: scut-autoOrValue($right);
95
+ }
96
+ @if $bottom != n {
97
+ bottom: scut-autoOrValue($bottom);
98
+ }
99
+ @if $left != n {
100
+ left: scut-autoOrValue($left);
101
+ }
102
+
103
+ }
104
+
105
+ // SCUT STRIP UNIT
106
+ // http://davidtheclark.github.io/scut/#strip_unit
107
+
108
+ @function scut-strip-unit (
109
+ $num
110
+ ) {
111
+
112
+ @return $num / ($num * 0 + 1);
113
+
114
+ }
115
+
116
+ // SCUT PIXELS TO EMS
117
+ // http://davidtheclark.github.io/scut/#pixels-to-ems
118
+
119
+ // Depends on `scut-strip-unit`.
120
+
121
+ @function scut-em (
122
+ $pixels,
123
+ $base: 16
124
+ ) {
125
+
126
+ // $base could be in em or px (no unit = px).
127
+ // Adjust accordingly to create a $divisor that
128
+ // serves as context for $pixels.
129
+ $multiplier: if(unit($base) == em, 16, 1);
130
+ $divisor: scut-strip-unit($base) * $multiplier;
131
+
132
+ @return ($pixels / $divisor) * 1em;
133
+
134
+ }
135
+
136
+ // SCUT BORDER
137
+ // http://davidtheclark.github.io/scut/#border
138
+
139
+ @mixin scut-border (
140
+ $style,
141
+ $sides: n y
142
+ ) {
143
+
144
+ @if length($sides) == 2 {
145
+ @if nth($sides, 1) != n {
146
+ border-top: $style;
147
+ border-bottom: $style;
148
+ }
149
+ @if nth($sides, 2) != n {
150
+ border-left: $style;
151
+ border-right: $style;
152
+ }
153
+ }
154
+
155
+ @else if length($sides) == 4 {
156
+ @if nth($sides, 1) != n {
157
+ border-top: $style;
158
+ }
159
+ @if nth($sides, 2) != n {
160
+ border-right: $style;
161
+ }
162
+ @if nth($sides, 3) != n {
163
+ border-bottom: $style;
164
+ }
165
+ @if nth($sides, 4) != n {
166
+ border-left: $style;
167
+ }
168
+ }
169
+
170
+ @else {
171
+ @warn "Scut-border requires a $sides argument of 2 or 4 values."
172
+ }
173
+
174
+ }
175
+
176
+ // SCUT CIRCLE
177
+ // http://davidtheclark.github.io/scut/#circle
178
+
179
+ @mixin scut-circle (
180
+ $size,
181
+ $color: inherit
182
+ ) {
183
+
184
+ border-radius: 50%;
185
+ display: inline-block;
186
+
187
+ @if $color == inherit {
188
+ // If user wants to inherit the color,
189
+ // take advantage of the fact that border
190
+ // color defaults to the text color of the element.
191
+ border-width: $size / 2;
192
+ border-style: solid;
193
+ height: 0;
194
+ width: 0;
195
+ }
196
+ @else {
197
+ // Otherwise, just use background-color.
198
+ background-color: $color;
199
+ height: $size;
200
+ width: $size;
201
+ }
202
+
203
+ }
204
+
205
+ // SCUT COLOR SWAP
206
+ // http://davidtheclark.github.io/scut/#color_swap
207
+
208
+ @mixin scut-color-swap (
209
+ $off,
210
+ $on,
211
+ $duration: 0,
212
+ $bg: false
213
+ ) {
214
+
215
+ $transition-properties: null;
216
+ $off-is-list: type-of($off) == list;
217
+ $on-is-list: type-of($on) == list;
218
+
219
+ // If $off IS a list,
220
+ // assign color and background-color.
221
+ @if $off-is-list {
222
+ color: nth($off, 1);
223
+ background-color: nth($off, 2);
224
+ $transition-properties: background-color, color;
225
+ }
226
+
227
+ // If $off IS NOT a list and $bg is TRUE,
228
+ // assign background-color.
229
+ @else if $bg and not $off-is-list {
230
+ background-color: $off;
231
+ $transition-properties: background-color;
232
+ }
233
+
234
+ // If $off IS NOT a list and $bg is FALSE,
235
+ // assign color.
236
+ @else {
237
+ color: $off;
238
+ $transition-properties: color;
239
+ }
240
+
241
+ // Only set-up transition if $duration != 0.
242
+ @if $duration != 0 {
243
+ transition-property: $transition-properties;
244
+ transition-duration: $duration;
245
+ }
246
+
247
+ &:hover,
248
+ &:focus {
249
+
250
+ // $on is treated the same as $off, above.
251
+ @if $on-is-list {
252
+ color: nth($on, 1);
253
+ background-color: nth($on, 2);
254
+ }
255
+
256
+ @else if $bg and not $on-is-list {
257
+ background-color: $on;
258
+ }
259
+
260
+ @else {
261
+ color: $on;
262
+ }
263
+ }
264
+
265
+ }
266
+
267
+ // SCUT HD BREAKPOINT
268
+ // http://davidtheclark.github.io/scut/#hd_breakpoint
269
+
270
+ @mixin scut-hd-bp (
271
+ $ratio: 1.3
272
+ ) {
273
+
274
+ @media (-o-min-device-pixel-ratio: #{$ratio}/1),
275
+ (-webkit-min-device-pixel-ratio: #{$ratio}),
276
+ (min-resolution: #{round(96 * $ratio)}dpi) {
277
+ @content;
278
+ }
279
+
280
+ }
281
+
282
+ // SCUT HIDE VISUALLY
283
+ // http://davidtheclark.github.io/scut/#hide_visually
284
+
285
+ @mixin scut-hide-visually {
286
+
287
+ border: 0;
288
+ clip: rect(0 0 0 0);
289
+ height: 1px;
290
+ margin: -1px;
291
+ overflow: hidden;
292
+ padding: 0;
293
+ position: absolute;
294
+ width: 1px;
295
+
296
+ }
297
+
298
+ %scut-hide-visually {
299
+ @include scut-hide-visually;
300
+ }
301
+
302
+ // SCUT IMAGE REPLACEMENT
303
+ // http://davidtheclark.github.io/scut/#image_replacement
304
+
305
+ @mixin scut-image-replace {
306
+
307
+ text-indent: 102%;
308
+ white-space: nowrap;
309
+ overflow: hidden;
310
+
311
+ }
312
+
313
+ %scut-image-replace {
314
+ @include scut-image-replace;
315
+ }
316
+
317
+ // SCUT RESET
318
+ // http://davidtheclark.github.io/scut/#reset
319
+
320
+ @mixin scut-reset-border-box {
321
+ // Make everything a border-box, because why not?
322
+ *, *:before, *:after {
323
+ -moz-box-sizing: border-box;
324
+ box-sizing: border-box;
325
+ }
326
+ }
327
+
328
+ @mixin scut-reset-antialias {
329
+ // Antialias!
330
+ body {
331
+ -webkit-font-smoothing: antialiased;
332
+ }
333
+ }
334
+
335
+ @mixin scut-reset-semanticize {
336
+ // Make headers and <b> semantic, not presentational.
337
+ h1,
338
+ h2,
339
+ h3,
340
+ h4,
341
+ h5,
342
+ h6 {
343
+ font-size: 1em;
344
+ font-weight: normal;
345
+ margin: 0;
346
+ }
347
+ b {
348
+ font-weight: normal;
349
+ }
350
+ }
351
+
352
+ @mixin scut-reset-pointer {
353
+ // Clickable form elements should have a pointer.
354
+ label,
355
+ input,
356
+ textarea,
357
+ select,
358
+ option,
359
+ button {
360
+ cursor: pointer;
361
+ }
362
+ }
363
+
364
+ @mixin scut-reset-form {
365
+ fieldset {
366
+ border: 0;
367
+ margin: 0;
368
+ padding: 0;
369
+ }
370
+ textarea {
371
+ resize: vertical;
372
+ }
373
+ }
374
+
375
+ @mixin scut-reset-button {
376
+ // Reset default button styles, which are never used.
377
+ button {
378
+ background: transparent;
379
+ border: 0;
380
+ color: inherit;
381
+ font: inherit;
382
+ margin: 0;
383
+ outline: none;
384
+ padding: 0;
385
+ width: auto;
386
+ -webkit-appearance: none;
387
+ -webkit-font-smoothing: antialiased;
388
+ }
389
+ }
390
+
391
+ @mixin scut-reset-paragraphs {
392
+ // Some paragraph margins just get in the way.
393
+ p:first-of-type {
394
+ margin-top: 0;
395
+ }
396
+ p:last-of-type {
397
+ margin-bottom: 0;
398
+ }
399
+ }
400
+
401
+ // Call them all!
402
+ @mixin scut-reset {
403
+ @include scut-reset-border-box;
404
+ @include scut-reset-antialias;
405
+ @include scut-reset-semanticize;
406
+ @include scut-reset-pointer;
407
+ @include scut-reset-form;
408
+ @include scut-reset-button;
409
+ @include scut-reset-paragraphs;
410
+ }
411
+
412
+ // SCUT SELECTED
413
+ // http://davidtheclark.github.io/scut/#selected
414
+
415
+ @mixin scut-selected (
416
+ $active: false
417
+ ) {
418
+
419
+ @if $active {
420
+ &:hover,
421
+ &:focus,
422
+ &:active {
423
+ @content;
424
+ }
425
+ }
426
+ @else {
427
+ &:hover,
428
+ &:focus {
429
+ @content;
430
+ }
431
+ }
432
+
433
+ }
434
+
435
+ // SCUT TRIANGLE
436
+ // http://davidtheclark.github.io/scut/#triangle
437
+
438
+ @mixin scut-triangle (
439
+ $direction: right,
440
+ $size: 0.75em,
441
+ $color: inherit
442
+ ) {
443
+
444
+ display: inline-block;
445
+ height: 0;
446
+ width: 0;
447
+ // For improved appearance in some Webkit browsers
448
+ -webkit-transform: rotate(360deg);
449
+
450
+ // Set up some variables
451
+ $width: null;
452
+ $height: null;
453
+ $border-widths: null;
454
+
455
+ @if type-of($size) == list {
456
+ $width: nth($size, 1);
457
+ $height: nth($size, 2);
458
+ }
459
+ @else {
460
+ $width: $size;
461
+ $height: $size;
462
+ }
463
+
464
+ @if ($direction == up) or ($direction == down) {
465
+ // For up and down, width gets two borders but height only one,
466
+ // so divide second border-width value by 2
467
+ $border-widths: $height ($width / 2);
468
+ }
469
+ @else if ($direction == right) or ($direction == left) {
470
+ // For right and left, height gets two borders but width only one,
471
+ // so divide first border-width value by 2
472
+ $border-widths: ($height / 2) $width;
473
+ }
474
+ @else {
475
+ // For right triangles (the rest), both sides get two borders,
476
+ // so divide both by 2
477
+ $border-widths: ($height / 2) ($width / 2);
478
+ }
479
+
480
+ border-width: $border-widths;
481
+ border-style: solid;
482
+
483
+
484
+ // STANDARD TRIANGLES
485
+
486
+ @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) {
487
+ border-color: transparent;
488
+ @if $direction == up {
489
+ border-bottom-color: $color;
490
+ border-top-width: 0;
491
+ }
492
+ @else if $direction == right {
493
+ border-left-color: $color;
494
+ border-right-width: 0;
495
+ }
496
+ @else if $direction == down {
497
+ border-top-color: $color;
498
+ border-bottom-width: 0;
499
+ }
500
+ @else if $direction == left {
501
+ border-right-color: $color;
502
+ border-left-width: 0;
503
+ }
504
+ }
505
+
506
+
507
+ // CORNER TRIANGLES
508
+
509
+ @else if ($direction == top-right) or ($direction == top-left) {
510
+ border-top-color: $color;
511
+ border-bottom-color: transparent;
512
+ @if $direction == top-right {
513
+ border-left-color: transparent;
514
+ border-right-color: $color;
515
+ }
516
+ @else if $direction == top-left {
517
+ border-left-color: $color;
518
+ border-right-color: transparent;
519
+ }
520
+ }
521
+
522
+ @else if ($direction == bottom-right) or ($direction == bottom-left) {
523
+ border-top-color: transparent;
524
+ border-bottom-color: $color;
525
+ @if $direction == bottom-right {
526
+ border-left-color: transparent;
527
+ border-right-color: $color;
528
+ }
529
+ @else if $direction == bottom-left {
530
+ border-left-color: $color;
531
+ border-right-color: transparent;
532
+ }
533
+ }
534
+
535
+ }
536
+
537
+ %scut-triangle {
538
+ @include scut-triangle;
539
+ }
540
+
541
+ // SCUT CENTER ABSOLUTELY
542
+ // http://davidtheclark.github.io/scut/#center_absolutely
543
+
544
+ @mixin scut-center-absolutely (
545
+ $dimensions
546
+ ) {
547
+
548
+ $width: nth($dimensions, 1);
549
+ $height: nth($dimensions, 2);
550
+
551
+ position: absolute;
552
+
553
+ @if $width != n {
554
+ width: $width;
555
+ left: 50%;
556
+ margin-left: (-$width / 2);
557
+ }
558
+
559
+ @if $height != n {
560
+ height: $height;
561
+ top: 50%;
562
+ margin-top: (-$height / 2);
563
+ }
564
+
565
+ }
566
+
567
+ // SCUT CENTER BLOCK
568
+ // http://davidtheclark.github.io/scut/#center_block
569
+
570
+ @mixin scut-center-block (
571
+ $max-width: false
572
+ ) {
573
+
574
+ margin-left: auto;
575
+ margin-right: auto;
576
+ @if $max-width {
577
+ max-width: $max-width;
578
+ }
579
+
580
+ }
581
+
582
+ %scut-center-block {
583
+ @include scut-center-block;
584
+ }
585
+
586
+
587
+ // SCUT FILL
588
+ // http://davidtheclark.github.io/scut/#fill
589
+
590
+ @mixin scut-fill {
591
+
592
+ position: absolute;
593
+ left: 0;
594
+ top: 0;
595
+ width: 100%;
596
+ height: 100%;
597
+
598
+ }
599
+
600
+ %scut-fill {
601
+ @include scut-fill;
602
+ }
603
+
604
+ // SCUT FONTICON-LABEL
605
+ // http://davidtheclark.github.io/scut/#fonticon_label
606
+
607
+ @mixin scut-fonticon-label (
608
+ $font,
609
+ $glyph,
610
+ $space: 0.25em,
611
+ $side: before
612
+ ) {
613
+
614
+ &:#{$side} {
615
+ content: $glyph;
616
+ font-family: $font;
617
+ font-style: normal;
618
+ font-weight: normal;
619
+ -webkit-font-smoothing: antialiased;
620
+ display: inline-block;
621
+ vertical-align: middle;
622
+
623
+ @if $side == before and $space != 0 {
624
+ margin-right: $space;
625
+ }
626
+ @else if $side == after and $space != 0 {
627
+ margin-left: $space;
628
+ }
629
+
630
+ // Add any additional styling.
631
+ @content;
632
+
633
+ }
634
+
635
+ }
636
+
637
+
638
+ // SCUT LIST: DIVIDED
639
+ // http://davidtheclark.github.io/scut/#list_divided
640
+
641
+ // Depends on `list-floated`, which depends in turn on `list-unstyled` and `clearfix`.
642
+
643
+ @mixin scut-list-divided (
644
+ $divider: "|",
645
+ $space: 0.5em,
646
+ $dir: left,
647
+ $height: false
648
+ ) {
649
+
650
+ @include scut-list-floated($dir: $dir);
651
+
652
+ $pseudo: if($dir == left, 'before', 'after');
653
+
654
+ // If an explicit height is passed,
655
+ // things are different: All <li>s
656
+ // need the pseudo-element (to force height),
657
+ // but the first's must be hidden.
658
+
659
+ @if $height {
660
+ & > li {
661
+ height: $height;
662
+ }
663
+ & > li:#{$pseudo} {
664
+ height: $height;
665
+ content: $divider;
666
+ display: inline-block;
667
+ vertical-align: middle;
668
+ @content;
669
+ }
670
+ & > li:first-child:#{$pseudo} {
671
+ width: 0;
672
+ overflow: hidden;
673
+ }
674
+ }
675
+
676
+ & > li + li:#{$pseudo} {
677
+ @if not $height {
678
+ content: $divider;
679
+ display: inline-block;
680
+ @content;
681
+ }
682
+ margin-left: $space;
683
+ margin-right: $space;
684
+ }
685
+
686
+ }
687
+
688
+ %scut-list-bar {
689
+ @include scut-list-divided;
690
+ }
691
+
692
+ %scut-list-breadcrumb {
693
+ @include scut-list-divided("/");
694
+ }
695
+
696
+ // SCUT LIST: INLINE
697
+ // http://davidtheclark.github.io/scut/#list_inline
698
+
699
+ // Depends on `list-unstyled`.
700
+
701
+ @mixin scut-list-inline (
702
+ $space: false
703
+ ) {
704
+
705
+ @include scut-list-unstyled;
706
+
707
+ & > li {
708
+ display: inline-block;
709
+ }
710
+
711
+ @if $space {
712
+ & > li + li {
713
+ margin-left: $space;
714
+ }
715
+ }
716
+
717
+ }
718
+
719
+ %scut-list-inline {
720
+ @include scut-list-inline;
721
+ }
722
+
723
+ // SCUT LIST: PUNCTUATED
724
+ // http://davidtheclark.github.io/scut/#list_punctuated
725
+
726
+ // Depends on `list-unstyled`.
727
+
728
+ @mixin scut-list-punctuated (
729
+ $divider: ", ",
730
+ $display: inline
731
+ ) {
732
+
733
+ @include scut-list-unstyled;
734
+
735
+ & > li {
736
+ display: $display;
737
+ &:not(:last-child):after {
738
+ content: $divider;
739
+ }
740
+ }
741
+
742
+ }
743
+
744
+ %scut-list-comma {
745
+ @include scut-list-punctuated;
746
+ }
747
+
748
+ // SCUT MARGIN
749
+ // http://davidtheclark.github.io/scut/#margin
750
+
751
+ @mixin scut-margin (
752
+ $margin
753
+ ) {
754
+
755
+ @if length($margin) == 1 and $margin != n {
756
+ margin-top: $margin;
757
+ margin-right: $margin;
758
+ margin-bottom: $margin;
759
+ margin-left: $margin;
760
+ }
761
+
762
+ @if length($margin) == 2 {
763
+ $margin-y: nth($margin, 1);
764
+ $margin-x: nth($margin, 2);
765
+ @if $margin-y != n {
766
+ margin-top: $margin-y;
767
+ margin-bottom: $margin-y;
768
+ }
769
+ @if $margin-x != n {
770
+ margin-left: $margin-x;
771
+ margin-right: $margin-x;
772
+ }
773
+ }
774
+
775
+ @if length($margin) == 3 {
776
+ $margin-y-top: nth($margin, 1);
777
+ $margin-x: nth($margin, 2);
778
+ $margin-y-bottom: nth($margin, 3);
779
+ @if $margin-y-top != n {
780
+ margin-top: $margin-y-top;
781
+ }
782
+ @if $margin-x != n {
783
+ margin-right: $margin-x;
784
+ margin-left: $margin-x;
785
+ }
786
+ @if $margin-y-bottom != n {
787
+ margin-bottom: $margin-y-bottom;
788
+ }
789
+ }
790
+
791
+ @if length($margin) == 4 {
792
+ $margin-top: nth($margin, 1);
793
+ $margin-right: nth($margin, 2);
794
+ $margin-bottom: nth($margin, 3);
795
+ $margin-left: nth($margin, 4);
796
+ @if $margin-top != n {
797
+ margin-top: $margin-top;
798
+ }
799
+ @if $margin-right != n {
800
+ margin-right: $margin-right;
801
+ }
802
+ @if $margin-bottom != n {
803
+ margin-bottom: $margin-bottom;
804
+ }
805
+ @if $margin-left != n {
806
+ margin-left: $margin-left;
807
+ }
808
+ }
809
+
810
+ }
811
+
812
+ // SCUT PADDING
813
+ // http://davidtheclark.github.io/scut/#padding
814
+
815
+ @mixin scut-padding (
816
+ $padding
817
+ ) {
818
+
819
+ @if length($padding) == 1 and $padding != n {
820
+ padding-top: $padding;
821
+ padding-right: $padding;
822
+ padding-bottom: $padding;
823
+ padding-left: $padding;
824
+ }
825
+
826
+ @if length($padding) == 2 {
827
+ $padding-y: nth($padding, 1);
828
+ $padding-x: nth($padding, 2);
829
+ @if $padding-y != n {
830
+ padding-top: $padding-y;
831
+ padding-bottom: $padding-y;
832
+ }
833
+ @if $padding-x != n {
834
+ padding-left: $padding-x;
835
+ padding-right: $padding-x;
836
+ }
837
+ }
838
+
839
+ @if length($padding) == 3 {
840
+ $padding-y-top: nth($padding, 1);
841
+ $padding-x: nth($padding, 2);
842
+ $padding-y-bottom: nth($padding, 3);
843
+ @if $padding-y-top != n {
844
+ padding-top: $padding-y-top;
845
+ }
846
+ @if $padding-x != n {
847
+ padding-right: $padding-x;
848
+ padding-left: $padding-x;
849
+ }
850
+ @if $padding-y-bottom != n {
851
+ padding-bottom: $padding-y-bottom;
852
+ }
853
+ }
854
+
855
+ @if length($padding) == 4 {
856
+ $padding-top: nth($padding, 1);
857
+ $padding-right: nth($padding, 2);
858
+ $padding-bottom: nth($padding, 3);
859
+ $padding-left: nth($padding, 4);
860
+ @if $padding-top != n {
861
+ padding-top: $padding-top;
862
+ }
863
+ @if $padding-right != n {
864
+ padding-right: $padding-right;
865
+ }
866
+ @if $padding-bottom != n {
867
+ padding-bottom: $padding-bottom;
868
+ }
869
+ @if $padding-left != n {
870
+ padding-left: $padding-left;
871
+ }
872
+ }
873
+ }
874
+
875
+ // SCUT POSITIONING: ABSOLUTE
876
+ // http://davidtheclark.github.io/scut/#positioning_absolute
877
+
878
+ // Depends on `positioning-coordinates`.
879
+
880
+ @mixin scut-absolute (
881
+ $coordinates: 0 n n 0
882
+ ) {
883
+
884
+ position: absolute;
885
+ @include scut-coords($coordinates);
886
+
887
+ }
888
+
889
+ %scut-absolute {
890
+ @include scut-absolute;
891
+ }
892
+
893
+ // SCUT POSITIONING: FIXED
894
+ // http://davidtheclark.github.io/scut/#positioning_fixed
895
+
896
+ // Depends on `positioning-coordinates`.
897
+
898
+ @mixin scut-fixed (
899
+ $coordinates: 0 n n 0
900
+ ) {
901
+
902
+ position: fixed;
903
+ @include scut-coords($coordinates);
904
+
905
+ }
906
+
907
+ %scut-fixed {
908
+ @include scut-fixed;
909
+ }
910
+
911
+ // SCUT POSITIONING: RELATIVE
912
+ // http://davidtheclark.github.io/scut/#positioning_relative
913
+
914
+ // Depends on `positioning-coordinates`.
915
+
916
+ @mixin scut-relative (
917
+ $coordinates: n n n n
918
+ ) {
919
+
920
+ position: relative;
921
+ @include scut-coords($coordinates);
922
+
923
+ }
924
+
925
+ // SCUT RATIO-BOX
926
+ // http://davidtheclark.github.io/scut/#ratio-box
927
+
928
+ @mixin scut-ratio-box (
929
+ $ratio: 1/1,
930
+ $inner: ".scut-inner"
931
+ ) {
932
+
933
+ overflow: hidden;
934
+ position: relative;
935
+
936
+ // The container's height, as a percentage of the
937
+ // container's width, is set by assigning
938
+ // padding-top to a pseudo-element.
939
+ &:before {
940
+ content: "";
941
+ display: block;
942
+ height: 0;
943
+ padding-top: (1 / $ratio) * 100%;
944
+ }
945
+
946
+ // The inner element simply fills up the container.
947
+ & > #{$inner} {
948
+ position: absolute;
949
+ left: 0;
950
+ top: 0;
951
+ width: 100%;
952
+ height: 100%;
953
+ }
954
+
955
+ }
956
+
957
+ %scut-ratio-box {
958
+ @include scut-ratio-box;
959
+ }
960
+
961
+ // SCUT SIZE
962
+ // http://davidtheclark.github.io/scut/#size
963
+
964
+ @mixin scut-size(
965
+ $size
966
+ ) {
967
+
968
+ @if length($size) == 1 {
969
+ width: $size;
970
+ height: $size;
971
+ }
972
+ @else if length($size) == 2 {
973
+ width: nth($size, 1);
974
+ height: nth($size, 2);
975
+ }
976
+
977
+ }
978
+
979
+ // SCUT STICKY FOOTER
980
+ // http://davidtheclark.github.io/scut/#sticky_footer
981
+
982
+ @mixin scut-sticky-footer (
983
+ $height,
984
+ $wrapper: ".wrapper",
985
+ $footer: ".scut-sticky"
986
+ ) {
987
+
988
+ html,
989
+ body {
990
+ height: 100%;
991
+ }
992
+
993
+ #{$wrapper} {
994
+ min-height: 100%;
995
+ margin-bottom: -$height;
996
+ &:after {
997
+ content: "";
998
+ display: block;
999
+ }
1000
+ }
1001
+ #{$wrapper}:after,
1002
+ #{$footer} {
1003
+ height: $height;
1004
+ }
1005
+
1006
+ }
1007
+
1008
+ // SCUT V-CENTER: INLINE-BLOCK
1009
+ // http://davidtheclark.github.io/scut/#v-center_inline-block
1010
+
1011
+ @mixin scut-vcenter-ib (
1012
+ $inner: ".scut-inner"
1013
+ ) {
1014
+
1015
+ // The inner element is vertically centered
1016
+ // by middle-aligning it with an inline pseudo-element
1017
+ // whose height is 100%.
1018
+
1019
+ &:before {
1020
+ content: "";
1021
+ height: 100%;
1022
+ display: inline-block;
1023
+ vertical-align: middle;
1024
+ // A small negative right margin is set
1025
+ // to account for the default
1026
+ // word-spacing of inline-block.
1027
+ margin-right: -0.25em;
1028
+ }
1029
+
1030
+ & > #{$inner} {
1031
+ display: inline-block;
1032
+ vertical-align: middle;
1033
+ }
1034
+
1035
+ }
1036
+
1037
+ %scut-vcenter-ib {
1038
+ @include scut-vcenter-ib;
1039
+ }
1040
+
1041
+
1042
+ // SCUT V-CENTER: LINE-HEIGHT
1043
+ // http://davidtheclark.github.io/scut/#v-center_line-height
1044
+
1045
+ @mixin scut-vcenter-lh (
1046
+ $height
1047
+ ) {
1048
+
1049
+ height: $height;
1050
+ line-height: $height;
1051
+
1052
+ }
1053
+
1054
+ // SCUT V-CENTER: TABLE DISPLAY
1055
+ // http://davidtheclark.github.io/scut/#v-center_table_display
1056
+
1057
+ @mixin scut-vcenter-td (
1058
+ $inner: ".scut-inner"
1059
+ ) {
1060
+
1061
+ display: table;
1062
+
1063
+ & > #{$inner} {
1064
+ display: table-cell;
1065
+ vertical-align: middle;
1066
+ }
1067
+
1068
+ }
1069
+
1070
+
1071
+ %scut-vcenter-td {
1072
+ @include scut-vcenter-td;
1073
+ }
1074
+
1075
+ // BOOKENDS
1076
+ // http://davidtheclark.github.io/scut/#bookends
1077
+
1078
+ @mixin scut-bookends (
1079
+ $space: 0.5em,
1080
+ $content: ""
1081
+ ) {
1082
+
1083
+ $content-list: length($content) == 2;
1084
+
1085
+ // If $content is a list or there $space exist,
1086
+ // set some pseudo-element-specific rules.
1087
+ @if $content-list or $space {
1088
+ &:before {
1089
+ @if $content-list {
1090
+ content: nth($content, 1);
1091
+ }
1092
+ @if $space {
1093
+ margin-right: $space;
1094
+ }
1095
+ }
1096
+ &:after {
1097
+ @if $content-list {
1098
+ content: nth($content, 2);
1099
+ }
1100
+ @if $space {
1101
+ margin-left: $space;
1102
+ }
1103
+ }
1104
+ }
1105
+
1106
+ // Then set some rules that apply to both
1107
+ // pseudo-elements.
1108
+ &:before,
1109
+ &:after {
1110
+ display: inline-block;
1111
+
1112
+ @if $content and length($content) == 1 {
1113
+ content: $content;
1114
+ }
1115
+
1116
+ // Any additional styling applies to both.
1117
+ @content;
1118
+
1119
+ }
1120
+
1121
+ }
1122
+
1123
+ // SCUT CSS CHARACTERS
1124
+ // http://davidtheclark.github.io/scut/#characters
1125
+
1126
+ // space
1127
+ $scut-space: "\0020";
1128
+ // non-breaking space
1129
+ $scut-nbsp: "\00a0";
1130
+
1131
+ // quotation mark "
1132
+ $scut-quot: "\0022";
1133
+ // left single curly quote ‘
1134
+ $scut-lsquo: "\2018";
1135
+ // right single curly quote ’
1136
+ $scut-rsquo: "\2019";
1137
+ // left double curly quote “
1138
+ $scut-ldquo: "\201C";
1139
+ // right double curly quote ”
1140
+ $scut-rdquo: "\201D";
1141
+ // left single angle quote (guillemet) ‹
1142
+ $scut-lsaquo: "\2039";
1143
+ // right single angle quote (guillemet) ›
1144
+ $scut-rsaquo: "\203A";
1145
+ // left double angle quote (guillemet) «
1146
+ $scut-laquo: "\00ab";
1147
+ // right double angle quote (guillemet) »
1148
+ $scut-raquo: "\00bb";
1149
+
1150
+ // em dash (mutton) — [should look longer]
1151
+ $scut-mdash: "\2014";
1152
+ // en dash (nut) – [between a hyphen and an em dash in length]
1153
+ $scut-ndash: "\2013";
1154
+ // hyphen -
1155
+ $scut-hyphen: "\2010";
1156
+
1157
+ // ampersand &
1158
+ $scut-amp: "\0026";
1159
+ // greater than >
1160
+ $scut-gt: "\003e";
1161
+ // less than <
1162
+ $scut-lt: "\003c";
1163
+ // times ×
1164
+ $scut-times: "\00D7";
1165
+ // big times ✕
1166
+ $scut-bigtimes: "\2715";
1167
+ // checkmark ✓
1168
+ $scut-checkmark: "\2713";
1169
+
1170
+ // section sign (double S, hurricane, sectional symbol, the legal doughnut, signum sectiōnis) §
1171
+ $scut-sect: "\00a7";
1172
+ // paragraph symbol (pilcrow) ¶
1173
+ $scut-para: "\00b6";
1174
+
1175
+ // middot (interpunct, interpoint) ·
1176
+ $scut-middot: "\00b7";
1177
+ // o-slash (slashed o) Ø
1178
+ $scut-oslash: "\00f8";
1179
+ // bullet •
1180
+ $scut-bull: "\2022";
1181
+ // white bullet ◦
1182
+ $scut-whibull: "\25E6";
1183
+ // horizontal ellipsis …
1184
+ $scut-hellip: "\2026";
1185
+ // vertical ellipsis ⋮
1186
+ $scut-vellip: "\22EE";
1187
+ // midline horizontal ellipsis ⋯
1188
+ $scut-midhellip: "\22EF";
1189
+
1190
+ // up-pointing triangle ▲
1191
+ $scut-utri: "\25b2";
1192
+ // down-pointing triangle ▼
1193
+ $scut-dtri: "\25bc";
1194
+ // left-pointing triangle ◀
1195
+ $scut-ltri: "\25c0";
1196
+ // right-pointing triangle ▶
1197
+ $scut-rtri: "\25b6";
1198
+ // up-pointing small triangle ▴
1199
+ $scut-ustri: "\25b4";
1200
+ // down-pointing small triangle ▾
1201
+ $scut-dstri: "\25be";
1202
+ // left-pointing small triangle ◂
1203
+ $scut-lstri: "\25c2";
1204
+ // right-pointing small triangle ▸
1205
+ $scut-rstri: "\25b8";
1206
+ // diamond ◆
1207
+ $scut-diamond: "\25c6";
1208
+ // fisheye ◉
1209
+ $scut-fisheye: "\25c9";
1210
+ // bullseye ◎
1211
+ $scut-bullseye: "\25ce";
1212
+ // circle ●
1213
+ $scut-circle: "\25cf";
1214
+ // white circle ○
1215
+ $scut-whitecircle: "\25cb";
1216
+
1217
+ // SCUT FONT-FACE
1218
+ // http://davidtheclark.github.io/scut/#font-face
1219
+
1220
+ @mixin scut-font-face (
1221
+ $font-family,
1222
+ $file-path,
1223
+ $weight: normal,
1224
+ $style: normal
1225
+ ) {
1226
+
1227
+ @font-face {
1228
+ font-family: $font-family;
1229
+ font-weight: $weight;
1230
+ font-style: $style;
1231
+
1232
+ src: url('#{$file-path}.eot');
1233
+ src: url('#{$file-path}.eot?#iefix') format('embedded-opentype'),
1234
+ url('#{$file-path}.woff') format('woff'),
1235
+ url('#{$file-path}.ttf') format('truetype'),
1236
+ url('#{$file-path}.svg##{$font-family}') format('svg');
1237
+ }
1238
+
1239
+ }
1240
+
1241
+ // SCUT HANGING INDENT
1242
+ // http://davidtheclark.github.io/scut/#hanging_indent
1243
+
1244
+ @mixin scut-hanging-indent (
1245
+ $indent: 1em
1246
+ ) {
1247
+
1248
+ // padding-left creates the indent,
1249
+ // while text-indent pulls the first line
1250
+ // back to the edge.
1251
+
1252
+ padding-left: $indent;
1253
+ text-indent: -$indent;
1254
+
1255
+ }
1256
+
1257
+ %scut-hanging-indent {
1258
+ @include scut-hanging-indent;
1259
+ }
1260
+
1261
+ // SCUT INDENTED PARAGRAPHS
1262
+ // http://davidtheclark.github.io/scut/#indented_paragraphs
1263
+
1264
+ @mixin scut-indented-ps (
1265
+ $indent: 1.5em,
1266
+ $no-first-indent: true
1267
+ ) {
1268
+
1269
+ p {
1270
+ margin: 0;
1271
+ text-indent: $indent;
1272
+ }
1273
+
1274
+ @if $no-first-indent {
1275
+ p:first-of-type {
1276
+ text-indent: 0;
1277
+ }
1278
+ }
1279
+
1280
+ }
1281
+
1282
+ %scut-indented-ps {
1283
+ @include scut-indented-ps;
1284
+ }
1285
+
1286
+ // SCUT KEY-VALUE
1287
+ // http://davidtheclark.github.io/scut/#key-value
1288
+
1289
+ @mixin scut-key-val (
1290
+ $divider: ":",
1291
+ $pad: 0.25em,
1292
+ $indent: 1em,
1293
+ $spacing: 0,
1294
+ $pad-left: 0
1295
+ ) {
1296
+
1297
+ & > dt {
1298
+ clear: both;
1299
+ float: left;
1300
+ &:after {
1301
+ content: $divider;
1302
+ margin-right: $pad;
1303
+ @if $pad-left != 0 {
1304
+ margin-left: $pad-left;
1305
+ }
1306
+ }
1307
+ }
1308
+
1309
+ & > dd {
1310
+ margin-left: $indent;
1311
+ @if $spacing != 0 {
1312
+ margin-bottom: $spacing;
1313
+ }
1314
+ }
1315
+
1316
+ }
1317
+
1318
+ %scut-key-val {
1319
+ @include scut-key-val;
1320
+ }
1321
+
1322
+ // SCUT LINK: BOTTOM-BORDERED
1323
+ // http://davidtheclark.github.io/scut/#link_bottom-bordered
1324
+
1325
+ @mixin scut-link-bb (
1326
+ $color: inherit,
1327
+ $style: solid,
1328
+ $width: 1px
1329
+ ) {
1330
+
1331
+ text-decoration: none;
1332
+
1333
+ border-bottom-width: $width;
1334
+ border-bottom-style: $style;
1335
+ @if $color != inherit {
1336
+ border-bottom-color: $color;
1337
+ }
1338
+
1339
+ }
1340
+
1341
+ %scut-link-bb {
1342
+ @include scut-link-bb;
1343
+ }
1344
+
1345
+ // SCUT REVERSE ITALICS
1346
+ // http://davidtheclark.github.io/scut/#reverse-italics
1347
+
1348
+ @mixin scut-reverse-italics (
1349
+ $elements: false
1350
+ ) {
1351
+
1352
+ $element-list: em, cite, i;
1353
+ @each $el in $elements {
1354
+ $element-list: append($element-list, unquote($el), comma)
1355
+ }
1356
+
1357
+ font-style: italic;
1358
+ #{$element-list} {
1359
+ font-style: normal;
1360
+ }
1361
+
1362
+ }
1363
+
1364
+ %scut-reverse-italics {
1365
+ @include scut-reverse-italics;
1366
+ }
1367
+
1368
+ // SCUT SIDE-LINED
1369
+ // http://davidtheclark.github.io/scut/#side-lined
1370
+
1371
+ @mixin scut-side-lined (
1372
+ $height: 1px,
1373
+ $space: 0.5em,
1374
+ $color: inherit,
1375
+ $style: solid,
1376
+ $v-adjust: false,
1377
+ $double: false
1378
+ ) {
1379
+
1380
+ display: block;
1381
+ overflow: hidden;
1382
+ text-align: center;
1383
+
1384
+ &:before,
1385
+ &:after {
1386
+ content: "";
1387
+ display: inline-block;
1388
+ vertical-align: middle;
1389
+ position: relative;
1390
+ width: 50%;
1391
+
1392
+ border-top-style: $style;
1393
+ border-top-width: $height;
1394
+
1395
+ @if $color != inherit {
1396
+ border-top-color: $color;
1397
+ }
1398
+
1399
+ @if $v-adjust != false {
1400
+ bottom: $v-adjust;
1401
+ }
1402
+
1403
+ @if $double != false {
1404
+ height: $double;
1405
+ border-bottom-style: $style;
1406
+ border-bottom-width: $height;
1407
+ @if $color != inherit {
1408
+ border-bottom-color: $color;
1409
+ }
1410
+ }
1411
+ }
1412
+
1413
+ &:before {
1414
+ right: $space;
1415
+ margin-left: -50%;
1416
+ }
1417
+ &:after {
1418
+ left: $space;
1419
+ margin-right: -50%;
1420
+ }
1421
+
1422
+ }
1423
+
1424
+ %scut-side-lined {
1425
+ @include scut-side-lined;
1426
+ }