type-director 0.8 → 0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +116 -89
- data/lib/type-director.rb +1 -1
- data/stylesheets/_type-director.scss +8 -6
- data/stylesheets/type-director/_environment.scss +29 -0
- data/stylesheets/type-director/_map-get-deep.scss +12 -0
- data/stylesheets/type-director/_map-set-deep.scss +48 -0
- data/stylesheets/type-director/_override-type-size.scss +4 -0
- data/stylesheets/type-director/{_build-scale.scss → _scale.scss} +5 -14
- data/stylesheets/type-director/{_build-font-scale.scss → _type-scale.scss} +8 -8
- data/stylesheets/type-director/_type-size.scss +193 -0
- data/stylesheets/type-director/_typography.scss +62 -0
- data/templates/project/sass/_typography-config.scss +42 -49
- data/templates/project/sass/_typography.scss +12 -13
- data/templates/project/sass/main.scss +74 -31
- data/templates/project/stylesheets/main.css +206 -77
- data/templates/project/type-specimen.html +21 -21
- metadata +18 -15
- data/stylesheets/type-director/_build-typography.scss +0 -46
- data/stylesheets/type-director/_map-deep-get.scss +0 -6
- data/stylesheets/type-director/_set-font-size.scss +0 -136
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a07ea61bcc2bb553dd26cdd142224b67198eca5
|
4
|
+
data.tar.gz: 257a8e2ee3726c18ad8e2d02d95415300a958c7f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 608d93c0744c122b5eb73e660eb38ea5680f615258b566fec5d97bd113152956e150567aa3fc5ec297b34e8b6e409bca39978912ed7e7734db1422c3c3256efb
|
7
|
+
data.tar.gz: 516936a7ce8c135002f2e687e08ff0b40b13c9121cc70c1740745af1b69e564f626950c74635c07d91fcf946346b8710c8d041b7260c65f35af3423eea715463
|
data/README.md
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
|
2
2
|
# Type Director
|
3
3
|
|
4
|
-
Type Director is a SASS framework
|
4
|
+
Type Director is a SASS framework that generates a responsive, modular, nuanced typographic system from only a few key variables.
|
5
5
|
|
6
6
|
|
7
7
|
|
8
8
|
## Features
|
9
9
|
|
10
10
|
1. Modular. Typographic measurements are based on proportional lists of values.
|
11
|
-
2. Responsive. Typography adjusts to the constraints of each breakpoint.
|
12
|
-
3.
|
11
|
+
2. Responsive. Typography adjusts to the unique constraints of each breakpoint.
|
12
|
+
3. Nuanced. Various properties allow detail-oriented typographers to align additional fonts or uppercase styles to a modular scale.
|
13
13
|
|
14
14
|
|
15
15
|
|
@@ -26,78 +26,87 @@ Or create a new project with a sample config and type specimen:
|
|
26
26
|
|
27
27
|
## Usage
|
28
28
|
|
29
|
-
### Declare your
|
29
|
+
### Declare your typefaces
|
30
30
|
|
31
|
-
|
31
|
+
Typefaces associate a font-family with various typeface-specific adjustments. Define them via SASS maps in the following format:
|
32
32
|
|
33
33
|
```scss
|
34
|
-
|
34
|
+
$typefaces: (
|
35
35
|
|
36
|
-
|
37
|
-
"
|
38
|
-
|
39
|
-
|
40
|
-
|
36
|
+
// Default typeface
|
37
|
+
"georgia": (
|
38
|
+
"family": (Georgia, serif),
|
39
|
+
"font-size-adjustment": 1.00,
|
40
|
+
"line-height-adjustment": 1.00
|
41
|
+
),
|
41
42
|
|
42
|
-
// Additional
|
43
|
+
// Additional typefaces
|
44
|
+
"verdana": (
|
45
|
+
"family": (Verdana, sans-serif),
|
46
|
+
"font-size-adjustment": 0.89,
|
47
|
+
"line-height-adjustment": 0.94
|
48
|
+
),
|
43
49
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
)
|
49
|
-
|
50
|
-
$font-feather: (
|
51
|
-
"family": unquote("'Feather'"),
|
52
|
-
"font-size-adjustment": 0.95,
|
53
|
-
"line-height-adjustment": 1.00
|
54
|
-
);
|
50
|
+
"feather": (
|
51
|
+
"family": ("Feather"),
|
52
|
+
"font-size-adjustment": 1.00,
|
53
|
+
"line-height-adjustment": 1.00
|
54
|
+
)
|
55
|
+
)
|
55
56
|
```
|
56
57
|
|
57
|
-
Oftentimes two
|
58
|
+
Oftentimes two typfaces set to the same font-size do not appear to be. This is because the heights of their lowercase letters are not equal. By using the `font-size-adjustment` property, additional typefaces can be normalized to the default typeface. This will ensure they align to the modular scale.
|
58
59
|
|
59
60
|
For example, Verdana appears 11% larger than Georgia. To normalize it with Georgia, we can set a `font-size-adjustment: 0.89`. This will cause Verdana to be 11% smaller than Georgia when set to the same size.
|
60
61
|
|
61
|
-
Similarly, you can also apply an adjustment to line-height on a
|
62
|
+
Similarly, you can also apply an adjustment to line-height on a typeface-by-typeface basis by specifying a `line-height-adjustment`.
|
62
63
|
|
63
64
|
|
64
65
|
|
65
|
-
###
|
66
|
+
### Declare your environments
|
66
67
|
|
67
|
-
|
68
|
+
Environments associate media queries with a modular type scale. Define them via SASS maps in the following format:
|
68
69
|
|
69
70
|
```scss
|
70
|
-
$
|
71
|
-
|
72
|
-
//
|
73
|
-
"
|
74
|
-
|
75
|
-
|
76
|
-
"
|
77
|
-
|
78
|
-
"base-line-height": 1.5,
|
79
|
-
"max-font-size": 28px,
|
80
|
-
"max-line-height": 1.35
|
81
|
-
),
|
82
|
-
|
83
|
-
// Tablet sizes and larger
|
84
|
-
"tablet": (
|
85
|
-
"media-query": "screen and (min-width: 768px)",
|
86
|
-
"base-font-size": 18px,
|
87
|
-
"base-line-height": 1.6,
|
88
|
-
"max-font-size": 42px,
|
89
|
-
"max-line-height": 1.25
|
90
|
-
)
|
71
|
+
$environments: (
|
72
|
+
|
73
|
+
// Phone sizes
|
74
|
+
"phone": (
|
75
|
+
"base-font-size": 16px,
|
76
|
+
"base-line-height": 1.5,
|
77
|
+
"max-font-size": 28px,
|
78
|
+
"max-line-height": 1.35
|
91
79
|
),
|
92
80
|
|
93
|
-
//
|
81
|
+
// Tablet sizes and larger
|
82
|
+
"tablet": (
|
83
|
+
"media-query": "screen and (min-width: 768px)",
|
84
|
+
"base-font-size": 18px,
|
85
|
+
"base-line-height": 1.6,
|
86
|
+
"max-font-size": 42px,
|
87
|
+
"max-line-height": 1.25
|
88
|
+
)
|
89
|
+
);
|
90
|
+
```
|
91
|
+
For each environment, you'll need to specify font-size and line-height for both a base size and a max size. A type scale for each environment will be interpolated from these constraints.
|
92
|
+
|
93
|
+
A `media-query` property should also be set for each environment, except for the environment you'd like to be default.
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
### Build typography
|
98
|
+
|
99
|
+
```scss
|
100
|
+
$typography: td-typography(
|
101
|
+
|
102
|
+
"typefaces": $typefaces,
|
103
|
+
"environments": $environments,
|
104
|
+
|
105
|
+
// Other than the base, how many type sizes do you need?
|
94
106
|
"numb-smaller-sizes": 1,
|
95
107
|
"numb-larger-sizes": 4
|
96
|
-
)
|
108
|
+
);
|
97
109
|
```
|
98
|
-
For each scale, you'll need to specify font-size and line-height for both a base size and a max size. Additional font-sizes and line-heights will be interpolated from these constraints.
|
99
|
-
|
100
|
-
A `media-query` property should also be set for each, exluding the "default" scale. Feel free to name the other scales whatever you like.
|
101
110
|
|
102
111
|
That's it! Note that `$typography` is a key variable. This map will be used by the following mixins to lookup and apply sizes.
|
103
112
|
|
@@ -107,38 +116,40 @@ If you need a bit of typographic guidance, [Responsive Typography: The Basics](h
|
|
107
116
|
|
108
117
|
### Apply responsize sizing
|
109
118
|
|
110
|
-
Use `@include td-
|
119
|
+
Use `@include td-responsive-type-size($typface-name, $size)` to apply a responsive size. The type sizes available to you are based on your parameters:
|
111
120
|
* 0 is your base size.
|
112
121
|
* 1, 2, 3... are your increasingly larger sizes.
|
113
122
|
* -1, -2, -3... are your increasingly smaller sizes.
|
114
123
|
|
115
124
|
```scss
|
116
125
|
.lead {
|
117
|
-
@include td-
|
126
|
+
@include td-responsive-type-size("georgia", 1);
|
118
127
|
}
|
119
128
|
```
|
120
|
-
We just applied responsive styling to the lead paragraph style. It will use media queries to apply
|
129
|
+
We just applied responsive styling to the lead paragraph style. It will use media queries to apply Georgia at size `1` from the corresponding scale: 18.4px for phone, and then resizing to 22.2px for tablets and larger.
|
121
130
|
|
122
131
|
```scss
|
123
132
|
.h4 {
|
124
|
-
@include td-
|
133
|
+
@include td-responsive-type-size("verdana", 1);
|
125
134
|
}
|
126
135
|
```
|
127
|
-
We used the same size for the `.h4` heading, but with
|
136
|
+
We used the same size for the `.h4` heading, but with Verdana. This will result in a font-size of 16.4px for phones and 19.8px for tablets and larger. Mathematically different than Georgia at size `1`, but visually equal.
|
128
137
|
|
129
138
|
|
130
139
|
|
131
140
|
### Apply static sizing
|
132
141
|
|
133
|
-
You might occassionally want finer-grained control of your type styles. For these cases, use the `td-
|
142
|
+
You might occassionally want finer-grained control of your type styles. For these cases, use the `td-type-size()` mixin which accepts an additional `$environment-name` parameter:
|
134
143
|
|
135
144
|
```scss
|
136
145
|
.h4 {
|
137
|
-
@include td-
|
146
|
+
@include td-font-size("verdana", 1, "phone");
|
147
|
+
@include td-font-size("verdana", 2, "tablet");
|
138
148
|
}
|
139
149
|
```
|
140
150
|
|
141
|
-
Here we just
|
151
|
+
Here we just applied size 1 for phones and size 2 for tablets. If we had used `td-set-responsive-font-size()` the same size would have been applied for each environment.
|
152
|
+
|
142
153
|
|
143
154
|
|
144
155
|
## Advanced Usage
|
@@ -148,32 +159,30 @@ Here we just styled our h4 to have the size 1 for only the tablet breakpoint. Wi
|
|
148
159
|
Rounding to any precision is supported.
|
149
160
|
|
150
161
|
```scss
|
151
|
-
$
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
"
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
),
|
165
|
-
|
166
|
-
// ...
|
167
|
-
));
|
162
|
+
$environments: (
|
163
|
+
|
164
|
+
"phone": (
|
165
|
+
"base-font-size": 16px,
|
166
|
+
"base-line-height": 1.5,
|
167
|
+
"max-font-size": 28px,
|
168
|
+
"max-line-height": 1.35,
|
169
|
+
"font-size-precision": 0.1,
|
170
|
+
"line-height-precision": 0.01
|
171
|
+
),
|
172
|
+
|
173
|
+
// ...
|
174
|
+
);
|
168
175
|
```
|
169
176
|
|
170
|
-
|
177
|
+
|
178
|
+
|
179
|
+
### Solid and tight line-heights
|
171
180
|
|
172
181
|
Oftentimes you may need to set very narrow lines of text, causing your line-height to look too loose. For a tighter line-height, use the `"line-height": "tight"` option.
|
173
182
|
|
174
183
|
```scss
|
175
184
|
.caption-tight {
|
176
|
-
@include td-
|
185
|
+
@include td-responsive-type-size("verdana", -1, $opts: ("line-height": "tight"));
|
177
186
|
}
|
178
187
|
```
|
179
188
|
|
@@ -181,27 +190,45 @@ Other times you may want to set text to be solid (meaning no "leading"). In term
|
|
181
190
|
|
182
191
|
```scss
|
183
192
|
.btn {
|
184
|
-
@include td-
|
193
|
+
@include td-responsive-type-size("verdana", 1, $opts: ("line-height": "solid"));
|
185
194
|
}
|
186
195
|
```
|
187
196
|
|
197
|
+
|
198
|
+
|
188
199
|
### Uppercase styles
|
189
200
|
|
190
|
-
If you'd like to set something in all caps and have it align to your
|
201
|
+
If you'd like to set something in all caps and have it align to your type scales, include an `uppercase-adjustment` when defining fonts:
|
191
202
|
|
192
203
|
```scss
|
193
|
-
$
|
194
|
-
|
195
|
-
"
|
196
|
-
|
197
|
-
|
198
|
-
|
204
|
+
$typefaces: (
|
205
|
+
|
206
|
+
"verdana": (
|
207
|
+
"family": (Verdana, sans-serif),
|
208
|
+
"font-size-adjustment": 0.89,
|
209
|
+
"line-height-adjustment": 0.94,
|
210
|
+
"uppercase-adjustment": 0.85
|
211
|
+
),
|
212
|
+
|
213
|
+
// ...
|
214
|
+
)
|
199
215
|
```
|
200
216
|
|
201
217
|
Apply an uppercase style like so:
|
202
218
|
```scss
|
203
219
|
.h4 {
|
204
|
-
@include td-
|
220
|
+
@include td-responsive-type-size("verdana", 1, $opts: ("uppercase": true));
|
205
221
|
}
|
206
222
|
```
|
207
223
|
|
224
|
+
|
225
|
+
|
226
|
+
### Overrides
|
227
|
+
|
228
|
+
You can use `td-override-type-size($environment-name, $size, $font-size, $line-heigt) to override a type size after typography has been built.
|
229
|
+
|
230
|
+
```scss
|
231
|
+
$typography: td-override-type-size("tablet", -1, 12px, 1.8);
|
232
|
+
```
|
233
|
+
|
234
|
+
|
data/lib/type-director.rb
CHANGED
@@ -17,7 +17,7 @@ Compass::Frameworks.register('type-director', :path => extension_path)
|
|
17
17
|
# version contains alphas, it will be created as a
|
18
18
|
# prerelease version. Date is in the form of YYYY-MM-DD
|
19
19
|
module TypeDirector
|
20
|
-
VERSION = "0.
|
20
|
+
VERSION = "0.9"
|
21
21
|
DATE = "2016-08-14"
|
22
22
|
end
|
23
23
|
|
@@ -1,10 +1,12 @@
|
|
1
|
-
@import "type-director/map-deep
|
2
|
-
@import "type-director/
|
3
|
-
@import "type-director/
|
4
|
-
@import "type-director/
|
1
|
+
@import "type-director/map-get-deep";
|
2
|
+
@import "type-director/map-set-deep";
|
3
|
+
@import "type-director/scale";
|
4
|
+
@import "type-director/type-scale";
|
5
|
+
@import "type-director/environment";
|
6
|
+
@import "type-director/typography";
|
5
7
|
|
6
|
-
$typography: td-
|
8
|
+
$typography: td-typography() !default;
|
7
9
|
|
8
10
|
@import "type-director/round";
|
9
|
-
@import "type-director/
|
11
|
+
@import "type-director/type-size";
|
10
12
|
|
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
// Returns an environment profile, which associates a
|
3
|
+
// media query with a type-scale and other parameters.
|
4
|
+
|
5
|
+
@function td-environment($opts: ()) {
|
6
|
+
|
7
|
+
// Extend default opts with passed opts.
|
8
|
+
$opts: map-merge((
|
9
|
+
"media-query": null,
|
10
|
+
"font-size-precision": null,
|
11
|
+
"line-height-precision": null,
|
12
|
+
"base-font-size": 16px,
|
13
|
+
"base-line-height": 1.5,
|
14
|
+
"max-font-size": 28px,
|
15
|
+
"max-line-height": 1.35,
|
16
|
+
"numb-smaller-sizes": 1,
|
17
|
+
"numb-larger-sizes": 4
|
18
|
+
), $opts);
|
19
|
+
|
20
|
+
// Create environment.
|
21
|
+
$environment: (
|
22
|
+
"media-query": map-get($opts, "media-query"),
|
23
|
+
"font-size-precision": map-get($opts, "font-size-precision"),
|
24
|
+
"line-height-precision": map-get($opts, "line-height-precision"),
|
25
|
+
"sizes": td-type-scale($opts)
|
26
|
+
);
|
27
|
+
|
28
|
+
@return $environment;
|
29
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
/// Map deep get
|
2
|
+
/// @author Hugo Giraudel
|
3
|
+
/// @access public
|
4
|
+
/// @param {Map} $map - Map
|
5
|
+
/// @param {Arglist} $keys - Key chain
|
6
|
+
/// @return {*} - Desired value
|
7
|
+
@function map-get-deep($map, $keys...) {
|
8
|
+
@each $key in $keys {
|
9
|
+
$map: map-get($map, $key);
|
10
|
+
}
|
11
|
+
@return $map;
|
12
|
+
}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
/// Deep set function to set a value in nested maps
|
2
|
+
/// @author Hugo Giraudel
|
3
|
+
/// @access public
|
4
|
+
/// @param {Map} $map - Map
|
5
|
+
/// @param {List} $keys - Key chaine
|
6
|
+
/// @param {*} $value - Value to assign
|
7
|
+
/// @return {Map}
|
8
|
+
@function map-set-deep($map, $keys, $value) {
|
9
|
+
$maps: ($map,);
|
10
|
+
$result: null;
|
11
|
+
|
12
|
+
// If the last key is a map already
|
13
|
+
// Warn the user we will be overriding it with $value
|
14
|
+
@if type-of(nth($keys, -1)) == "map" {
|
15
|
+
@warn "The last key you specified is a map; it will be overrided with `#{$value}`.";
|
16
|
+
}
|
17
|
+
|
18
|
+
// If $keys is a single key
|
19
|
+
// Just merge and return
|
20
|
+
@if length($keys) == 1 {
|
21
|
+
@return map-merge($map, ($keys: $value));
|
22
|
+
}
|
23
|
+
|
24
|
+
// Loop from the first to the second to last key from $keys
|
25
|
+
// Store the associated map to this key in the $maps list
|
26
|
+
// If the key doesn't exist, throw an error
|
27
|
+
@for $i from 1 through length($keys) - 1 {
|
28
|
+
$current-key: nth($keys, $i);
|
29
|
+
$current-map: nth($maps, -1);
|
30
|
+
$current-get: map-get($current-map, $current-key);
|
31
|
+
@if $current-get == null {
|
32
|
+
@error "Key `#{$key}` doesn't exist at current level in map.";
|
33
|
+
}
|
34
|
+
$maps: append($maps, $current-get);
|
35
|
+
}
|
36
|
+
|
37
|
+
// Loop from the last map to the first one
|
38
|
+
// Merge it with the previous one
|
39
|
+
@for $i from length($maps) through 1 {
|
40
|
+
$current-map: nth($maps, $i);
|
41
|
+
$current-key: nth($keys, $i);
|
42
|
+
$current-val: if($i == length($maps), $value, $result);
|
43
|
+
$result: map-merge($current-map, ($current-key: $current-val));
|
44
|
+
}
|
45
|
+
|
46
|
+
// Return result
|
47
|
+
@return $result;
|
48
|
+
}
|
@@ -0,0 +1,4 @@
|
|
1
|
+
@function td-override-type-size($environment-name, $size, $font-size, $line-height) {
|
2
|
+
map-set-deep($typography, "environments", $environment-name, "sizes", $size, "font-size", $font-size);
|
3
|
+
map-set-deep($typography, "environments", $environment-name, "sizes", $size, "line-height", $line-height);
|
4
|
+
}
|