uikit 3.25.17-dev.80dfe87 → 3.25.17-dev.8c70e44

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.
Files changed (200) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/build/prefix.js +1 -1
  3. package/build/publishDev.js +1 -1
  4. package/build/release.js +2 -2
  5. package/build/scope.js +1 -1
  6. package/build/scss.js +1 -1
  7. package/dist/css/uikit-core-rtl.css +892 -802
  8. package/dist/css/uikit-core-rtl.min.css +1 -1
  9. package/dist/css/uikit-core.css +892 -802
  10. package/dist/css/uikit-core.min.css +1 -1
  11. package/dist/css/uikit-rtl.css +893 -803
  12. package/dist/css/uikit-rtl.min.css +1 -1
  13. package/dist/css/uikit.css +893 -803
  14. package/dist/css/uikit.min.css +1 -1
  15. package/dist/js/components/countdown.js +1 -1
  16. package/dist/js/components/countdown.min.js +1 -1
  17. package/dist/js/components/filter.js +1 -1
  18. package/dist/js/components/filter.min.js +1 -1
  19. package/dist/js/components/lightbox-panel.js +133 -132
  20. package/dist/js/components/lightbox-panel.min.js +1 -1
  21. package/dist/js/components/lightbox.js +134 -133
  22. package/dist/js/components/lightbox.min.js +1 -1
  23. package/dist/js/components/marquee.js +179 -0
  24. package/dist/js/components/marquee.min.js +1 -0
  25. package/dist/js/components/notification.js +1 -1
  26. package/dist/js/components/notification.min.js +1 -1
  27. package/dist/js/components/parallax.js +8 -12
  28. package/dist/js/components/parallax.min.js +1 -1
  29. package/dist/js/components/slider-parallax.js +8 -12
  30. package/dist/js/components/slider-parallax.min.js +1 -1
  31. package/dist/js/components/slider.js +41 -25
  32. package/dist/js/components/slider.min.js +1 -1
  33. package/dist/js/components/slideshow-parallax.js +8 -12
  34. package/dist/js/components/slideshow-parallax.min.js +1 -1
  35. package/dist/js/components/slideshow.js +71 -102
  36. package/dist/js/components/slideshow.min.js +1 -1
  37. package/dist/js/components/sortable.js +1 -1
  38. package/dist/js/components/sortable.min.js +1 -1
  39. package/dist/js/components/tooltip.js +19 -19
  40. package/dist/js/components/tooltip.min.js +1 -1
  41. package/dist/js/components/upload.js +1 -1
  42. package/dist/js/components/upload.min.js +1 -1
  43. package/dist/js/uikit-core.js +754 -262
  44. package/dist/js/uikit-core.min.js +1 -1
  45. package/dist/js/uikit-icons.js +1 -1
  46. package/dist/js/uikit-icons.min.js +1 -1
  47. package/dist/js/uikit.js +629 -374
  48. package/dist/js/uikit.min.js +1 -1
  49. package/package.json +2 -2
  50. package/src/js/api/component.js +2 -3
  51. package/src/js/api/observables.js +2 -4
  52. package/src/js/api/options.js +6 -3
  53. package/src/js/api/props.js +1 -4
  54. package/src/js/api/state.js +7 -8
  55. package/src/js/components/index.js +1 -0
  56. package/src/js/components/internal/lightbox-animations.js +7 -26
  57. package/src/js/components/internal/slideshow-animations.js +15 -62
  58. package/src/js/components/lightbox-panel.js +121 -96
  59. package/src/js/components/lightbox.js +5 -8
  60. package/src/js/components/marquee.js +123 -0
  61. package/src/js/components/tooltip.js +4 -2
  62. package/src/js/core/accordion.js +78 -29
  63. package/src/js/core/drop.js +5 -4
  64. package/src/js/core/dropnav.js +3 -3
  65. package/src/js/core/grid.js +5 -19
  66. package/src/js/core/height-match.js +1 -2
  67. package/src/js/core/margin.js +3 -0
  68. package/src/js/core/overflow-fade.js +5 -5
  69. package/src/js/core/sticky.js +1 -1
  70. package/src/js/core/switcher.js +24 -44
  71. package/src/js/core/video.js +172 -15
  72. package/src/js/mixin/connect.js +57 -0
  73. package/src/js/mixin/internal/slideshow-animations.js +5 -13
  74. package/src/js/mixin/internal/slideshow-transitioner.js +2 -2
  75. package/src/js/mixin/modal.js +4 -3
  76. package/src/js/mixin/parallax.js +1 -4
  77. package/src/js/mixin/position.js +1 -1
  78. package/src/js/mixin/scroll-driven.js +57 -0
  79. package/src/js/mixin/slider-nav.js +1 -1
  80. package/src/js/mixin/slider-parallax.js +9 -38
  81. package/src/js/mixin/togglable.js +13 -14
  82. package/src/js/util/attr.js +7 -7
  83. package/src/js/util/class.js +1 -1
  84. package/src/js/util/dom.js +3 -4
  85. package/src/js/util/lang.js +1 -1
  86. package/src/js/util/player.js +4 -4
  87. package/src/js/util/style.js +10 -15
  88. package/src/js/util/viewport.js +22 -25
  89. package/src/less/components/_import.less +6 -1
  90. package/src/less/components/base.less +1 -1
  91. package/src/less/components/button.less +1 -1
  92. package/src/less/components/dropcap.less +71 -0
  93. package/src/less/components/floating-shadow.less +65 -0
  94. package/src/less/components/form.less +5 -5
  95. package/src/less/components/grid.less +57 -64
  96. package/src/less/components/logo.less +94 -0
  97. package/src/less/components/margin.less +81 -81
  98. package/src/less/components/marquee.less +133 -0
  99. package/src/less/components/nav.less +1 -1
  100. package/src/less/components/padding.less +9 -9
  101. package/src/less/components/utility.less +0 -157
  102. package/src/less/theme/_import.less +5 -1
  103. package/src/less/theme/dropcap.less +29 -0
  104. package/src/less/theme/floating-shadow.less +20 -0
  105. package/src/less/theme/logo.less +29 -0
  106. package/src/less/theme/marquee.less +14 -0
  107. package/src/less/theme/utility.less +0 -32
  108. package/src/scss/components/_import.scss +6 -1
  109. package/src/scss/components/base.scss +1 -1
  110. package/src/scss/components/button.scss +1 -1
  111. package/src/scss/components/dropcap.scss +63 -0
  112. package/src/scss/components/floating-shadow.scss +62 -0
  113. package/src/scss/components/form.scss +5 -5
  114. package/src/scss/components/grid.scss +57 -64
  115. package/src/scss/components/logo.scss +75 -0
  116. package/src/scss/components/margin.scss +81 -81
  117. package/src/scss/components/marquee.scss +136 -0
  118. package/src/scss/components/nav.scss +1 -1
  119. package/src/scss/components/padding.scss +9 -9
  120. package/src/scss/components/utility.scss +0 -128
  121. package/src/scss/mixins-theme.scss +41 -32
  122. package/src/scss/mixins.scss +38 -29
  123. package/src/scss/variables-theme.scss +14 -9
  124. package/src/scss/variables.scss +14 -9
  125. package/tests/accordion.html +77 -10
  126. package/tests/alert.html +1 -1
  127. package/tests/align.html +5 -5
  128. package/tests/animation.html +4 -4
  129. package/tests/article.html +7 -7
  130. package/tests/background.html +2 -2
  131. package/tests/badge.html +1 -1
  132. package/tests/base.html +2 -2
  133. package/tests/button.html +1 -1
  134. package/tests/card.html +15 -15
  135. package/tests/close.html +2 -2
  136. package/tests/comment.html +9 -9
  137. package/tests/container.html +2 -2
  138. package/tests/countdown.html +21 -21
  139. package/tests/cover.html +3 -3
  140. package/tests/description-list.html +1 -1
  141. package/tests/divider.html +3 -3
  142. package/tests/dotnav.html +1 -1
  143. package/tests/drop.html +7 -7
  144. package/tests/dropbar.html +5 -5
  145. package/tests/dropcap.html +26 -0
  146. package/tests/dropdown.html +1 -1
  147. package/tests/dropnav.html +18 -18
  148. package/tests/filter.html +3 -3
  149. package/tests/floating-shadow.html +44 -0
  150. package/tests/form.html +14 -14
  151. package/tests/grid.html +41 -47
  152. package/tests/heading.html +2 -2
  153. package/tests/height-viewport.html +4 -4
  154. package/tests/height.html +5 -5
  155. package/tests/icon.html +8 -8
  156. package/tests/image.html +6 -6
  157. package/tests/index.html +13 -13
  158. package/tests/js/index.js +1 -1
  159. package/tests/leader.html +5 -5
  160. package/tests/lightbox.html +6 -6
  161. package/tests/link.html +1 -1
  162. package/tests/list.html +4 -4
  163. package/tests/logo.html +84 -0
  164. package/tests/margin.html +7 -7
  165. package/tests/marker.html +3 -3
  166. package/tests/marquee.html +617 -0
  167. package/tests/modal.html +3 -3
  168. package/tests/nav.html +5 -5
  169. package/tests/navbar.html +27 -27
  170. package/tests/notification.html +2 -2
  171. package/tests/offcanvas.html +12 -12
  172. package/tests/overlay.html +3 -3
  173. package/tests/padding.html +1 -1
  174. package/tests/pagination.html +3 -3
  175. package/tests/parallax.html +1 -1
  176. package/tests/position.html +6 -6
  177. package/tests/scrollspy.html +12 -12
  178. package/tests/search.html +5 -5
  179. package/tests/section.html +17 -17
  180. package/tests/slidenav.html +3 -3
  181. package/tests/slider.html +5 -5
  182. package/tests/slideshow.html +3 -3
  183. package/tests/sortable.html +15 -15
  184. package/tests/sticky-navbar.html +4 -4
  185. package/tests/sticky-parallax.html +3 -3
  186. package/tests/sticky.html +3 -3
  187. package/tests/svg.html +3 -2
  188. package/tests/switcher.html +6 -6
  189. package/tests/tab.html +4 -4
  190. package/tests/text.html +3 -3
  191. package/tests/tile.html +4 -4
  192. package/tests/toggle.html +1 -1
  193. package/tests/tooltip.html +3 -3
  194. package/tests/totop.html +2 -2
  195. package/tests/transition.html +1 -1
  196. package/tests/upload.html +5 -5
  197. package/tests/utility.html +16 -116
  198. package/tests/video.html +224 -24
  199. package/tests/visibility.html +4 -4
  200. package/tests/width.html +12 -12
