Project

General

Profile

1
// Name:            Nav
2
// Description:     Defines styles for list navigations
3
//
4
// Component:       `uk-nav`
5
//
6
// Sub-objects:     `uk-nav-header`
7
//                  `uk-nav-divider`
8
//                  `uk-nav-sub`
9
//
10
// Modifiers:       `uk-nav-parent-icon`
11
//                  `uk-nav-default`
12
//                  `uk-nav-primary`
13
//                  `uk-nav-center`
14
//
15
// States:          `uk-active`
16
//                  `uk-parent`
17
//                  `uk-open`
18
//                  `uk-touch`
19
//
20
// ========================================================================
21

    
22

    
23
// Variables
24
// ========================================================================
25

    
26
$nav-item-padding-vertical:                      5px !default;
27
$nav-item-padding-horizontal:                    0 !default;
28

    
29
$nav-sublist-padding-vertical:                   5px !default;
30
$nav-sublist-padding-left:                       15px !default;
31
$nav-sublist-deeper-padding-left:                15px !default;
32
$nav-sublist-item-padding-vertical:              2px !default;
33

    
34
$nav-parent-icon-width:                          ($global-line-height * 1em) !default;
35
$nav-parent-icon-height:                         $nav-parent-icon-width !default;
36
$nav-parent-icon-color:                          $global-color !default;
37

    
38
$nav-header-padding-vertical:                    $nav-item-padding-vertical !default;
39
$nav-header-padding-horizontal:                  $nav-item-padding-horizontal !default;
40
$nav-header-font-size:                           $global-small-font-size !default;
41
$nav-header-text-transform:                      uppercase !default;
42
$nav-header-margin-top:                          $global-margin !default;
43

    
44
$nav-divider-margin-vertical:                    5px !default;
45
$nav-divider-margin-horizontal:                  0 !default;
46

    
47
$nav-default-item-color:                         $global-muted-color !default;
48
$nav-default-item-hover-color:                   $global-color !default;
49
$nav-default-item-active-color:                  $global-emphasis-color !default;
50
$nav-default-header-color:                       $global-emphasis-color !default;
51
$nav-default-divider-border-width:               $global-border-width !default;
52
$nav-default-divider-border:                     $global-border !default;
53
$nav-default-sublist-item-color:                 $global-muted-color !default;
54
$nav-default-sublist-item-hover-color:           $global-color !default;
55

    
56
$nav-primary-item-font-size:                     $global-large-font-size !default;
57
$nav-primary-item-line-height:                   $global-line-height !default;
58
$nav-primary-item-color:                         $global-muted-color !default;
59
$nav-primary-item-hover-color:                   $global-color !default;
60
$nav-primary-item-active-color:                  $global-emphasis-color !default;
61
$nav-primary-header-color:                       $global-emphasis-color !default;
62
$nav-primary-divider-border-width:               $global-border-width !default;
63
$nav-primary-divider-border:                     $global-border !default;
64
$nav-primary-sublist-item-color:                 $global-muted-color !default;
65
$nav-primary-sublist-item-hover-color:           $global-color !default;
66

    
67
$internal-nav-parent-close-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22#000%22%20stroke-width%3D%221.1%22%20points%3D%2210%201%204%207%2010%2013%22%3E%3C%2Fpolyline%3E%0A%3C%2Fsvg%3E" !default;
68
$internal-nav-parent-open-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22#000%22%20stroke-width%3D%221.1%22%20points%3D%221%204%207%2010%2013%204%22%3E%3C%2Fpolyline%3E%0A%3C%2Fsvg%3E" !default;
69

    
70

    
71
/* ========================================================================
72
   Component: Nav
73
 ========================================================================== */
74

    
75
/*
76
 * Reset
77
 * 1. Prepare lists
78
 * 2. Prepare links
79
 * 3. Remove default focus style
80
 */
81

    
82
/* 1 */
83
.uk-nav,
84
.uk-nav ul {
85
    margin: 0;
86
    padding: 0;
87
    list-style: none;
88
}
89

    
90
/* 2 */
91
.uk-nav li > a {
92
    display: block;
93
    text-decoration: none;
94
}
95

    
96
/* 3 */
97
.uk-nav li > a:focus { outline: none; }
98

    
99
/*
100
 * Items
101
 * Must target `a` elements to exclude other elements (e.g. lists)
102
 */
103

    
104
.uk-nav > li > a { padding: $nav-item-padding-vertical $nav-item-padding-horizontal; }
105

    
106

    
107
/* Sublists
108
 ========================================================================== */
109

    
110
/*
111
 * Level 2
112
 * `ul` needed for higher specificity to override padding
113
 */
114

    
115
ul.uk-nav-sub {
116
    padding: $nav-sublist-padding-vertical 0 $nav-sublist-padding-vertical $nav-sublist-padding-left;
117
    @if(mixin-exists(hook-nav-sub)) {@include hook-nav-sub();}
118
}
119

    
120
/*
121
 * Level 3 and deeper
122
 */
