Project

General

Profile

1
// Name:            Search
2
// Description:     Component to create the search
3
//
4
// Component:       `uk-search`
5
//
6
// Sub-objects:     `uk-search-input`
7
//                  `uk-search-toggle`
8
//
9
// Adopted:         `uk-search-icon`
10
//
11
// Modifier:        `uk-search-default`
12
//                  `uk-search-navbar`
13
//                  `uk-search-large`
14
//
15
// ========================================================================
16

    
17

    
18
// Variables
19
// ========================================================================
20

    
21
$search-color:                                       $global-color !default;
22
$search-placeholder-color:                           $global-muted-color !default;
23

    
24
$search-icon-color:                                  $global-muted-color !default;
25

    
26
$search-default-width:                               180px !default;
27
$search-default-height:                              $global-control-height !default;
28
$search-default-padding-horizontal:                  6px !default;
29
$search-default-background:                          $global-muted-background !default;
30
$search-default-focus-background:                    $search-default-background !default;
31

    
32
$search-default-icon-width:                          $global-control-height !default;
33

    
34
$search-navbar-width:                                400px !default;
35
$search-navbar-height:                               40px !default;
36
$search-navbar-background:                           transparent !default;
37
$search-navbar-font-size:                            $global-large-font-size !default;
38

    
39
$search-navbar-icon-width:                           40px !default;
40

    
41
$search-large-width:                                 500px !default;
42
$search-large-height:                                80px !default;
43
$search-large-background:                            transparent !default;
44
$search-large-font-size:                             $global-xxlarge-font-size !default;
45

    
46
$search-large-icon-width:                            80px !default;
47

    
48
$search-toggle-color:                                $global-muted-color !default;
49
$search-toggle-hover-color:                          $global-color !default;
50

    
51

    
52
/* ========================================================================
53
   Component: Search
54
 ========================================================================== */
55

    
56
/*
57
 * 1. Container fits its content
58
 * 2. Create position context
59
 * 3. Prevent content overflow
60
 * 4. Reset `form`
61
 */
62

    
63
.uk-search {
64
    /* 1 */
65
    display: inline-block;
66
    /* 2 */
67
    position: relative;
68
    /* 3 */
69
    max-width: 100%;
70
    /* 4 */
71
    margin: 0;
72
}
73

    
74

    
75
/* Input
76
 ========================================================================== */
77

    
78
/*
79
 * Remove the inner padding and cancel buttons in Chrome on OS X and Safari on OS X.
80
 */
81

    
82
.uk-search-input::-webkit-search-cancel-button,
83
.uk-search-input::-webkit-search-decoration { -webkit-appearance: none; }
84

    
85
/*
86
 * Removes placeholder transparency in Firefox.
87
 */
88

    
89
.uk-search-input::-moz-placeholder { opacity: 1; }
90

    
91
/*
92
 * 1. Define consistent box sizing.
93
 * 2. Address margins set differently in Firefox/IE and Chrome/Safari/Opera.
94
 * 3. Remove `border-radius` in iOS.
95
 * 4. Change font properties to `inherit` in all browsers
96
 * 5. Show the overflow in Edge.
97
 * 6. Remove default style in iOS.
98
 * 7. Vertical alignment
99
 * 8. Take the full container width
100
 * 9. Style
101
 */
102

    
103
.uk-search-input {
104
    /* 1 */
105
    box-sizing: border-box;
106
    /* 2 */
107
    margin: 0;
108
    /* 3 */
109
    border-radius: 0;
110
    /* 4 */
111
    font: inherit;
112
    /* 5 */
113
    overflow: visible;
114
    /* 6 */
115
    -webkit-appearance: none;
116
    /* 7 */
117
    vertical-align: middle;
118
    /* 8 */
119
    width: 100%;
120
    /* 9 */
121
    border: none;
122
    color: $search-color;
123
}
124

    
125
.uk-search-input:focus { outline: 0; }
126

    
127
/* Placeholder */
128
.uk-search-input:-ms-input-placeholder { color: $search-placeholder-color !important; }
129
.uk-search-input::-moz-placeholder { color: $search-placeholder-color; }
130
.uk-search-input::-webkit-input-placeholder { color: $search-placeholder-color; }
131

    
132

    
133
/* Icon
134
 ========================================================================== */
