compass-susy-plugin 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.txt +28 -0
- data/Manifest +17 -0
- data/README.mkdn +233 -0
- data/Rakefile +22 -0
- data/VERSION +1 -0
- data/compass-susy-plugin.gemspec +36 -0
- data/docs/tutorial/figures/susy_element.png +0 -0
- data/docs/tutorial/figures/susy_grid.png +0 -0
- data/docs/tutorial/index.mkdn +303 -0
- data/lib/susy.rb +2 -0
- data/lib/susy/compass_plugin.rb +5 -0
- data/lib/susy/sass_extensions.rb +79 -0
- data/sass/susy/_grid.sass +115 -0
- data/sass/susy/_susy.sass +18 -0
- data/sass/susy/_text.sass +21 -0
- data/sass/susy/_utils.sass +211 -0
- data/templates/project/_base.sass +162 -0
- data/templates/project/ie.sass +10 -0
- data/templates/project/manifest.rb +4 -0
- data/templates/project/print.sass +12 -0
- data/templates/project/screen.sass +51 -0
- metadata +102 -0
data/lib/susy.rb
ADDED
@@ -0,0 +1,5 @@
|
|
1
|
+
options = Hash.new
|
2
|
+
options[:stylesheets_directory] = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'sass'))
|
3
|
+
options[:templates_directory] = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'templates'))
|
4
|
+
|
5
|
+
Compass::Frameworks.register('susy', options)
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'sass'
|
2
|
+
|
3
|
+
module Sass::Script::Functions
|
4
|
+
# set the Susy base font size (in pixels)
|
5
|
+
# return the percentage base font size
|
6
|
+
# this could be done in Sass, but we need to store the px_size so we
|
7
|
+
# can provide a px_to_em function
|
8
|
+
def base_font_size(base_font_size_px)
|
9
|
+
@@susy_base_font_size_px = Float(base_font_size_px.value)
|
10
|
+
Sass::Script::Number.new((@@susy_base_font_size_px / 16) * 100)
|
11
|
+
end
|
12
|
+
|
13
|
+
# approximate a given pixel size in ems
|
14
|
+
def px2em(size_in_px)
|
15
|
+
Sass::Script::Number.new((size_in_px.value / @@susy_base_font_size_px))
|
16
|
+
end
|
17
|
+
|
18
|
+
# set the Susy column and gutter widths and number of columns
|
19
|
+
# column, gutter and padding widths should be sent as unitless numbers,
|
20
|
+
# though they may "really" be ems or pixels (_grid.sass handles units).
|
21
|
+
# return total width of container (without units)
|
22
|
+
def container(total_columns, column_width, gutter_width, side_gutter_width)
|
23
|
+
@@susy_total_columns = total_columns.value
|
24
|
+
@@susy_column_width = Float(column_width.value)
|
25
|
+
@@susy_gutter_width = Float(gutter_width.value)
|
26
|
+
@@susy_side_gutter_width = Float(side_gutter_width.value)
|
27
|
+
context
|
28
|
+
end
|
29
|
+
|
30
|
+
# return the width of 'n' columns plus 'n - 1' gutters
|
31
|
+
# plus page padding in non-nested contexts
|
32
|
+
def context(n = nil)
|
33
|
+
begin
|
34
|
+
n = n.value
|
35
|
+
rescue NoMethodError
|
36
|
+
n = false
|
37
|
+
end
|
38
|
+
sg = 0
|
39
|
+
if !n
|
40
|
+
n = @@susy_total_columns
|
41
|
+
sg = @@susy_side_gutter_width
|
42
|
+
end
|
43
|
+
c, g = [@@susy_column_width, @@susy_gutter_width]
|
44
|
+
Sass::Script::Number.new(((n * c) + ((n - 1) * g)) + (sg * 2))
|
45
|
+
end
|
46
|
+
|
47
|
+
# return the percentage width of 'number' columns in a context of
|
48
|
+
# 'context_columns'
|
49
|
+
def columns(number, context_columns = nil)
|
50
|
+
n = number.value
|
51
|
+
context_width = context(context_columns).value
|
52
|
+
c, g = [@@susy_column_width, @@susy_gutter_width]
|
53
|
+
Sass::Script::Number.new((((n * c) + ((n - 1) * g)) / context_width) * 100)
|
54
|
+
end
|
55
|
+
|
56
|
+
# return the percentage width of a single gutter in a context of
|
57
|
+
# 'context_columns'
|
58
|
+
def gutter(context_columns = nil)
|
59
|
+
context_width = context(context_columns).value
|
60
|
+
g = @@susy_gutter_width
|
61
|
+
Sass::Script::Number.new((g / context_width) * 100)
|
62
|
+
end
|
63
|
+
|
64
|
+
# return the percentage width of a single side gutter in a context of
|
65
|
+
# 'context_columns'
|
66
|
+
def side_gutter(context_columns = nil)
|
67
|
+
context_width = context(context_columns).value
|
68
|
+
sg = @@susy_side_gutter_width
|
69
|
+
Sass::Script::Number.new((sg / context_width) * 100)
|
70
|
+
end
|
71
|
+
|
72
|
+
# return the percentage width of a single column in a context of
|
73
|
+
# 'context_columns'
|
74
|
+
def column(context_columns = nil)
|
75
|
+
context_width = context(context_columns).value
|
76
|
+
c = @@susy_column_width
|
77
|
+
Sass::Script::Number.new((c / context_width) * 100)
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
//** Grid Settings **//
|
2
|
+
|
3
|
+
//**
|
4
|
+
Your basic units for the grid
|
5
|
+
!grid_unit ||= "em"
|
6
|
+
!total_cols ||= 16
|
7
|
+
!col_width ||= 4
|
8
|
+
!gutter_width ||= 1
|
9
|
+
!side_gutter_width ||= !gutter_width
|
10
|
+
!container_width = container(!total_cols, !col_width, !gutter_width, !side_gutter_width)
|
11
|
+
|
12
|
+
|
13
|
+
//**
|
14
|
+
set on the outer grid containing element.
|
15
|
+
=container(!align = "left")
|
16
|
+
// clear all floated columns
|
17
|
+
+clearfix
|
18
|
+
// align the text back to the left (override for other alignments)
|
19
|
+
:text-align= !align
|
20
|
+
// use auto horizontal margins to center your page in the body
|
21
|
+
:margin
|
22
|
+
:left auto
|
23
|
+
:right auto
|
24
|
+
// set the page width based on column settings
|
25
|
+
:width= !container_width + !grid_unit
|
26
|
+
// never exceed 100% of the browser window (no side-scrolling)
|
27
|
+
:max-width 100%
|
28
|
+
|
29
|
+
|
30
|
+
//**
|
31
|
+
set on any column element, even nested ones.
|
32
|
+
the first agument [required] is the number of columns to span
|
33
|
+
the second argument is the context (columns spanned by parent)
|
34
|
+
this is required in any nested context
|
35
|
+
by default a grid-col is floated left with a right gutter
|
36
|
+
override that with +float("right"), +first or +last
|
37
|
+
=columns(!n, !context = false)
|
38
|
+
// the width of the column is set as a percentage of the context
|
39
|
+
:width= columns(!n, !context) + "%"
|
40
|
+
// the column is floated left
|
41
|
+
+float("left")
|
42
|
+
// the right gutter is added as a percentage of the context
|
43
|
+
:margin-right= gutter(!context) + "%"
|
44
|
+
|
45
|
+
//**
|
46
|
+
set on any column to add empty colums before or after
|
47
|
+
=prefix(!n, !context = false)
|
48
|
+
:padding-left= columns(!n, !context) + gutter(!context) + "%"
|
49
|
+
|
50
|
+
=suffix(!n, !context = false)
|
51
|
+
:padding-right= columns(!n, !context) + gutter(!context) + "%"
|
52
|
+
|
53
|
+
//**
|
54
|
+
set as shortcut for prefix and suffix
|
55
|
+
=pad(!p = 0, !s = 0, !c = false)
|
56
|
+
@if !p != 0
|
57
|
+
+prefix(!p,!c)
|
58
|
+
@if !s != 0
|
59
|
+
+suffix(!s,!c)
|
60
|
+
|
61
|
+
//**
|
62
|
+
set on any element spanning the first column in non-nested context
|
63
|
+
to take side-gutters into account
|
64
|
+
=alpha(!nested = false)
|
65
|
+
@if !nested == false
|
66
|
+
:margin-left= side_gutter() + "%"
|
67
|
+
|
68
|
+
//**
|
69
|
+
when global constant !hacks == true:
|
70
|
+
- this will be called automatically with hacks
|
71
|
+
when global constant !hacks == false:
|
72
|
+
- you can call it yourself in ie.sass without the hacks
|
73
|
+
=ie-omega(!nested = false, !right = false, !hack = false)
|
74
|
+
!s = side_gutter()
|
75
|
+
@if !right
|
76
|
+
@if !hack
|
77
|
+
:#margin-left -1%
|
78
|
+
@else
|
79
|
+
:margin-left -1%
|
80
|
+
@else
|
81
|
+
@if !nested
|
82
|
+
@if !hack
|
83
|
+
:#margin-right -1%
|
84
|
+
@else
|
85
|
+
:margin-right -1%
|
86
|
+
@else
|
87
|
+
@if !hack
|
88
|
+
:#margin-right= !s - 1 + "%"
|
89
|
+
@else
|
90
|
+
:margin-right= !s - 1 + "%"
|
91
|
+
|
92
|
+
//**
|
93
|
+
set on the last element of a row to take side-gutters into account
|
94
|
+
- set !nested for nested columns
|
95
|
+
- set !float for right-floated omega elements
|
96
|
+
=omega(!nested = false, !right = false)
|
97
|
+
!s = side_gutter()
|
98
|
+
@if !nested
|
99
|
+
:margin-right 0
|
100
|
+
@else
|
101
|
+
:margin-right= !s + "%"
|
102
|
+
@if !hacks
|
103
|
+
/* ugly hacks for IE6-7 */
|
104
|
+
+ie-omega(!nested, !right,"*")
|
105
|
+
/* end ugly hacks */
|
106
|
+
|
107
|
+
//**
|
108
|
+
set on an element that will span it's entire context
|
109
|
+
- no need for +columns, +alpha or +omega on a +full element
|
110
|
+
=full(!nested = false)
|
111
|
+
:clear both
|
112
|
+
@if !nested == false
|
113
|
+
!s = side_gutter() + "%"
|
114
|
+
margin-right= !s
|
115
|
+
margin-left= !s
|
@@ -0,0 +1,18 @@
|
|
1
|
+
//**
|
2
|
+
tell susy whether you are using hacks or conditional comments
|
3
|
+
!hacks ||= true
|
4
|
+
|
5
|
+
@import utils.sass
|
6
|
+
@import text.sass
|
7
|
+
@import grid.sass
|
8
|
+
|
9
|
+
//**
|
10
|
+
body font size set to browser default (usually 16px)
|
11
|
+
=susy(!align = "center")
|
12
|
+
// text-align set to center by default for auto-centering layouts
|
13
|
+
// (override !align for left/right-aligned designs)
|
14
|
+
:text-align= !align
|
15
|
+
// set your base font sizes
|
16
|
+
:font-size= !base_font_size
|
17
|
+
:line-height= !base_line_height
|
18
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
//** Text Settings **//
|
2
|
+
|
3
|
+
//**
|
4
|
+
You set the font and line heights in pixels
|
5
|
+
!base_font_size_px ||= 12
|
6
|
+
!base_line_height_px ||= 18
|
7
|
+
|
8
|
+
|
9
|
+
//**
|
10
|
+
Susy can do the math to make that relative
|
11
|
+
we call base_font_size function (even though we could do the math here)
|
12
|
+
because Susy needs to "remember" our base_font_size_px for px2em()
|
13
|
+
!base_font_size = base_font_size(!base_font_size_px) + "%"
|
14
|
+
!base_line_height = (!base_line_height_px / !base_font_size_px) * 100 + "%"
|
15
|
+
|
16
|
+
//**
|
17
|
+
Because some serif fonts add line-height when switching to italics inline:
|
18
|
+
=inline-italic
|
19
|
+
:font-style italic
|
20
|
+
:line-height .5
|
21
|
+
|
@@ -0,0 +1,211 @@
|
|
1
|
+
@import compass/utilities.sass
|
2
|
+
|
3
|
+
//**
|
4
|
+
removes all background images and colors from the element and offspring
|
5
|
+
then adds a grid image of your choosing. highlights divs on modern browsers
|
6
|
+
=show-grid(!src)
|
7
|
+
:background
|
8
|
+
:image= image_url(!src)
|
9
|
+
:repeat repeat
|
10
|
+
:position= side_gutter() + "% 0"
|
11
|
+
*
|
12
|
+
:background transparent
|
13
|
+
div
|
14
|
+
:background rgba(0,0,0,.125)
|
15
|
+
|
16
|
+
//**
|
17
|
+
brings IE in line with inline-block display
|
18
|
+
- using hacks if called automatically because !hacks == true
|
19
|
+
- or without if you call it from ie.sass
|
20
|
+
=ie-inline-block(!hack = false)
|
21
|
+
@if !hack
|
22
|
+
/* ugly hacks for IE6-7 */
|
23
|
+
:#display inline
|
24
|
+
// fixes alignment against native input/button on IE6
|
25
|
+
:#vertical-align auto
|
26
|
+
/* end ugly hacks */
|
27
|
+
@else
|
28
|
+
:display inline
|
29
|
+
// fixes alignment against native input/button on IE6
|
30
|
+
:vertical-align auto
|
31
|
+
|
32
|
+
//**
|
33
|
+
an override for compass inline-block that lets you take advantage
|
34
|
+
of Susys !hacks constant. if true, hacks. if false, use ie-inline-block
|
35
|
+
to help ie along in your ie.sass
|
36
|
+
=inline-block
|
37
|
+
:display -moz-inline-box
|
38
|
+
:-moz-box-orient vertical
|
39
|
+
:display inline-block
|
40
|
+
:vertical-align middle
|
41
|
+
@if !hacks
|
42
|
+
+ie-inline-block("*")
|
43
|
+
|
44
|
+
//**
|
45
|
+
an inline-block list that works in IE
|
46
|
+
for those awkward moments when a floated horizontal list just wont cut it
|
47
|
+
if global !hacks == false:
|
48
|
+
- you'll need to fix list items in ie.sass with +ie-inline-block
|
49
|
+
=inline-block-list(!hpad = 0)
|
50
|
+
+horizontal-list-container
|
51
|
+
li
|
52
|
+
+no-bullet
|
53
|
+
:white-space no-wrap
|
54
|
+
+inline-block
|
55
|
+
:padding
|
56
|
+
:left= !hpad
|
57
|
+
:right= !hpad
|
58
|
+
|
59
|
+
//**
|
60
|
+
hide an element from the viewport, but keep it around for accessability
|
61
|
+
=hide
|
62
|
+
:position absolute
|
63
|
+
:top -9999em
|
64
|
+
|
65
|
+
//**
|
66
|
+
a skip-to-content accessibility link that will appear on focus
|
67
|
+
set the location arguments if you care where it appears
|
68
|
+
=skip-link(!t = 0, !r = false, !b = false, !l = false)
|
69
|
+
+hide
|
70
|
+
:display block
|
71
|
+
&:focus
|
72
|
+
@if !t
|
73
|
+
:top= !t
|
74
|
+
@if !r
|
75
|
+
:right= !r
|
76
|
+
@if !b
|
77
|
+
:bottom= !b
|
78
|
+
@if !l
|
79
|
+
:left= !l
|
80
|
+
:z-index 999
|
81
|
+
|
82
|
+
// EXPERIMENTAL
|
83
|
+
|
84
|
+
//**
|
85
|
+
[Opacity rules based on those in Compass Core Edge as of 7.18.09]
|
86
|
+
- These will be removed from Susy once they enter a major Compass release.
|
87
|
+
Provides cross-browser css opacity.
|
88
|
+
@param !opacity
|
89
|
+
A number between 0 and 1, where 0 is transparent and 1 is opaque.
|
90
|
+
=opacity(!opacity)
|
91
|
+
:opacity= !opacity
|
92
|
+
:-moz-opacity= !opacity
|
93
|
+
:-khtml-opacity= !opacity
|
94
|
+
:-ms-filter= "progid:DXImageTransform.Microsoft.Alpha(Opacity=" + round(!opacity*100) + ")"
|
95
|
+
:filter= "alpha(opacity=" + round(!opacity*100) + ")"
|
96
|
+
|
97
|
+
// Make an element completely transparent.
|
98
|
+
=transparent
|
99
|
+
+opacity(0)
|
100
|
+
|
101
|
+
// Make an element completely opaque.
|
102
|
+
=opaque
|
103
|
+
+opacity(1)
|
104
|
+
|
105
|
+
//**
|
106
|
+
rounded corners for Mozilla, Webkit and the future
|
107
|
+
=border-radius(!r)
|
108
|
+
/* Mozilla (FireFox, Camino)
|
109
|
+
-moz-border-radius = !r
|
110
|
+
/* Webkit (Safari, Chrome)
|
111
|
+
-webkit-border-radius = !r
|
112
|
+
/* CSS3
|
113
|
+
border-radius = !r
|
114
|
+
|
115
|
+
=border-corner-radius(!vert, !horz, !r)
|
116
|
+
/* Mozilla (FireFox, Camino)
|
117
|
+
-moz-border-radius-#{!vert}#{!horz}= !r
|
118
|
+
/* Webkit (Safari, Chrome)
|
119
|
+
-webkit-border-#{!vert}-#{!horz}-radius= !r
|
120
|
+
/* CSS3
|
121
|
+
border-#{!vert}-#{!horz}-radius= !r
|
122
|
+
|
123
|
+
=border-top-left-radius(!r)
|
124
|
+
+border-corner-radius("top", "left", !r)
|
125
|
+
|
126
|
+
=border-top-right-radius(!r)
|
127
|
+
+border-corner-radius("top", "right", !r)
|
128
|
+
|
129
|
+
=border-bottom-right-radius(!r)
|
130
|
+
+border-corner-radius("bottom", "right", !r)
|
131
|
+
|
132
|
+
=border-bottom-left-radius(!r)
|
133
|
+
+border-corner-radius("bottom", "left", !r)
|
134
|
+
|
135
|
+
=border-top-radius(!r)
|
136
|
+
+border-top-left-radius(!r)
|
137
|
+
+border-top-right-radius(!r)
|
138
|
+
|
139
|
+
=border-right-radius(!r)
|
140
|
+
+border-top-right-radius(!r)
|
141
|
+
+border-bottom-right-radius(!r)
|
142
|
+
|
143
|
+
=border-bottom-radius(!r)
|
144
|
+
+border-bottom-right-radius(!r)
|
145
|
+
+border-bottom-left-radius(!r)
|
146
|
+
|
147
|
+
=border-left-radius(!r)
|
148
|
+
+border-top-left-radius(!r)
|
149
|
+
+border-bottom-left-radius(!r)
|
150
|
+
|
151
|
+
//**
|
152
|
+
change the box model for Mozilla, Webkit, IE8 and the future
|
153
|
+
=box-sizing(!bs)
|
154
|
+
/* Mozilla (FireFox, Camino)
|
155
|
+
-moz-box-sizing= !bs
|
156
|
+
/* Webkit (Safari, Chrome)
|
157
|
+
-webkit-box-sizing= !bs
|
158
|
+
/* IE (8)
|
159
|
+
-ms-box-sizing= !bs
|
160
|
+
/* CSS3
|
161
|
+
box-sizing= !bs
|
162
|
+
|
163
|
+
//**
|
164
|
+
box shadow for Webkit and the future
|
165
|
+
- arguments are horizontal offset, vertical offset, blur and color
|
166
|
+
=box-shadow(!ho, !vo, !b, !c )
|
167
|
+
/* Webkit (Safari, Chrome)
|
168
|
+
-webkit-box-shadow= !ho !vo !b !c
|
169
|
+
/* Mozilla (Firefox, Camino)
|
170
|
+
-moz-box-shadow= !ho !vo !b !c
|
171
|
+
/* CSS3
|
172
|
+
box-shadow= !ho !vo !b !c
|
173
|
+
|
174
|
+
|
175
|
+
//**
|
176
|
+
CSS3 columns for Mozilla, Webkit and the Future
|
177
|
+
|
178
|
+
=column-count(!n)
|
179
|
+
:-moz-column-count= !n
|
180
|
+
:-webkit-column-count= !n
|
181
|
+
:column-count= !n
|
182
|
+
|
183
|
+
=column-gap(!u)
|
184
|
+
:-moz-column-gap= !u
|
185
|
+
:-webkit-column-gap= !u
|
186
|
+
:column-gap= !u
|
187
|
+
|
188
|
+
=column-width(!u)
|
189
|
+
:-moz-column-width= !u
|
190
|
+
:-webkit-column-width= !u
|
191
|
+
:column-width= !u
|
192
|
+
|
193
|
+
=column-rule-width(!w)
|
194
|
+
:-moz-column-rule-width= !w
|
195
|
+
:-webkit-column-rule-width= !w
|
196
|
+
:column-rule-width= !w
|
197
|
+
|
198
|
+
=column-rule-style(!s)
|
199
|
+
:-moz-column-rule-style= !s
|
200
|
+
:-webkit-column-rule-style= !s
|
201
|
+
:column-rule-style= !s
|
202
|
+
|
203
|
+
=column-rule-color(!c)
|
204
|
+
:-moz-column-rule-color= !c
|
205
|
+
:-webkit-column-rule-color= !c
|
206
|
+
:column-rule-color= !c
|
207
|
+
|
208
|
+
=column-rule(!w, !s = "solid", !c = " ")
|
209
|
+
+column-rule-width(!w)
|
210
|
+
+column-rule-style(!s)
|
211
|
+
+column-rule-color(!c)
|