Commit 75ebbbce967d8bc1243649f0771e43e3e501780b
1 parent
55c00dcb
Exists in
master
and in
1 other branch
upgrading CSS framework
Showing
9 changed files
with
281 additions
and
190 deletions
Show diff stats
README.markdown
@@ -20,7 +20,7 @@ This will create a Rails 2.3.2 app with Heroku-recommended code: | @@ -20,7 +20,7 @@ This will create a Rails 2.3.2 app with Heroku-recommended code: | ||
20 | * jQuery for Javascript | 20 | * jQuery for Javascript |
21 | * Clearance for authentication | 21 | * Clearance for authentication |
22 | * Cucumber, Shoulda, Factory Girl, & Mocha for testing | 22 | * Cucumber, Shoulda, Factory Girl, & Mocha for testing |
23 | -* Stylus for CSS framework | 23 | +* Evergreen for CSS framework |
24 | * Coulda for features, model, controller, & helper generators | 24 | * Coulda for features, model, controller, & helper generators |
25 | 25 | ||
26 | Get the latest & greatest at anytime with: | 26 | Get the latest & greatest at anytime with: |
public/stylesheets/framework/color.css
1 | +/* | ||
2 | + We use CSS color names by default for readability. | ||
3 | + http://www.w3schools.com/css/css_colorsfull.asp | ||
4 | + | ||
5 | + It is expected the designer(s) will pick a scheme that may include hex colors. | ||
6 | + http://colors.napcsweb.com/colorschemer | ||
7 | + | ||
8 | + We prefer off-white & off-black because computer screens | ||
9 | + have high black/white contrast. | ||
10 | +*/ | ||
11 | + | ||
1 | /* body */ | 12 | /* body */ |
2 | 13 | ||
3 | body { | 14 | body { |
4 | - background-color: white; } | 15 | + background-color: snow; } |
5 | 16 | ||
6 | /* links */ | 17 | /* links */ |
7 | 18 | ||
8 | a { | 19 | a { |
9 | - color: white; } | 20 | + color: midgnightblue; } |
10 | a:visited { | 21 | a:visited { |
11 | color: dimgray; } | 22 | color: dimgray; } |
12 | -a:hover { | ||
13 | - color: white; | ||
14 | - background-color: black; } | ||
15 | 23 | ||
16 | /* flash */ | 24 | /* flash */ |
17 | 25 | ||
18 | #flash_success { | 26 | #flash_success { |
19 | background: seagreen; } | 27 | background: seagreen; } |
20 | #flash_failure { | 28 | #flash_failure { |
21 | - background: tomato; } | 29 | + color: beige; |
30 | + background: firebrick; } | ||
22 | 31 | ||
23 | /* errors */ | 32 | /* errors */ |
24 | 33 | ||
@@ -29,7 +38,7 @@ a:hover { | @@ -29,7 +38,7 @@ a:hover { | ||
29 | background-color: snow; } | 38 | background-color: snow; } |
30 | #errorExplanation h2 { | 39 | #errorExplanation h2 { |
31 | background-color: firebrick; | 40 | background-color: firebrick; |
32 | - color: white; } | 41 | + color: floralwhite; } |
33 | #errorExplanation p { | 42 | #errorExplanation p { |
34 | color: darkgray; } | 43 | color: darkgray; } |
35 | 44 |
public/stylesheets/framework/forms.css
@@ -1,90 +0,0 @@ | @@ -1,90 +0,0 @@ | ||
1 | -/* heavily inspired by Justin French's formtastic styles */ | ||
2 | - | ||
3 | -/* fieldsets */ | ||
4 | - | ||
5 | -fieldset.inputs, fieldset.buttons { | ||
6 | - margin: 1em 0; } | ||
7 | - | ||
8 | -/* labels */ | ||
9 | - | ||
10 | -label { | ||
11 | - display: block; | ||
12 | - font-size: 1.4em; } | ||
13 | - | ||
14 | -/* instruction */ | ||
15 | - | ||
16 | -fieldset p.instruction { | ||
17 | - font-size: 1em; } | ||
18 | - | ||
19 | -/* hidden field */ | ||
20 | - | ||
21 | -fieldset div.hidden { | ||
22 | - display: none; } | ||
23 | - | ||
24 | -/* inputs */ | ||
25 | - | ||
26 | -input { | ||
27 | - vertical-align: middle; } | ||
28 | - | ||
29 | -fieldset div.string, | ||
30 | -fieldset div.numeric, | ||
31 | -fieldset div.password { | ||
32 | - margin: 0 0 2em 0; } | ||
33 | - | ||
34 | -fieldset div.string input, | ||
35 | -fieldset div.numeric input, | ||
36 | -fieldset div.text textarea { | ||
37 | - padding: 0.4em; } | ||
38 | - | ||
39 | -fieldset div.password input { | ||
40 | - font-weight: bold; } | ||
41 | - | ||
42 | -fieldset div.boolean label, | ||
43 | -fieldset div.boolean input { | ||
44 | - display: inline; } | ||
45 | - | ||
46 | -fieldset div.boolean label { | ||
47 | - margin: 0 0.5em 0 0.2em; } | ||
48 | - | ||
49 | -/* radio buttons and check boxes */ | ||
50 | - | ||
51 | -fieldset div.radios fieldset ol, | ||
52 | -fieldset div.checks fieldset ol, { | ||
53 | - margin-bottom: -0.6em; } | ||
54 | -fieldset div.radios fieldset ol li, | ||
55 | -fieldset div.checks fieldset ol li, { | ||
56 | - margin: 0.1em 0 0.5em 0; } | ||
57 | -fieldset div.radios fieldset ol li label, | ||
58 | -fieldset div.checks fieldset ol li label { | ||
59 | - float: none; } | ||
60 | -fieldset div.radios fieldset ol li label input, | ||
61 | -fieldset div.checks fieldset ol li label input, { | ||
62 | - margin-right: 0.2em; } | ||
63 | - | ||
64 | -/* dates, times, and datetimes */ | ||
65 | - | ||
66 | -fieldset div.date fieldset ol li, | ||
67 | -fieldset div.time fieldset ol li, | ||
68 | -fieldset div.datetime fieldset ol li { | ||
69 | - float: left; | ||
70 | - width: auto; | ||
71 | - margin: 0 .3em 0 0; } | ||
72 | - | ||
73 | -fieldset div.date fieldset ol li label, | ||
74 | -fieldset div.time fieldset ol li label, | ||
75 | -fieldset div.datetime fieldset ol li label { | ||
76 | - display: none; } | ||
77 | - | ||
78 | -fieldset div.date fieldset ol li label input, | ||
79 | -fieldset div.time fieldset ol li label input, | ||
80 | -fieldset div.datetime fieldset ol li label input { | ||
81 | - display: inline; | ||
82 | - margin: 0; | ||
83 | - padding: 0; } | ||
84 | - | ||
85 | -/* buttons */ | ||
86 | - | ||
87 | -fieldset.buttons input { | ||
88 | - font-size: 1.2em; | ||
89 | - padding: 1em; } | ||
90 | - |
@@ -0,0 +1,46 @@ | @@ -0,0 +1,46 @@ | ||
1 | +/* | ||
2 | + grid | ||
3 | + | ||
4 | + Every column can be divided into two, three, four and five parts. | ||
5 | + Idea from http://code.google.com/p/malo | ||
6 | +*/ | ||
7 | + | ||
8 | +.main { | ||
9 | + margin: 0 auto; | ||
10 | + width: 96em; } | ||
11 | + | ||
12 | +.grid { | ||
13 | + float: left; | ||
14 | + display: inline; | ||
15 | + *margin-left: -0.04em; } /* IE margin hack */ | ||
16 | + | ||
17 | +.grid .whole { | ||
18 | + width: 100%; } | ||
19 | + | ||
20 | +.grid .one_fifth { | ||
21 | + width: 20% } | ||
22 | + | ||
23 | +.grid .one_fourth { | ||
24 | + width: 25%; } | ||
25 | + | ||
26 | +.grid .one_third { | ||
27 | + width: 33.33% } | ||
28 | + | ||
29 | +.grid .two_fifths { | ||
30 | + width: 40%; } | ||
31 | + | ||
32 | +.grid .one_half { | ||
33 | + width: 50%; } | ||
34 | + | ||
35 | +.grid .three_fifths { | ||
36 | + width: 60% } | ||
37 | + | ||
38 | +.grid .two_thirds { | ||
39 | + width: 66.66%; } | ||
40 | + | ||
41 | +.grid .three_quarters { | ||
42 | + width: 75%; } | ||
43 | + | ||
44 | +.grid .four_fifths { | ||
45 | + width: 80%; } | ||
46 | + |
public/stylesheets/framework/layout.css
@@ -1,39 +0,0 @@ | @@ -1,39 +0,0 @@ | ||
1 | -.clearfix:after { | ||
2 | - content: "."; | ||
3 | - display: block; | ||
4 | - height: 0; | ||
5 | - clear: both; | ||
6 | - visibility: hidden; } | ||
7 | -* html .clearfix { | ||
8 | - height: 1%; } | ||
9 | -*:first-child+html .clearfix { | ||
10 | - min-height: 1px; } | ||
11 | - | ||
12 | -.half, | ||
13 | -.quarter, | ||
14 | -.three_quarters { | ||
15 | - display: inline-block; | ||
16 | - vertical-align: top; } | ||
17 | - | ||
18 | -.middle { | ||
19 | - margin: 0 auto; } | ||
20 | - | ||
21 | -.center { | ||
22 | - text-align: center; } | ||
23 | - | ||
24 | -/* grid 960 { 480 240 120 60 30 15 5 } */ | ||
25 | - | ||
26 | -/*.grid_960 */ | ||
27 | -.grid_960 .row { | ||
28 | - width: 96em; | ||
29 | - margin: 0 auto; } | ||
30 | - | ||
31 | -.grid_960 .half { | ||
32 | - width: 48em; } | ||
33 | - | ||
34 | -.grid_960 .quarter { | ||
35 | - width: 24em; } | ||
36 | - | ||
37 | -.grid_960 .three_quarters { | ||
38 | - width: 72em; } | ||
39 | - |
public/stylesheets/framework/reset.css
1 | -/* global defaults from http://meyerweb.com/tools/css/reset */ | 1 | +/* http://meyerweb.com/eric/tools/css/reset */ |
2 | 2 | ||
3 | html, body, div, span, applet, object, iframe, | 3 | html, body, div, span, applet, object, iframe, |
4 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, | 4 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, |
@@ -25,7 +25,6 @@ ol, ul { | @@ -25,7 +25,6 @@ ol, ul { | ||
25 | 25 | ||
26 | blockquote, q { | 26 | blockquote, q { |
27 | quotes: none; } | 27 | quotes: none; } |
28 | - | ||
29 | blockquote:before, blockquote:after, | 28 | blockquote:before, blockquote:after, |
30 | q:before, q:after { | 29 | q:before, q:after { |
31 | content: ''; | 30 | content: ''; |
@@ -0,0 +1,97 @@ | @@ -0,0 +1,97 @@ | ||
1 | +p { | ||
2 | + padding: 0.4em 0; } | ||
3 | + | ||
4 | +/* flashes & errors */ | ||
5 | + | ||
6 | +#flash_notice, #flash_success, #flash_failure, #errorExplanation ul li { | ||
7 | + padding: 0.6em; } | ||
8 | + | ||
9 | +/* fieldsets */ | ||
10 | + | ||
11 | +fieldset.inputs, fieldset.buttons { | ||
12 | + margin: 1em 0; } | ||
13 | + | ||
14 | +/* labels */ | ||
15 | + | ||
16 | +label { | ||
17 | + display: block; | ||
18 | + font-size: 1.4em; } | ||
19 | + | ||
20 | +/* hidden field */ | ||
21 | + | ||
22 | +fieldset div.hidden { | ||
23 | + display: none; } | ||
24 | + | ||
25 | +/* inputs */ | ||
26 | + | ||
27 | +input { | ||
28 | + vertical-align: middle; } | ||
29 | + | ||
30 | +fieldset div.string, | ||
31 | +fieldset div.numeric, | ||
32 | +fieldset div.password, | ||
33 | +fieldset div.text, | ||
34 | +fieldset div.boolean { | ||
35 | + margin: 0 0 1em 0; } | ||
36 | + | ||
37 | +fieldset div.string label, | ||
38 | +fieldset div.numeric label, | ||
39 | +fieldset div.password label, | ||
40 | +fieldset div.text label { | ||
41 | + padding: 0.2em 0; } | ||
42 | + | ||
43 | +fieldset div.string input, | ||
44 | +fieldset div.numeric input, | ||
45 | +fieldset div.password input, | ||
46 | +fieldset div.text textarea { | ||
47 | + padding: 0.4em; } | ||
48 | + | ||
49 | +fieldset div.boolean label { | ||
50 | + display: inline; | ||
51 | + margin: 0.2em; } | ||
52 | + | ||
53 | +fieldset div.boolean input { | ||
54 | + margin: 0; | ||
55 | + vertical-align: top; } | ||
56 | + | ||
57 | +/* radio buttons and check boxes */ | ||
58 | + | ||
59 | +fieldset div.radios fieldset ol, | ||
60 | +fieldset div.checks fieldset ol, { | ||
61 | + margin-bottom: -0.6em; } | ||
62 | +fieldset div.radios fieldset ol li, | ||
63 | +fieldset div.checks fieldset ol li, { | ||
64 | + margin: 0.1em 0 0.5em 0; } | ||
65 | +fieldset div.radios fieldset ol li label, | ||
66 | +fieldset div.checks fieldset ol li label { | ||
67 | + float: none; } | ||
68 | +fieldset div.radios fieldset ol li label input, | ||
69 | +fieldset div.checks fieldset ol li label input, { | ||
70 | + margin-right: 0.2em; } | ||
71 | + | ||
72 | +/* dates, times, and datetimes */ | ||
73 | + | ||
74 | +fieldset div.date fieldset ol li, | ||
75 | +fieldset div.time fieldset ol li, | ||
76 | +fieldset div.datetime fieldset ol li { | ||
77 | + float: left; | ||
78 | + width: auto; | ||
79 | + margin: 0 .3em 0 0; } | ||
80 | + | ||
81 | +fieldset div.date fieldset ol li label, | ||
82 | +fieldset div.time fieldset ol li label, | ||
83 | +fieldset div.datetime fieldset ol li label { | ||
84 | + display: none; } | ||
85 | + | ||
86 | +fieldset div.date fieldset ol li label input, | ||
87 | +fieldset div.time fieldset ol li label input, | ||
88 | +fieldset div.datetime fieldset ol li label input { | ||
89 | + display: inline; | ||
90 | + margin: 0; | ||
91 | + padding: 0; } | ||
92 | + | ||
93 | +/* buttons */ | ||
94 | + | ||
95 | +fieldset.buttons input { | ||
96 | + padding: 1em; } | ||
97 | + |
public/stylesheets/framework/typography.css
1 | /* | 1 | /* |
2 | - Formula: | ||
3 | - base line-height / font-size = element line-height | 2 | + scale |
4 | 3 | ||
5 | - Example: | ||
6 | - base line-height: 1.8 (18px) | 4 | + Use the classic typographer's scale: |
5 | + 6,7,8,9,10,11,12,14,16,18,21,24,36,48,60,72 | ||
7 | 6 | ||
8 | - 1.8 / 7.2em = .25 | 7 | + We use ems for font size. |
9 | 8 | ||
10 | - 2.1 lineheight | 9 | + Our typographical math is made easier by Richard Rutter's 62.5% trick: |
10 | + http://www.clagnut.com/blog/348/ | ||
11 | + | ||
12 | + 16 pixels is 1.6em. 18 pixels is 1.8em. 9 pixels is 0.9em. | ||
13 | + | ||
14 | + Inheritance slightly complicates the math, but there's a simple formula: | ||
15 | + | ||
16 | + child pixels / parent pixels = child ems | ||
11 | */ | 17 | */ |
12 | 18 | ||
13 | body { | 19 | body { |
14 | - background-position: top left; | ||
15 | - font-size: .625em; /* 62.5% of browser default (16px) is 10px */ | ||
16 | - font-family: Lucida Sans, Arial, Helvetica,sans-serif; } | 20 | + font-size: .625em; } |
21 | + | ||
22 | +h1 { | ||
23 | + font-size: 4.8em; } | ||
24 | + | ||
25 | +h2 { | ||
26 | + font-size: 3.6em; } | ||
27 | + | ||
28 | +h3 { | ||
29 | + font-size: 2.4em; } | ||
30 | + | ||
31 | +h4 { | ||
32 | + font-size: 2.1em; } | ||
33 | + | ||
34 | +h5 { | ||
35 | + font-size: 1.8em; } | ||
36 | + | ||
37 | +h6 { | ||
38 | + font-size: 1.6em; } | ||
39 | + | ||
40 | +#flash_notice, #flash_success, #flash_failure, #errorExplanation ul li { | ||
41 | + font-size: 1.6em; } | ||
42 | + | ||
43 | +p, ul, dl, th, td, legend { | ||
44 | + font-size: 1.4em; } | ||
45 | + | ||
46 | +fieldset.buttons input { | ||
47 | + font-size: 1.2em; } | ||
48 | + | ||
49 | +fieldset p.instruction { | ||
50 | + font-size: 1em; } | ||
51 | + | ||
52 | +/* typeface */ | ||
53 | + | ||
54 | +body { | ||
55 | + font-family: Verdana, "Lucida Grande", Lucida, Arial, sans-serif; } | ||
56 | + | ||
57 | +h1, h2, h3, h4, h5, h6 { | ||
58 | + font-family: Georgia, "Times New Roman", Times, serif; } | ||
59 | + | ||
60 | +pre, code { | ||
61 | + font-family: Monaco, "DejaVu Sans", Courier, "Courier New", monospace; } | ||
62 | + | ||
63 | +/* weighting */ | ||
17 | 64 | ||
18 | h1, h2, h3, h4, h5, h6 { | 65 | h1, h2, h3, h4, h5, h6 { |
19 | - font-family: Georgia, "Times New Roman", Times, serif; | ||
20 | font-weight: normal; } | 66 | font-weight: normal; } |
21 | 67 | ||
22 | -p { | ||
23 | - font-size: 1.4em; | ||
24 | - line-height: 1.5; | ||
25 | - margin: 0 1.5em 1.5em 0; } | 68 | +p, ul, li, dl, th, td, legend { |
69 | + font-weight: lighter; } | ||
70 | + | ||
71 | +#flash_notice, #flash_success, #flash_failure, #errorExplanation ul li { | ||
72 | + font-weight: bold; } | ||
73 | + | ||
74 | +/* | ||
75 | + leading | ||
76 | + | ||
77 | + d. The space between lines of type. | ||
78 | + | ||
79 | + Blocks of text usually need positive leading. | ||
80 | + Headers usually need less leading. | ||
81 | + | ||
82 | + Darker faces usually need more lead than lighter ones. | ||
83 | + Sans serif type usually needs more lead then serif type. | ||
84 | + | ||
85 | + Leading is set with line-height. | ||
86 | + line-height can be (and should be) set with a unit-less integer. | ||
87 | + We use the unit-less integer to ensure line-height scales with text. | ||
88 | +*/ | ||
26 | 89 | ||
27 | h1 { | 90 | h1 { |
28 | - font-size: 4.2em; | ||
29 | - line-height: 1; | ||
30 | - margin: 0 .5em .5em 0; } | 91 | + line-height: 1.0; } |
31 | 92 | ||
32 | h2 { | 93 | h2 { |
33 | - font-size: 3.5em; | ||
34 | - line-height: 1.2; | ||
35 | - margin: 0 .6em .6em 0; } | 94 | + line-height: 1.2; } |
36 | 95 | ||
37 | h3 { | 96 | h3 { |
38 | - font-size: 2.8em; | ||
39 | - line-height: .75em; | ||
40 | - margin: 0 .75em .75em 0 } | 97 | + line-height: 1.4; } |
98 | + | ||
99 | +h4 { | ||
100 | + line-height: 1.6; } | ||
101 | + | ||
102 | +h5 { | ||
103 | + line-height: 1.6; } | ||
104 | + | ||
105 | +h6, p { | ||
106 | + line-height: 1.8; } | ||
107 | + | ||
108 | +ul, dl, th, td, legend { | ||
109 | + line-height: 1.6; } | ||
110 | + | ||
111 | +/* justification */ | ||
112 | + | ||
113 | +body { | ||
114 | + text-align: left; } | ||
115 | + | ||
116 | +/* decoration */ | ||
41 | 117 | ||
42 | ul { | 118 | ul { |
43 | - list-style-type: square; | ||
44 | - margin: 0 1.5em 1.5em 1em; } | ||
45 | - | ||
46 | -ul, | ||
47 | -dl, | ||
48 | -th, | ||
49 | -td, | ||
50 | -legend { | ||
51 | - font-size: 1.4em; | ||
52 | - line-height: 1.5; } | ||
53 | - | ||
54 | -#flash_notice, #flash_success, #flash_failure { | ||
55 | - letter-spacing: .15em; | ||
56 | - padding: .5em 0; | ||
57 | - border-top: 1px dashed; | ||
58 | - border-bottom: 1px dashed; } | ||
59 | - | ||
60 | -#flash { | ||
61 | - font-size: 2.4em; | ||
62 | - width: 100%; } | ||
63 | - | ||
64 | -p, li { | ||
65 | - font-weight: lighter; | ||
66 | - font-family: Gotham, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif; } | ||
67 | - | ||
68 | -a { | 119 | + list-style-position: outside; |
120 | + list-style-type: square; } | ||
121 | + | ||
122 | +a, a:visited, a:link { | ||
69 | text-decoration: none; } | 123 | text-decoration: none; } |
70 | 124 | ||
71 | a:hover { | 125 | a:hover { |
72 | text-decoration: underline; } | 126 | text-decoration: underline; } |
73 | 127 | ||
128 | +th { | ||
129 | + text-transform: uppercase; } | ||
130 | + | ||
131 | +fieldset div.password input { | ||
132 | + font-weight: bold; } | ||
133 | + | ||
134 | +/* | ||
135 | + the measure | ||
136 | + | ||
137 | + d. The length of a single line of text. | ||
138 | + | ||
139 | + We use ems to set the width of blocks of text. | ||
140 | + Typically, between 30 and 50 ems is recommended for optimal readibility. | ||
141 | +*/ | ||
142 | + |
public/stylesheets/screen.css
1 | @import url("framework/reset.css"); | 1 | @import url("framework/reset.css"); |
2 | @import url("framework/typography.css"); | 2 | @import url("framework/typography.css"); |
3 | -@import url("framework/layout.css"); | ||
4 | -@import url("framework/forms.css"); | ||
5 | @import url("framework/color.css"); | 3 | @import url("framework/color.css"); |
4 | +@import url("framework/grid.css"); | ||
5 | +@import url("framework/spacing.css"); | ||
6 | 6 |