135

    
136
/*
137
 * Adopts `uk-icon`
138
 * Required for `button`
139
 * 1. Remove margins in Chrome, Safari and Opera.
140
 * 2. Remove borders for `button`.
141
 * 3. Address `overflow` set to `hidden` in IE.
142
 * 4. Correct `font` properties and `color` not being inherited for `button`.
143
 * 5. Remove the inheritance of text transform in Edge, Firefox, and IE.
144
 * 6. Remove default `button` padding and background color
145
 * 7. Required for `button`.
146
 */
147

    
148
.uk-search-icon {
149
    /* 1 */
150
    margin: 0;
151
    /* 2 */
152
    border: none;
153
    /* 3 */
154
    overflow: visible;
155
    /* 4 */
156
    font: inherit;
157
    color: inherit;
158
    /* 5 */
159
    text-transform: none;
160
    /* 6. */
161
    padding: 0;
162
    background-color: transparent;
163
    /* 7 */
164
    cursor: pointer;
165
}
166

    
167
/*
168
 * Remove the inner border and padding in Firefox. Required for `button`.
169
 */
170

    
171
.uk-search-icon::-moz-focus-inner {
172
    border: 0;
173
    padding: 0;
174
}
175

    
176
/*
177
 * Remove default focus style
178
 */
179

    
180
.uk-search-icon:focus { outline: none; }
181

    
182
/*
183
 * Position above input
184
 * 1. Set position
185
 * 2. Center icon vertically and horizontally
186
 * 3. Style
187
 */
188

    
189
.uk-search .uk-search-icon {
190
    /* 1 */
191
    position: absolute;
192
    top: 0;
193
    bottom: 0;
194
    left: 0;
195
    /* 2 */
196
    display: -ms-inline-flexbox;
197
    display: -webkit-inline-flex;
198
    display: inline-flex;
199
    -ms-flex-pack: center;
200
    -webkit-justify-content: center;
201
    justify-content: center;
202
    -ms-flex-align: center;
203
    -webkit-align-items: center;
204
    align-items: center;
205
    /* 3 */
206
    color: $search-icon-color;
207
}
208

    
209
/*
210
 * Required for `a`.
211
 */
212

    
213
.uk-search .uk-search-icon:hover { color: $search-icon-color; }
214

    
215
/*
216
 * Make `input` element clickable through icon, e.g. if it's a `span`
217
 */
218

    
219
.uk-search .uk-search-icon:not(a):not(button):not(input) { pointer-events: none; }
220

    
221
/*
222
 * Position modifier
223
 */
224

    
225
.uk-search .uk-search-icon-flip {
226
    right: 0;
227
    left: auto;
228
}
229

    
230

    
231
/* Default modifier
232
 ========================================================================== */
233

    
234
.uk-search-default { width: $search-default-width; }
235

    
236
/*
237
 * Input
238
 */
239

    
240
.uk-search-default .uk-search-input {
241
    height: $search-default-height;
242
    padding-left: $search-default-padding-horizontal;
243
    padding-right: $search-default-padding-horizontal;
244
    background: $search-default-background;
245
    @if(mixin-exists(hook-search-default-input)) {@include hook-search-default-input();}
246
}
247

    
248
/* Focus */
249
.uk-search-default .uk-search-input:focus {
250
    background-color: $search-default-focus-background;
251
    @if(mixin-exists(hook-search-default-input-focus)) {@include hook-search-default-input-focus();}
252
}
253

    
254
/*
255
 * Icon
256
 */
257

    
258
.uk-search-default .uk-search-icon { width: $search-default-icon-width; }
259

    
260
.uk-search-default .uk-search-icon:not(.uk-search-icon-flip) + .uk-search-input { padding-left: ($search-default-icon-width); }
261
.uk-search-default .uk-search-icon-flip + .uk-search-input { padding-right: ($search-default-icon-width); }
262

    
263

    
264
/* Navbar modifier
265
 ========================================================================== */