123

    
124
.uk-nav-sub ul { padding-left: $nav-sublist-deeper-padding-left; }
125

    
126
/*
127
 * Items
128
 */
129

    
130
.uk-nav-sub a { padding: $nav-sublist-item-padding-vertical 0; }
131

    
132

    
133
/* Parent icon modifier
134
 ========================================================================== */
135

    
136
.uk-nav-parent-icon > .uk-parent > a::after {
137
    content: "";
138
    width: $nav-parent-icon-width;
139
    height: $nav-parent-icon-height;
140
    float: right;
141
    @include svg-fill($internal-nav-parent-close-image, "#000", $nav-parent-icon-color);
142
    background-repeat: no-repeat;
143
    background-position: 50% 50%;
144
    @if(mixin-exists(hook-nav-parent-icon)) {@include hook-nav-parent-icon();}
145
}
146

    
147
.uk-nav-parent-icon > .uk-parent.uk-open > a::after { @include svg-fill($internal-nav-parent-open-image, "#000", $nav-parent-icon-color); }
148

    
149

    
150
/* Header
151
 ========================================================================== */
152

    
153
.uk-nav-header {
154
    padding: $nav-header-padding-vertical $nav-header-padding-horizontal;
155
    text-transform: $nav-header-text-transform;
156
    font-size: $nav-header-font-size;
157
    @if(mixin-exists(hook-nav-header)) {@include hook-nav-header();}
158
}
159

    
160
.uk-nav-header:not(:first-child) { margin-top: $nav-header-margin-top; }
161

    
162

    
163
/* Divider
164
 ========================================================================== */
165

    
166
.uk-nav-divider {
167
    margin: $nav-divider-margin-vertical $nav-divider-margin-horizontal;
168
    @if(mixin-exists(hook-nav-divider)) {@include hook-nav-divider();}
169
}
170

    
171

    
172
/* Default modifier
173
 ========================================================================== */
174

    
175
.uk-nav-default {
176
    @if(mixin-exists(hook-nav-default)) {@include hook-nav-default();}
177
}
178

    
179
/*
180
 * Items
181
 */
182

    
183
.uk-nav-default > li > a {
184
    color: $nav-default-item-color;
185
    @if(mixin-exists(hook-nav-default-item)) {@include hook-nav-default-item();}
186
}
187

    
188
/* Hover + Focus */
189
.uk-nav-default > li > a:hover,
190
.uk-nav-default > li > a:focus {
191
    color: $nav-default-item-hover-color;
192
    @if(mixin-exists(hook-nav-default-item-hover)) {@include hook-nav-default-item-hover();}
193
}
194

    
195
/* Active */
196
.uk-nav-default > li.uk-active > a {
197
    color: $nav-default-item-active-color;
198
    @if(mixin-exists(hook-nav-default-item-active)) {@include hook-nav-default-item-active();}
199
}
200

    
201
/*
202
 * Header
203
 */
204

    
205
.uk-nav-default .uk-nav-header {
206
    color: $nav-default-header-color;
207
    @if(mixin-exists(hook-nav-default-header)) {@include hook-nav-default-header();}
208
}
209

    
210
/*
211
 * Divider
212
 */
213

    
214
.uk-nav-default .uk-nav-divider {
215
    border-top: $nav-default-divider-border-width solid $nav-default-divider-border;
216
    @if(mixin-exists(hook-nav-default-divider)) {@include hook-nav-default-divider();}
217
}
218

    
219
/*
220
 * Sublists
221
 */
222

    
223
.uk-nav-default .uk-nav-sub a { color: $nav-default-sublist-item-color; }
224

    
225
.uk-nav-default .uk-nav-sub a:hover,
226
.uk-nav-default .uk-nav-sub a:focus { color: $nav-default-sublist-item-hover-color; }
227

    
228

    
229
/* Primary modifier
230
 ========================================================================== */
231

    
232
.uk-nav-primary {
233
    @if(mixin-exists(hook-nav-primary)) {@include hook-nav-primary();}
234
}
235

    
236
/*
237
 * Items
238
 */
239

    
240
.uk-nav-primary > li > a {
241
    font-size: $nav-primary-item-font-size;
242
    line-height: $nav-primary-item-line-height;
243
    color: $nav-primary-item-color;
244
    @if(mixin-exists(hook-nav-primary-item)) {@include hook-nav-primary-item();}
245
}
246

    
247
/* Hover + Focus */
248
.uk-nav-primary > li > a:hover,
249
.uk-nav-primary > li > a:focus {
250
    color: $nav-primary-item-hover-color;
251
    @if(mixin-exists(hook-nav-primary-item-hover)) {@include hook-nav-primary-item-hover();}
252
}
253

    
254
/* Active */
255
.uk-nav-primary > li.uk-active > a {
256
    color: $nav-primary-item-active-color;
257
    @if(mixin-exists(hook-nav-primary-item-active)) {@include hook-nav-primary-item-active();}
258
}
259

    
260
/*
261
 * Header
262
 */
