type-director 0.8 → 0.9
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.
- 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
|
+
}
|