266

    
267
.uk-search-navbar { width: $search-navbar-width; }
268

    
269
/*
270
 * Input
271
 */
272

    
273
.uk-search-navbar .uk-search-input {
274
    height: $search-navbar-height;
275
    background: $search-navbar-background;
276
    font-size: $search-navbar-font-size;
277
    @if(mixin-exists(hook-search-navbar-input)) {@include hook-search-navbar-input();}
278
}
279

    
280
/*
281
 * Icon
282
 */
283

    
284
.uk-search-navbar .uk-search-icon { width: $search-navbar-icon-width; }
285

    
286
.uk-search-navbar .uk-search-icon:not(.uk-search-icon-flip) + .uk-search-input { padding-left: ($search-navbar-icon-width); }
287
.uk-search-navbar .uk-search-icon-flip + .uk-search-input { padding-right: ($search-navbar-icon-width); }
288

    
289

    
290
/* Large modifier
291
 ========================================================================== */
292

    
293
.uk-search-large { width: $search-large-width; }
294

    
295
/*
296
 * Input
297
 */
298

    
299
.uk-search-large .uk-search-input {
300
    height: $search-large-height;
301
    background: $search-large-background;
302
    font-size: $search-large-font-size;
303
    @if(mixin-exists(hook-search-large-input)) {@include hook-search-large-input();}
304
}
305

    
306
/*
307
 * Icon
308
 */
309

    
310
.uk-search-large .uk-search-icon { width: $search-large-icon-width; }
311

    
312
.uk-search-large .uk-search-icon:not(.uk-search-icon-flip) + .uk-search-input { padding-left: ($search-large-icon-width); }
313
.uk-search-large .uk-search-icon-flip + .uk-search-input { padding-right: ($search-large-icon-width); }
314

    
315

    
316
/* Toggle
317
 ========================================================================== */
318

    
319
.uk-search-toggle {
320
    color: $search-toggle-color;
321
    @if(mixin-exists(hook-search-toggle)) {@include hook-search-toggle();}
322
}
323

    
324
/* Hover + Focus */
325
.uk-search-toggle:hover,
326
.uk-search-toggle:focus {
327
    color: $search-toggle-hover-color;
328
    @if(mixin-exists(hook-search-toggle-hover)) {@include hook-search-toggle-hover();}
329
}
330

    
331

    
332
// Hooks
333
// ========================================================================
334

    
335
@if(mixin-exists(hook-search-misc)) {@include hook-search-misc();}
336

    
337
// @mixin hook-search-default-input(){}
338
// @mixin hook-search-default-input-focus(){}
339
// @mixin hook-search-navbar-input(){}
340
// @mixin hook-search-large-input(){}
341

    
342
// @mixin hook-search-toggle(){}
343
// @mixin hook-search-toggle-hover(){}
344

    
345
// @mixin hook-search-misc(){}
346

    
347

    
348
// Inverse
349
// ========================================================================
350

    
351
$inverse-search-color:                          $inverse-global-color !default;
352
$inverse-search-placeholder-color:              $inverse-global-muted-color !default;
353

    
354
$inverse-search-icon-color:                     $inverse-global-muted-color !default;
355

    
356
$inverse-search-default-background:             $inverse-global-muted-background !default;
357
$inverse-search-default-focus-background:       $inverse-search-default-background !default;
358

    
359
$inverse-search-navbar-background:              transparent !default;
360

    
361
$inverse-search-large-background:               transparent !default;
362

    
363
$inverse-search-toggle-color:                   $inverse-global-muted-color !default;
364
$inverse-search-toggle-hover-color:             $inverse-global-color !default;
365

    
366

    
367

    
368
// @mixin hook-inverse-search-default-input(){}
369
// @mixin hook-inverse-search-default-input-focus(){}
370
// @mixin hook-inverse-search-navbar-input(){}
371
// @mixin hook-inverse-search-large-input(){}
372
// @mixin hook-inverse-search-toggle(){}
373
// @mixin hook-inverse-search-toggle-hover(){}
(48-48/66)