263

    
264
.uk-nav-primary .uk-nav-header {
265
    color: $nav-primary-header-color;
266
    @if(mixin-exists(hook-nav-primary-header)) {@include hook-nav-primary-header();}
267
}
268

    
269
/*
270
 * Divider
271
 */
272

    
273
.uk-nav-primary .uk-nav-divider {
274
    border-top: $nav-primary-divider-border-width solid $nav-primary-divider-border;
275
    @if(mixin-exists(hook-nav-primary-divider)) {@include hook-nav-primary-divider();}
276
}
277

    
278
/*
279
 * Sublists
280
 */
281

    
282
.uk-nav-primary .uk-nav-sub a { color: $nav-primary-sublist-item-color; }
283

    
284
.uk-nav-primary .uk-nav-sub a:hover,
285
.uk-nav-primary .uk-nav-sub a:focus { color: $nav-primary-sublist-item-hover-color; }
286

    
287

    
288
/* Alignment modifier
289
 ========================================================================== */
290

    
291
.uk-nav-center { text-align: center; }
292

    
293
/* Sublists */
294
.uk-nav-center .uk-nav-sub,
295
.uk-nav-center .uk-nav-sub ul { padding-left: 0; }
296

    
297
/* Parent icon modifier  */
298
.uk-nav-center.uk-nav-parent-icon > .uk-parent > a::after { position: absolute; }
299

    
300

    
301
// Hooks
302
// ========================================================================
303

    
304
@if(mixin-exists(hook-nav-misc)) {@include hook-nav-misc();}
305

    
306
// @mixin hook-nav-sub(){}
307
// @mixin hook-nav-parent-icon(){}
308
// @mixin hook-nav-header(){}
309
// @mixin hook-nav-divider(){}
310
// @mixin hook-nav-default(){}
311
// @mixin hook-nav-default-item(){}
312
// @mixin hook-nav-default-item-hover(){}
313
// @mixin hook-nav-default-item-active(){}
314
// @mixin hook-nav-default-header(){}
315
// @mixin hook-nav-default-divider(){}
316
// @mixin hook-nav-primary(){}
317
// @mixin hook-nav-primary-item(){}
318
// @mixin hook-nav-primary-item-hover(){}
319
// @mixin hook-nav-primary-item-active(){}
320
// @mixin hook-nav-primary-header(){}
321
// @mixin hook-nav-primary-divider(){}
322
// @mixin hook-nav-misc(){}
323

    
324

    
325
// Inverse
326
// ========================================================================
327

    
328
$inverse-nav-parent-icon-color:                 $inverse-global-color !default;
329
$inverse-nav-default-item-color:                $inverse-global-muted-color !default;
330
$inverse-nav-default-item-hover-color:          $inverse-global-color !default;
331
$inverse-nav-default-item-active-color:         $inverse-global-emphasis-color !default;
332
$inverse-nav-default-header-color:              $inverse-global-emphasis-color !default;
333
$inverse-nav-default-divider-border:            $inverse-global-border !default;
334
$inverse-nav-default-sublist-item-color:        $inverse-global-muted-color !default;
335
$inverse-nav-default-sublist-item-hover-color:  $inverse-global-color !default;
336

    
337
$inverse-nav-primary-item-color:                $inverse-global-muted-color !default;
338
$inverse-nav-primary-item-hover-color:          $inverse-global-color !default;
339
$inverse-nav-primary-item-active-color:         $inverse-global-emphasis-color !default;
340
$inverse-nav-primary-header-color:              $inverse-global-emphasis-color !default;
341
$inverse-nav-primary-divider-border:            $inverse-global-border !default;
342
$inverse-nav-primary-sublist-item-color:        $inverse-global-muted-color !default;
343
$inverse-nav-primary-sublist-item-hover-color:  $inverse-global-color !default;
344

    
345

    
346

    
347
// @mixin hook-inverse-nav-parent-icon(){}
348
// @mixin hook-inverse-nav-default-item(){}
349
// @mixin hook-inverse-nav-default-item-hover(){}
350
// @mixin hook-inverse-nav-default-item-active(){}
351
// @mixin hook-inverse-nav-default-header(){}
352
// @mixin hook-inverse-nav-default-divider(){}
353
// @mixin hook-inverse-nav-primary-item(){}
354
// @mixin hook-inverse-nav-primary-item-hover(){}
355
// @mixin hook-inverse-nav-primary-item-active(){}
356
// @mixin hook-inverse-nav-primary-header(){}
357
// @mixin hook-inverse-nav-primary-divider(){}
(37-37/66)