@@ -37,23 +37,18 @@ export function css(element, property, value, priority) {
37
37
 
38
38
  if (isUndefined(value)) {
39
39
  return getComputedStyle(element).getPropertyValue(property);
40
- } else {
41
- element.style.setProperty(
42
- property,
43
- isNumeric(value) && !cssNumber[property] && !isCustomProperty(property)
44
- ? `${value}px`
45
- : value || isNumber(value)
46
- ? value
47
- : '',
48
- priority,
49
- );
50
40
  }
41
+ element.style.setProperty(
42
+ property,
43
+ isNumeric(value) && !cssNumber[property] && !isCustomProperty(property)
44
+ ? `${value}px`
45
+ : value || isNumber(value)
46
+ ? value
47
+ : '',
48
+ priority,
49
+ );
51
50
  } else if (isArray(property)) {
52
- const props = {};
53
- for (const prop of property) {
54
- props[prop] = css(element, prop);
55
- }
56
- return props;
51
+ return Object.fromEntries(property.map((prop) => [prop, css(element, prop)]));
57
52
  } else if (isObject(property)) {
58
53
  for (const prop in property) {
59
54
  css(element, prop, property[prop], value);
@@ -18,20 +18,18 @@ export function isInView(element, offsetTop = 0, offsetLeft = 0) {
18
18
  return false;
19
19
  }
20
20
 
21
- return intersectRect(
22
- ...overflowParents(element)
23
- .map((parent) => {
24
- const { top, left, bottom, right } = offsetViewport(parent);
25
-
26
- return {
27
- top: top - offsetTop,
28
- left: left - offsetLeft,
29
- bottom: bottom + offsetTop,
30
- right: right + offsetLeft,
31
- };
32
- })
33
- .concat(offset(element)),
34
- );
21
+ const rects = overflowParents(element).map((parent) => {
22
+ const { top, left, bottom, right } = offsetViewport(parent);
23
+
24
+ return {
25
+ top: top - offsetTop,
26
+ left: left - offsetLeft,
27
+ bottom: bottom + offsetTop,
28
+ right: right + offsetLeft,
29
+ };
30
+ });
31
+
32
+ return intersectRect(...rects, offset(element));
35
33
  }
36
34
 
37
35
  export function scrollIntoView(element, { offset: offsetBy = 0 } = {}) {
@@ -145,17 +143,16 @@ export function scrollParents(element, scrollable = false, props = []) {
145
143
  ancestors = ancestors.slice(fixedIndex);
146
144
  }
147
145
 
148
- return [scrollEl]
149
- .concat(
150
- ancestors.filter(
151
- (parent) =>
152
- css(parent, 'overflow')
153
- .split(' ')
154
- .some((prop) => includes(['auto', 'scroll', ...props], prop)) &&
155
- (!scrollable || parent.scrollHeight > offsetViewport(parent).height),
156
- ),
157
- )
158
- .reverse();
146
+ return [
147
+ scrollEl,
148
+ ...ancestors.filter(
149
+ (parent) =>
150
+ css(parent, 'overflow')
151
+ .split(' ')
152
+ .some((prop) => includes(['auto', 'scroll', ...props], prop)) &&
153
+ (!scrollable || parent.scrollHeight > offsetViewport(parent).height),
154
+ ),
155
+ ].reverse();
159
156
  }
160
157
 
161
158
  export function scrollParent(...args) {
@@ -13,6 +13,7 @@
13
13
  @import "icon.less";
14
14
  @import "form-range.less";
15
15
  @import "form.less"; // After: Icon, Form Range
16
+ @import "search.less"; // After: Icon
16
17
  @import "button.less";
17
18
  @import "progress.less";
18
19
 
@@ -31,10 +32,11 @@
31
32
  @import "placeholder.less";
32
33
  @import "badge.less";
33
34
  @import "label.less";
35
+ @import "dropcap.less";
36
+ @import "floating-shadow.less";
34
37
  @import "overlay.less"; // After: Icon
35
38
  @import "article.less";
36
39
  @import "comment.less";
37
- @import "search.less"; // After: Icon
38
40
 
39
41
  // JavaScript
40
42
  @import "accordion.less";
@@ -44,6 +46,7 @@
44
46
  @import "modal.less"; // After: Close
45
47
  @import "slideshow.less";
46
48
  @import "slider.less";
49
+ @import "marquee.less";
47
50
  @import "sticky.less";
48
51
  @import "offcanvas.less";
49
52
  @import "switcher.less";
@@ -70,8 +73,10 @@
70
73
  @import "tab.less";
71
74
  @import "slidenav.less"; // After: Icon
72
75
  @import "dotnav.less";
76
+
73
77
  @import "dropdown.less"; // After: Card, Nav
74
78
  @import "lightbox.less"; // After: Close, Slidenav
79
+ @import "logo.less"; // After: Navbar
75
80
 
76
81
  // Utilities
77
82
  @import "animation.less";
@@ -488,7 +488,7 @@ blockquote {
488
488
  * Content
489
489
  */
490
490
 
491
- blockquote p:last-of-type { margin-bottom: 0; }
491
+ blockquote :where(p:last-of-type) { margin-bottom: 0; }
492
492
 
493
493
  blockquote footer {
494
494
  margin-top: @base-blockquote-footer-margin-top;
@@ -138,7 +138,7 @@
138
138
 
139
139
  /* Hover */
140
140
  .uk-button:hover {
141
- /* 9 */
141
+ /* 10 */
142
142
  text-decoration: none;
143
143
  .hook-button-hover();
144
144
  }
@@ -0,0 +1,71 @@
1
+ // Name: Dropcap
2
+ // Description: Style for the drop cap
3
+ //
4
+ // Component: `uk-dropcap`
5
+ //
6
+ // ========================================================================
7
+
8
+
9
+ // Variables
10
+ // ========================================================================
11
+ @dropcap-margin-right: 10px;
12
+ @dropcap-font-size: ((@global-line-height * 3) * 1em);
13
+ @dropcap-line-height: 1;
14
+
15
+ /* ========================================================================
16
+ Component: Dropcap
17
+ ========================================================================== */
18
+
19
+ /*
20
+ * 1. Firefox doesn't apply `::first-letter` if the first letter is inside child elements
21
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=214004
22
+ * 2. In Firefox, a floating `::first-letter` doesn't have a line box and there for no `line-height`
23
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=317933
24
+ */
25
+
26
+ .uk-dropcap::first-letter,
27
+ /* 1 */
28
+ .uk-dropcap > p:first-of-type::first-letter {
29
+ display: block;
30
+ margin-right: @dropcap-margin-right;
31
+ float: left;
32
+ font-size: @dropcap-font-size;
33
+ line-height: @dropcap-line-height;
34
+ .hook-dropcap();
35
+ }
36
+
37
+ /* 2 */
38
+ @-moz-document url-prefix() {
39
+
40
+ .uk-dropcap::first-letter,
41
+ .uk-dropcap > p:first-of-type::first-letter { margin-top: 1.1%; }
42
+
43
+ }
44
+
45
+
46
+ // Misc
47
+ // ========================================================================
48
+
49
+ .hook-dropcap-misc();
50
+
51
+
52
+ // Hooks
53
+ // ========================================================================
54
+
55
+ .hook-dropcap() {}
56
+ .hook-dropcap-misc() {}
57
+
58
+
59
+ // Inverse
60
+ // ========================================================================
61
+
62
+ .hook-inverse () {
63
+
64
+ .uk-dropcap::first-letter,
65
+ .uk-dropcap p:first-of-type::first-letter {
66
+ .hook-inverse-dropcap();
67
+ }
68
+
69
+ }
70
+
71
+ .hook-inverse-dropcap() {}
@@ -0,0 +1,65 @@
1
+ // Name: Floating Shadow
2
+ // Description: Component to create floating shadows
3
+ //
4
+ // Component: `uk-floating-shadow`
5
+ //
6
+ // ========================================================================
7
+
8
+
9
+ // Variables
10
+ // ========================================================================
11
+
12
+ @floating-shadow-height: 30px;
13
+ @floating-shadow-bottom: -@floating-shadow-height;
14
+ @floating-shadow-border-radius: 100%;
15
+ @floating-shadow-background: #444;
16
+ @floating-shadow-blur: 20px;
17
+
18
+ /* ========================================================================
19
+ Component: Floating Shadow
20
+ ========================================================================== */
21
+
22
+ /*
23
+ * 1. Set position.
24
+ * 2. Set style
25
+ * 3. Fix shadow being clipped in Safari if container is animated
26
+ */
27
+
28
+ .uk-floating-shadow {
29
+ display: inline-block;
30
+ position: relative;
31
+ z-index: 0;
32
+ max-width: 100%;
33
+ vertical-align: middle;
34
+ }
35
+
36
+ .uk-floating-shadow::after {
37
+ content: "";
38
+ /* 1 */
39
+ position: absolute;
40
+ bottom: @floating-shadow-bottom;
41
+ left: 0;
42
+ right: 0;
43
+ z-index: -1;
44
+ /* 2 */
45
+ height: @floating-shadow-height;
46
+ border-radius: @floating-shadow-border-radius;
47
+ background: @floating-shadow-background;
48
+ filter: blur(@floating-shadow-blur);
49
+ /* 3 */
50
+ will-change: filter;
51
+ .hook-floating-shadow();
52
+ }
53
+
54
+
55
+ // Misc
56
+ // ========================================================================
57
+
58
+ .hook-floating-shadow-misc();
59
+
60
+
61
+ // Hooks
62
+ // ========================================================================
63
+
64
+ .hook-floating-shadow() {}
65
+ .hook-floating-shadow-misc() {}
@@ -684,7 +684,7 @@ select.uk-form-width-xsmall { width: (@form-width-xsmall + 25px); }
684
684
  * Stacked
685
685
  */
686
686
 
687
- .uk-form-stacked .uk-form-label {
687
+ .uk-form-stacked :where(.uk-form-label) {
688
688
  display: block;
689
689
  margin-bottom: @form-stacked-margin-bottom;
690
690
  .hook-form-stacked-label();
@@ -698,7 +698,7 @@ select.uk-form-width-xsmall { width: (@form-width-xsmall + 25px); }
698
698
  @media (max-width: @breakpoint-small-max) {
699
699
 
700
700
  /* Behave like `uk-form-stacked` */
701
- .uk-form-horizontal .uk-form-label {
701
+ .uk-form-horizontal :where(.uk-form-label) {
702
702
  display: block;
703
703
  margin-bottom: @form-stacked-margin-bottom;
704
704
  .hook-form-stacked-label();
@@ -709,17 +709,17 @@ select.uk-form-width-xsmall { width: (@form-width-xsmall + 25px); }
709
709
  /* Tablet landscape and bigger */
710
710
  @media (min-width: @breakpoint-medium) {
711
711
 
712
- .uk-form-horizontal .uk-form-label {
712
+ .uk-form-horizontal :where(.uk-form-label) {
713
713
  width: @form-horizontal-label-width;
714
714
  margin-top: @form-horizontal-label-margin-top;
715
715
  float: left;
716
716
  .hook-form-horizontal-label();
717
717
  }
718
718
 
719
- .uk-form-horizontal .uk-form-controls { margin-left: @form-horizontal-controls-margin-left; }
719
+ .uk-form-horizontal :where(.uk-form-controls) { margin-left: @form-horizontal-controls-margin-left; }
720
720
 
721
721
  /* Better vertical alignment if controls are checkboxes and radio buttons with text */
722
- .uk-form-horizontal .uk-form-controls-text { padding-top: @form-horizontal-controls-text-padding-top; }
722
+ .uk-form-horizontal :where(.uk-form-controls-text) { padding-top: @form-horizontal-controls-text-padding-top; }
723
723
 
724
724
  }
725
725
 
@@ -19,6 +19,7 @@
19
19
  // Sub-modifier: `uk-grid-item-match`
20
20
  //
21
21
  // States: `uk-first-column`
22
+ // `uk-first-row`
22
23
  //
23
24
  // ========================================================================
24
25
 
@@ -80,32 +81,32 @@
80
81
  .uk-grid > * > :last-child { margin-bottom: 0; }
81
82
 
82
83
 
83
- /* Gutter
84
+ /* Gap
84
85
  ========================================================================== */
85
86
 
86
87
  /*
87
88
  * Default
88
89
  */
89
90
 
90
- /* Horizontal */
91
91
  .uk-grid { margin-left: -@grid-gutter-horizontal; }
92
92
  .uk-grid > * { padding-left: @grid-gutter-horizontal; }
93
93
 
94
- /* Vertical */
95
- .uk-grid + .uk-grid,
96
- .uk-grid > .uk-grid-margin,
94
+ .uk-grid { row-gap: @grid-gutter-vertical; }
95
+
96
+ /* Margin */
97
+ .uk-grid + :where(.uk-grid),
97
98
  * + .uk-grid-margin { margin-top: @grid-gutter-vertical; }
98
99
 
99
100
  /* Desktop and bigger */
100
101
  @media (min-width: @breakpoint-large) {
101
102
 
102
- /* Horizontal */
103
103
  .uk-grid { margin-left: -@grid-gutter-horizontal-l; }
104
104
  .uk-grid > * { padding-left: @grid-gutter-horizontal-l; }
105
105
 
106
- /* Vertical */
107
- .uk-grid + .uk-grid,
108
- .uk-grid > .uk-grid-margin,
106
+ .uk-grid { row-gap: @grid-gutter-vertical-l; }
107
+
108
+ /* Margin */
109
+ .uk-grid + :where(.uk-grid),
109
110
  * + .uk-grid-margin { margin-top: @grid-gutter-vertical-l; }
110
111
 
111
112
  }
@@ -114,67 +115,63 @@
114
115
  * Small
115
116
  */
116
117
 
117
- /* Horizontal */
118
118
  .uk-grid-small,
119
119
  .uk-grid-column-small { margin-left: -@grid-small-gutter-horizontal; }
120
120
  .uk-grid-small > *,
121
121
  .uk-grid-column-small > * { padding-left: @grid-small-gutter-horizontal; }
122
122
 
123
- /* Vertical */
124
- .uk-grid + .uk-grid-small,
125
- .uk-grid + .uk-grid-row-small,
126
- .uk-grid-small > .uk-grid-margin,
127
- .uk-grid-row-small > .uk-grid-margin,
123
+ .uk-grid-small,
124
+ .uk-grid-row-small { row-gap: @grid-small-gutter-vertical; }
125
+
126
+ /* Margin */
127
+ .uk-grid + :where(.uk-grid-small, .uk-grid-row-small),
128
128
  * + .uk-grid-margin-small { margin-top: @grid-small-gutter-vertical; }
129
129
 
130
130
  /*
131
131
  * Medium
132
132
  */
133
133
 
134
- /* Horizontal */
135
134
  .uk-grid-medium,
136
135
  .uk-grid-column-medium { margin-left: -@grid-medium-gutter-horizontal; }
137
136
  .uk-grid-medium > *,
138
137
  .uk-grid-column-medium > * { padding-left: @grid-medium-gutter-horizontal; }
139
138
 
140
- /* Vertical */
141
- .uk-grid + .uk-grid-medium,
142
- .uk-grid + .uk-grid-row-medium,
143
- .uk-grid-medium > .uk-grid-margin,
144
- .uk-grid-row-medium > .uk-grid-margin,
139
+ .uk-grid-medium,
140
+ .uk-grid-row-medium { row-gap: @grid-medium-gutter-vertical; }
141
+
142
+ /* Margin */
143
+ .uk-grid + :where(.uk-grid-medium, .uk-grid-row-medium),
145
144
  * + .uk-grid-margin-medium { margin-top: @grid-medium-gutter-vertical; }
146
145
 
147
146
  /*
148
147
  * Large
149
148
  */
150
149
 
151
- /* Horizontal */
152
150
  .uk-grid-large,
153
151
  .uk-grid-column-large { margin-left: -@grid-large-gutter-horizontal; }
154
152
  .uk-grid-large > *,
155
153
  .uk-grid-column-large > * { padding-left: @grid-large-gutter-horizontal; }
156
154
 
157
- /* Vertical */
158
- .uk-grid + .uk-grid-large,
159
- .uk-grid + .uk-grid-row-large,
160
- .uk-grid-large > .uk-grid-margin,
161
- .uk-grid-row-large > .uk-grid-margin,
155
+ .uk-grid-large,
156
+ .uk-grid-row-large { row-gap: @grid-large-gutter-vertical; }
157
+
158
+ /* Margin */
159
+ .uk-grid + :where(.uk-grid-large, .uk-grid-row-large),
162
160
  * + .uk-grid-margin-large { margin-top: @grid-large-gutter-vertical; }
163
161
 
164
162
  /* Desktop and bigger */
165
163
  @media (min-width: @breakpoint-large) {
166
164
 
167
- /* Horizontal */
168
165
  .uk-grid-large,
169
166
  .uk-grid-column-large { margin-left: -@grid-large-gutter-horizontal-l; }
170
167
  .uk-grid-large > *,
171
168
  .uk-grid-column-large > * { padding-left: @grid-large-gutter-horizontal-l; }
172
169
 
173
- /* Vertical */
174
- .uk-grid + .uk-grid-large,
175
- .uk-grid + .uk-grid-row-large,
176
- .uk-grid-large > .uk-grid-margin,
177
- .uk-grid-row-large > .uk-grid-margin,
170
+ .uk-grid-large,
171
+ .uk-grid-row-large { row-gap: @grid-large-gutter-vertical-l; }
172
+
173
+ /* Margin */
174
+ .uk-grid + :where(.uk-grid-large, .uk-grid-row-large),
178
175
  * + .uk-grid-margin-large { margin-top: @grid-large-gutter-vertical-l; }
179
176
 
180
177
  }
@@ -183,17 +180,16 @@
183
180
  * Collapse
184
181
  */
185
182
 
186
- /* Horizontal */
187
183
  .uk-grid-collapse,
188
184
  .uk-grid-column-collapse { margin-left: 0; }
189
185
  .uk-grid-collapse > *,
190
186
  .uk-grid-column-collapse > * { padding-left: 0; }
191
187
 
192
- /* Vertical */
193
- .uk-grid + .uk-grid-collapse,
194
- .uk-grid + .uk-grid-row-collapse,
195
- .uk-grid-collapse > .uk-grid-margin,
196
- .uk-grid-row-collapse > .uk-grid-margin { margin-top: 0; }
188
+ .uk-grid-collapse,
189
+ .uk-grid-row-collapse { row-gap: 0; }
190
+
191
+ /* Margin */
192
+ .uk-grid + :where(.uk-grid-collapse, .uk-grid-row-collapse) { margin-top: 0; }
197
193
 
198
194
 
199
195
  /* Divider
@@ -201,6 +197,7 @@
201
197
 
202
198
  .uk-grid-divider > * { position: relative; }
203
199
 
200
+ /* Horizontal */
204
201
  .uk-grid-divider > :not(.uk-first-column)::before {
205
202
  content: "";
206
203
  position: absolute;
@@ -211,7 +208,7 @@
211
208
  }
212
209
 
213
210
  /* Vertical */
214
- .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before {
211
+ .uk-grid-divider.uk-grid-stack > :not(.uk-first-row)::before {
215
212
  content: "";
216
213
  position: absolute;
217
214
  left: 0;
@@ -231,9 +228,9 @@
231
228
  .uk-grid-divider > :not(.uk-first-column)::before { left: @grid-gutter-horizontal; }
232
229
 
233
230
  /* Vertical */
234
- .uk-grid-divider.uk-grid-stack > .uk-grid-margin { margin-top: (@grid-gutter-vertical * 2); }
231
+ .uk-grid-divider.uk-grid-stack { row-gap: (@grid-gutter-vertical * 2); }
235
232
 
236
- .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before {
233
+ .uk-grid-divider.uk-grid-stack > :not(.uk-first-row)::before {
237
234
  top: -@grid-gutter-vertical;
238
235
  left: (@grid-gutter-horizontal * 2);
239
236
  }
@@ -248,9 +245,9 @@
248
245
  .uk-grid-divider > :not(.uk-first-column)::before { left: @grid-gutter-horizontal-l; }
249
246
 
250
247
  /* Vertical */
251
- .uk-grid-divider.uk-grid-stack > .uk-grid-margin { margin-top: (@grid-gutter-vertical-l * 2); }
248
+ .uk-grid-divider.uk-grid-stack { row-gap: (@grid-gutter-vertical-l * 2); }
252
249
 
253
- .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before {
250
+ .uk-grid-divider.uk-grid-stack > :not(.uk-first-row)::before {
254
251
  top: -@grid-gutter-vertical-l;
255
252
  left: (@grid-gutter-horizontal-l * 2);
256
253
  }
@@ -271,16 +268,15 @@
271
268
  .uk-grid-divider.uk-grid-column-small > :not(.uk-first-column)::before { left: @grid-small-gutter-horizontal; }
272
269
 
273
270
  /* Vertical */
274
- .uk-grid-divider.uk-grid-small.uk-grid-stack > .uk-grid-margin,
275
- .uk-grid-divider.uk-grid-row-small.uk-grid-stack > .uk-grid-margin { margin-top: (@grid-small-gutter-vertical * 2); }
271
+ .uk-grid-divider.uk-grid-stack:where(.uk-grid-small, .uk-grid-row-small) { row-gap: (@grid-small-gutter-vertical * 2); }
276
272
 
277
- .uk-grid-divider.uk-grid-small.uk-grid-stack > .uk-grid-margin::before {
273
+ .uk-grid-divider.uk-grid-stack.uk-grid-small > :not(.uk-first-row)::before {
278
274
  top: -@grid-small-gutter-vertical;
279
275
  left: (@grid-small-gutter-horizontal * 2);
280
276
  }
281
277
 
282
- .uk-grid-divider.uk-grid-row-small.uk-grid-stack > .uk-grid-margin::before { top: -@grid-small-gutter-vertical; }
283
- .uk-grid-divider.uk-grid-column-small.uk-grid-stack > .uk-grid-margin::before { left: (@grid-small-gutter-horizontal * 2); }
278
+ .uk-grid-divider.uk-grid-stack.uk-grid-row-small > :not(.uk-first-row)::before { top: -@grid-small-gutter-vertical; }
279
+ .uk-grid-divider.uk-grid-stack.uk-grid-column-small > :not(.uk-first-row)::before { left: (@grid-small-gutter-horizontal * 2); }
284
280
 
285
281
  /*
286
282
  * Medium
@@ -296,16 +292,15 @@
296
292
  .uk-grid-divider.uk-grid-column-medium > :not(.uk-first-column)::before { left: @grid-medium-gutter-horizontal; }
297
293
 
298
294
  /* Vertical */
299
- .uk-grid-divider.uk-grid-medium.uk-grid-stack > .uk-grid-margin,
300
- .uk-grid-divider.uk-grid-row-medium.uk-grid-stack > .uk-grid-margin { margin-top: (@grid-medium-gutter-vertical * 2); }
295
+ .uk-grid-divider.uk-grid-stack:where(.uk-grid-medium, .uk-grid-row-medium) { row-gap: (@grid-medium-gutter-vertical * 2); }
301
296
 
302
- .uk-grid-divider.uk-grid-medium.uk-grid-stack > .uk-grid-margin::before {
297
+ .uk-grid-divider.uk-grid-stack.uk-grid-medium > :not(.uk-first-row)::before {
303
298
  top: -@grid-medium-gutter-vertical;
304
299
  left: (@grid-medium-gutter-horizontal * 2);
305
300
  }
306
301
 
307
- .uk-grid-divider.uk-grid-row-medium.uk-grid-stack > .uk-grid-margin::before { top: -@grid-medium-gutter-vertical; }
308
- .uk-grid-divider.uk-grid-column-medium.uk-grid-stack > .uk-grid-margin::before { left: (@grid-medium-gutter-horizontal * 2); }
302
+ .uk-grid-divider.uk-grid-stack.uk-grid-row-medium > :not(.uk-first-row)::before { top: -@grid-medium-gutter-vertical; }
303
+ .uk-grid-divider.uk-grid-stack.uk-grid-column-medium > :not(.uk-first-row)::before { left: (@grid-medium-gutter-horizontal * 2); }
309
304
 
310
305
  /*
311
306
  * Large
@@ -321,16 +316,15 @@
321
316
  .uk-grid-divider.uk-grid-column-large > :not(.uk-first-column)::before { left: @grid-large-gutter-horizontal; }
322
317
 
323
318
  /* Vertical */
324
- .uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin,
325
- .uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin { margin-top: (@grid-large-gutter-vertical * 2); }
319
+ .uk-grid-divider.uk-grid-stack:where(.uk-grid-large, .uk-grid-row-large) { row-gap: (@grid-large-gutter-vertical * 2); }
326
320
 
327
- .uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin::before {
321
+ .uk-grid-divider.uk-grid-stack.uk-grid-large > :not(.uk-first-row)::before {
328
322
  top: -@grid-large-gutter-vertical;
329
323
  left: (@grid-large-gutter-horizontal * 2);
330
324
  }
331
325
 
332
- .uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin::before { top: -@grid-large-gutter-vertical; }
333
- .uk-grid-divider.uk-grid-column-large.uk-grid-stack > .uk-grid-margin::before { left: (@grid-large-gutter-horizontal * 2); }
326
+ .uk-grid-divider.uk-grid-stack.uk-grid-row-large > :not(.uk-first-row)::before { top: -@grid-large-gutter-vertical; }
327
+ .uk-grid-divider.uk-grid-stack.uk-grid-column-large > :not(.uk-first-row)::before { left: (@grid-large-gutter-horizontal * 2); }
334
328
 
335
329
  /* Desktop and bigger */
336
330
  @media (min-width: @breakpoint-large) {
@@ -345,16 +339,15 @@
345
339
  .uk-grid-divider.uk-grid-column-large > :not(.uk-first-column)::before { left: @grid-large-gutter-horizontal-l; }
346
340
 
347
341
  /* Vertical */
348
- .uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin,
349
- .uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin { margin-top: (@grid-large-gutter-vertical-l * 2); }
342
+ .uk-grid-divider.uk-grid-stack:where(.uk-grid-large, .uk-grid-row-large) { row-gap: (@grid-large-gutter-vertical-l * 2); }
350
343
 
351
- .uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin::before {
344
+ .uk-grid-divider.uk-grid-stack.uk-grid-large > :not(.uk-first-row)::before {
352
345
  top: -@grid-large-gutter-vertical-l;
353
346
  left: (@grid-large-gutter-horizontal-l * 2);
354
347
  }
355
348
 
356
- .uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin::before { top: -@grid-large-gutter-vertical-l; }
357
- .uk-grid-divider.uk-grid-column-large.uk-grid-stack > .uk-grid-margin::before { left: (@grid-large-gutter-horizontal-l * 2); }
349
+ .uk-grid-divider.uk-grid-stack.uk-grid-row-large > :not(.uk-first-row)::before { top: -@grid-large-gutter-vertical-l; }
350
+ .uk-grid-divider.uk-grid-stack.uk-grid-column-large > :not(.uk-first-row)::before { left: (@grid-large-gutter-horizontal-l * 2); }
358
351
 
359
352
  }
360
353