uikit 3.11.2-dev.07abf1392 → 3.11.2-dev.0a73abee2

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 (55) hide show
  1. package/CHANGELOG.md +7 -2
  2. package/dist/css/uikit-core-rtl.css +10 -1
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +10 -1
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +10 -1
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +10 -1
  9. package/dist/css/uikit.min.css +1 -1
  10. package/dist/js/components/countdown.js +1 -1
  11. package/dist/js/components/countdown.min.js +1 -1
  12. package/dist/js/components/filter.js +1 -1
  13. package/dist/js/components/filter.min.js +1 -1
  14. package/dist/js/components/lightbox-panel.js +1 -1
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +1 -1
  17. package/dist/js/components/lightbox.min.js +1 -1
  18. package/dist/js/components/notification.js +1 -1
  19. package/dist/js/components/notification.min.js +1 -1
  20. package/dist/js/components/parallax.js +6 -8
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +6 -8
  23. package/dist/js/components/slider-parallax.min.js +1 -1
  24. package/dist/js/components/slider.js +23 -32
  25. package/dist/js/components/slider.min.js +1 -1
  26. package/dist/js/components/slideshow-parallax.js +6 -8
  27. package/dist/js/components/slideshow-parallax.min.js +1 -1
  28. package/dist/js/components/slideshow.js +1 -1
  29. package/dist/js/components/slideshow.min.js +1 -1
  30. package/dist/js/components/sortable.js +1 -1
  31. package/dist/js/components/sortable.min.js +1 -1
  32. package/dist/js/components/tooltip.js +1 -1
  33. package/dist/js/components/tooltip.min.js +1 -1
  34. package/dist/js/components/upload.js +1 -1
  35. package/dist/js/components/upload.min.js +1 -1
  36. package/dist/js/uikit-core.js +82 -71
  37. package/dist/js/uikit-core.min.js +1 -1
  38. package/dist/js/uikit-icons.js +1 -1
  39. package/dist/js/uikit-icons.min.js +1 -1
  40. package/dist/js/uikit.js +109 -109
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +1 -1
  43. package/src/js/components/slider.js +22 -33
  44. package/src/js/core/height-viewport.js +3 -0
  45. package/src/js/core/img.js +3 -1
  46. package/src/js/core/sticky.js +50 -56
  47. package/src/js/core/toggle.js +1 -1
  48. package/src/js/mixin/parallax.js +6 -8
  49. package/src/js/util/ajax.js +6 -2
  50. package/src/js/util/dimensions.js +4 -4
  51. package/src/js/util/dom.js +15 -6
  52. package/src/less/components/height.less +3 -0
  53. package/src/scss/components/height.scss +3 -0
  54. package/tests/parallax.html +5 -5
  55. package/tests/sticky-parallax.html +9 -9
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "uikit",
3
3
  "title": "UIkit",
4
4
  "description": "UIkit is a lightweight and modular front-end framework for developing fast and powerful web interfaces.",
5
- "version": "3.11.2-dev.07abf1392",
5
+ "version": "3.11.2-dev.0a73abee2",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -12,9 +12,7 @@ import {
12
12
  dimensions,
13
13
  findIndex,
14
14
  includes,
15
- isEmpty,
16
15
  last,
17
- sortBy,
18
16
  toFloat,
19
17
  toggleClass,
20
18
  toNumber,
@@ -73,48 +71,39 @@ export default {
73
71
  return ~index ? index : this.length - 1;
74
72
  },
75
73
 
76
- sets({ sets }) {
77
- if (!sets) {
74
+ sets({ sets: enabled }) {
75
+ if (!enabled) {
78
76
  return;
79
77
  }
80
78
 
81
- const width = dimensions(this.list).width / (this.center ? 2 : 1);
82
-
83
79
  let left = 0;
84
- let leftCenter = width;
85
- let slideLeft = 0;
86
-
87
- sets = sortBy(this.slides, 'offsetLeft').reduce((sets, slide, i) => {
88
- const slideWidth = dimensions(slide).width;
89
- const slideRight = slideLeft + slideWidth;
80
+ const sets = [];
81
+ const width = dimensions(this.list).width;
82
+ for (let i in this.slides) {
83
+ const slideWidth = dimensions(this.slides[i]).width;
90
84
 
91
- if (slideRight > left) {
92
- if (!this.center && i > this.maxIndex) {
93
- i = this.maxIndex;
94
- }
85
+ if (left + slideWidth > width) {
86
+ left = 0;
87
+ }
95
88
 
96
- if (!includes(sets, i)) {
97
- const cmp = this.slides[i + 1];
98
- if (
99
- this.center &&
100
- cmp &&
101
- slideWidth < leftCenter - dimensions(cmp).width / 2
102
- ) {
103
- leftCenter -= slideWidth;
104
- } else {
105
- leftCenter = width;
106
- sets.push(i);
107
- left = slideLeft + width + (this.center ? slideWidth / 2 : 0);
108
- }
89
+ if (this.center) {
90
+ if (
91
+ left < width / 2 &&
92
+ left + slideWidth + dimensions(this.slides[+i + 1]).width / 2 > width / 2
93
+ ) {
94
+ sets.push(+i);
95
+ left = width / 2 - slideWidth / 2;
109
96
  }
97
+ } else if (left === 0) {
98
+ sets.push(Math.min(+i, this.maxIndex));
110
99
  }
111
100
 
112
- slideLeft += slideWidth;
101
+ left += slideWidth;
102
+ }
113
103
 
104
+ if (sets.length) {
114
105
  return sets;
115
- }, []);
116
-
117
- return !isEmpty(sets) && sets;
106
+ }
118
107
  },
119
108
 
120
109
  transitionOptions() {
@@ -1,3 +1,4 @@
1
+ import Class from '../mixin/class';
1
2
  import {
2
3
  boxModelAdjust,
3
4
  css,
@@ -14,6 +15,8 @@ import {
14
15
  } from 'uikit-util';
15
16
 
16
17
  export default {
18
+ mixins: [Class],
19
+
17
20
  props: {
18
21
  expand: Boolean,
19
22
  offsetTop: Boolean,
@@ -172,7 +172,9 @@ function getImageFromElement(el, src, sources) {
172
172
 
173
173
  wrapInPicture(img, sources);
174
174
  setSourceProps(el, img);
175
- img.onload = () => setSrcAttrs(el, img.currentSrc);
175
+ img.onload = () => {
176
+ setSrcAttrs(el, img.currentSrc);
177
+ };
176
178
  attr(img, 'src', src);
177
179
  return img;
178
180
  }
@@ -10,13 +10,12 @@ import {
10
10
  dimensions,
11
11
  fastdom,
12
12
  height as getHeight,
13
+ offset as getOffset,
13
14
  getScrollingElement,
14
15
  hasClass,
15
- isNumeric,
16
16
  isString,
17
17
  isVisible,
18
18
  noop,
19
- offset,
20
19
  offsetPosition,
21
20
  parent,
22
21
  query,
@@ -29,6 +28,7 @@ import {
29
28
  toPx,
30
29
  trigger,
31
30
  within,
31
+ intersectRect,
32
32
  } from 'uikit-util';
33
33
 
34
34
  export default {
@@ -67,21 +67,6 @@ export default {
67
67
  },
68
68
 
69
69
  computed: {
70
- position({ position }, $el) {
71
- return position === 'auto'
72
- ? (this.isFixed ? this.placeholder : $el).offsetHeight > getHeight(window)
73
- ? 'bottom'
74
- : 'top'
75
- : position;
76
- },
77
-
78
- offset({ offset }, $el) {
79
- if (this.position === 'bottom') {
80
- offset += '+100vh-100%';
81
- }
82
- return toPx(offset, 'height', $el);
83
- },
84
-
85
70
  selTarget({ selTarget }, $el) {
86
71
  return (selTarget && $(selTarget, $el)) || $el;
87
72
  },
@@ -134,34 +119,29 @@ export default {
134
119
  return window;
135
120
  },
136
121
 
122
+ filter() {
123
+ return this.targetOffset !== false;
124
+ },
125
+
137
126
  handler() {
138
- if (!(this.targetOffset !== false && location.hash && scrollTop(window) > 0)) {
127
+ if (!location.hash || scrollTop(window) === 0) {
139
128
  return;
140
129
  }
141
130
 
142
- const target = $(location.hash);
143
-
144
- if (target) {
145
- fastdom.read(() => {
146
- const { top } = offset(target);
147
- const elTop = offset(this.$el).top;
148
- const elHeight = this.$el.offsetHeight;
149
-
150
- if (
151
- this.isFixed &&
152
- elTop + elHeight >= top &&
153
- elTop <= top + target.offsetHeight
154
- ) {
155
- scrollTop(
156
- window,
157
- top -
158
- elHeight -
159
- (isNumeric(this.targetOffset) ? this.targetOffset : 0) -
160
- this.offset
161
- );
162
- }
163
- });
164
- }
131
+ fastdom.read(() => {
132
+ const targetOffset = getOffset($(location.hash));
133
+ const elOffset = getOffset(this.$el);
134
+
135
+ if (this.isFixed && intersectRect(targetOffset, elOffset)) {
136
+ scrollTop(
137
+ window,
138
+ targetOffset.top -
139
+ elOffset.height -
140
+ toPx(this.targetOffset, 'height') -
141
+ toPx(this.offset, 'height')
142
+ );
143
+ }
144
+ });
165
145
  },
166
146
  },
167
147
  ],
@@ -177,35 +157,49 @@ export default {
177
157
 
178
158
  const hide = this.isActive && types.has('resize');
179
159
  if (hide) {
160
+ css(this.selTarget, 'transition', '0s');
180
161
  this.hide();
181
162
  }
182
163
 
183
164
  if (!this.isActive) {
184
- height = this.$el.offsetHeight;
165
+ height = getOffset(this.$el).height;
185
166
  margin = css(this.$el, 'margin');
186
167
  }
187
168
 
188
169
  if (hide) {
189
170
  this.show();
171
+ fastdom.write(() => css(this.selTarget, 'transition', ''));
190
172
  }
191
173
 
192
- const overflow = Math.max(0, height + this.offset - getHeight(window));
193
-
194
174
  const referenceElement = this.isFixed ? this.placeholder : this.$el;
195
- const topOffset = offset(referenceElement).top;
196
- const offsetParentTop = offset(referenceElement.offsetParent).top;
175
+ const windowHeight = getHeight(window);
176
+
177
+ let position = this.position;
178
+ if (position === 'auto' && height > windowHeight) {
179
+ position = 'bottom';
180
+ }
181
+
182
+ let offset = toPx(this.offset, 'height', referenceElement);
183
+ if (position === 'bottom') {
184
+ offset += windowHeight - height;
185
+ }
186
+
187
+ const overflow = Math.max(0, height + offset - windowHeight);
188
+ const topOffset = getOffset(referenceElement).top;
189
+ const offsetParentTop = getOffset(referenceElement.offsetParent).top;
197
190
 
198
191
  const top = parseProp(this.top, this.$el, topOffset);
199
192
  const bottom = parseProp(this.bottom, this.$el, topOffset + height, true);
200
193
 
201
- const start = Math.max(top, topOffset) - this.offset;
194
+ const start = Math.max(top, topOffset) - offset;
202
195
  const end = bottom
203
- ? bottom - this.$el.offsetHeight + overflow - this.offset
204
- : getScrollingElement(this.$el).scrollHeight - getHeight(window);
196
+ ? bottom - getOffset(this.$el).height + overflow - offset
197
+ : getScrollingElement(this.$el).scrollHeight - windowHeight;
205
198
 
206
199
  return {
207
200
  start,
208
201
  end,
202
+ offset,
209
203
  overflow,
210
204
  topOffset,
211
205
  offsetParentTop,
@@ -322,7 +316,7 @@ export default {
322
316
  }
323
317
  } else if (this.isFixed) {
324
318
  this.update();
325
- } else if (this.animation) {
319
+ } else if (this.animation && scroll > topOffset) {
326
320
  Animation.cancel(this.$el);
327
321
  this.show();
328
322
  Animation.in(this.$el, this.animation).catch(noop);
@@ -350,33 +344,33 @@ export default {
350
344
  },
351
345
 
352
346
  update() {
353
- const {
347
+ let {
354
348
  width,
355
349
  scroll = 0,
356
350
  overflow,
357
351
  overflowScroll = 0,
358
352
  start,
359
353
  end,
354
+ offset,
360
355
  topOffset,
361
356
  height,
362
357
  offsetParentTop,
363
358
  } = this._data;
364
359
  const active = start !== 0 || scroll > start;
365
- let top = this.offset;
366
360
  let position = 'fixed';
367
361
 
368
362
  if (scroll > end) {
369
- top = end + this.offset - offsetParentTop;
363
+ offset += end - offsetParentTop;
370
364
  position = 'absolute';
371
365
  }
372
366
 
373
367
  if (overflow) {
374
- top -= overflowScroll;
368
+ offset -= overflowScroll;
375
369
  }
376
370
 
377
371
  css(this.$el, {
378
372
  position,
379
- top: `${top}px`,
373
+ top: `${offset}px`,
380
374
  width,
381
375
  });
382
376
 
@@ -397,7 +391,7 @@ function parseProp(value, el, propOffset, padding) {
397
391
  } else {
398
392
  const refElement = value === true ? parent(el) : query(value, el);
399
393
  return (
400
- offset(refElement).bottom -
394
+ getOffset(refElement).bottom -
401
395
  (padding && refElement && within(el, refElement)
402
396
  ? toFloat(css(refElement, 'paddingBottom'))
403
397
  : 0)
@@ -135,7 +135,7 @@ export default {
135
135
  name: 'keydown',
136
136
 
137
137
  filter() {
138
- return includes(this.mode, 'click') && isTag(this.$el, 'input');
138
+ return includes(this.mode, 'click') && !isTag(this.$el, 'input');
139
139
  },
140
140
 
141
141
  handler(e) {
@@ -68,13 +68,11 @@ export default {
68
68
  },
69
69
 
70
70
  getCss(percent) {
71
- return keys(this.props).reduce(
72
- (css, prop) => {
73
- this.props[prop](css, percent);
74
- return css;
75
- },
76
- { transform: '', filter: '' }
77
- );
71
+ const css = { transform: '', filter: '' };
72
+ for (const prop in this.props) {
73
+ this.props[prop](css, percent);
74
+ }
75
+ return css;
78
76
  },
79
77
  },
80
78
  };
@@ -328,7 +326,7 @@ function getValue(stops, percent) {
328
326
  return isNumber(start) ? start + Math.abs(start - end) * p * (start < end ? 1 : -1) : +end;
329
327
  }
330
328
 
331
- const unitRe = /^[\d-]+([^\s]+)/;
329
+ const unitRe = /^-?\d+([^\s]*)/;
332
330
  function getUnit(stops, defaultUnit) {
333
331
  for (const stop of stops) {
334
332
  const match = stop.match?.(unitRe);
@@ -60,8 +60,12 @@ export function getImage(src, srcset, sizes) {
60
60
  return new Promise((resolve, reject) => {
61
61
  const img = new Image();
62
62
 
63
- img.onerror = (e) => reject(e);
64
- img.onload = () => resolve(img);
63
+ img.onerror = (e) => {
64
+ reject(e);
65
+ };
66
+ img.onload = () => {
67
+ resolve(img);
68
+ };
65
69
 
66
70
  sizes && (img.sizes = sizes);
67
71
  srcset && (img.srcset = srcset);
@@ -37,8 +37,8 @@ export function offset(element, coordinates) {
37
37
  const currentOffset = dimensions(element);
38
38
 
39
39
  if (element) {
40
- const { pageYOffset, pageXOffset } = toWindow(element);
41
- const offsetBy = { height: pageYOffset, width: pageXOffset };
40
+ const { scrollY, scrollX } = toWindow(element);
41
+ const offsetBy = { height: scrollY, width: scrollX };
42
42
 
43
43
  for (const dir in dirs) {
44
44
  for (const i in dirs[dir]) {
@@ -104,8 +104,8 @@ export function offsetPosition(element) {
104
104
 
105
105
  if (css(element, 'position') === 'fixed') {
106
106
  const win = toWindow(element);
107
- offset[0] += win.pageYOffset;
108
- offset[1] += win.pageXOffset;
107
+ offset[0] += win.scrollY;
108
+ offset[1] += win.scrollX;
109
109
  return offset;
110
110
  }
111
111
  } while ((element = element.offsetParent));
@@ -73,14 +73,23 @@ export function unwrap(element) {
73
73
  .forEach((parent) => parent.replaceWith(...parent.childNodes));
74
74
  }
75
75
 
76
+ const fragmentRe = /^\s*<(\w+|!)[^>]*>/;
77
+ const singleTagRe = /^<(\w+)\s*\/?>(?:<\/\1>)?$/;
78
+
76
79
  export function fragment(html) {
77
- const template = document.createElement('template');
78
- template.innerHTML = html.trim();
79
- const nodes = toNodes(template.content.childNodes);
80
- for (const node of nodes) {
81
- document.adoptNode(node);
80
+ const matches = singleTagRe.exec(html);
81
+ if (matches) {
82
+ return document.createElement(matches[1]);
83
+ }
84
+
85
+ const container = document.createElement('div');
86
+ if (fragmentRe.test(html)) {
87
+ container.insertAdjacentHTML('beforeend', html.trim());
88
+ } else {
89
+ container.textContent = html;
82
90
  }
83
- return unwrapSingle(nodes);
91
+
92
+ return unwrapSingle(container.childNodes);
84
93
  }
85
94
 
86
95
  function unwrapSingle(nodes) {
@@ -31,6 +31,9 @@
31
31
  */
32
32
 
33
33
  .uk-height-viewport { min-height: 100vh; }
34
+ .uk-height-viewport-2 { min-height: 200vh; }
35
+ .uk-height-viewport-3 { min-height: 300vh; }
36
+ .uk-height-viewport-4 { min-height: 400vh; }
34
37
 
35
38
  /*
36
39
  * Pixel
@@ -31,6 +31,9 @@ $height-large-height: 450px !default;
31
31
  */
32
32
 
33
33
  .uk-height-viewport { min-height: 100vh; }
34
+ .uk-height-viewport-2 { min-height: 200vh; }
35
+ .uk-height-viewport-3 { min-height: 300vh; }
36
+ .uk-height-viewport-4 { min-height: 400vh; }
34
37
 
35
38
  /*
36
39
  * Pixel
@@ -55,10 +55,10 @@
55
55
 
56
56
  <h2>Stop Positions</h2>
57
57
 
58
- <div id="test-stop-positions" class="uk-height-large uk-background-cover uk-margin uk-overflow-hidden uk-light uk-flex" style="background-image: url('images/dark.jpg');" uk-parallax="bgx: 0,200,0,200">
58
+ <div id="test-stop-positions" class="uk-height-large uk-background-cover uk-margin uk-overflow-hidden uk-light uk-flex" style="background-image: url('images/dark.jpg');" uk-parallax="bgx: 0,50 50%, 200">
59
59
  <div class="uk-width-1-2@m uk-text-center uk-margin-auto uk-margin-auto-vertical">
60
- <h1 uk-parallax="x: -200,200,-200,200; scale: 2,1 10%,2 90%,1;">Headline</h1>
61
- <p uk-parallax="x: 200,-200,200,-200; scale: 1,0 20%,1 50%,0 80%,1">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
60
+ <h1 uk-parallax="x: -200,200 20%,-200 80%,200; scale: 1,1 50%,2;">Headline</h1>
61
+ <p uk-parallax="x: 200,-200 20%,200 80%,-200; scale: 1,1 50%,2">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
62
62
  </div>
63
63
  </div>
64
64
 
@@ -77,8 +77,8 @@
77
77
  <div class="uk-grid uk-margin-auto uk-flex-inline">
78
78
  <div><div class="uk-card uk-card-default uk-padding-small" uk-parallax="target: #test-start-end; y: 396; easing: 0;">0 / 0</div></div>
79
79
  <div><div class="uk-card uk-card-default uk-padding-small" uk-parallax="target: #test-start-end; start: 100%; end: 100%; y: 396; easing: 0;">100% / 100%</div></div>
80
- <div><div class="uk-card uk-card-default uk-padding-small" uk-parallax="target: #test-start-end; start: 40vh; end: 40vh; y: 396; easing: 0;">40vh / 40vh</div></div>
81
- <div><div class="uk-card uk-card-default uk-padding-small" uk-parallax="target: #test-start-end; start: 100% + 50; end: 100% + 50; y: 396; easing: 0;">100% + 50 / 100% + 50</div></div>
80
+ <div><div class="uk-card uk-card-default uk-padding-small" uk-parallax="target: #test-start-end; start: 30vh; end: 30vh; y: 396; easing: 0;">30vh / 30vh</div></div>
81
+ <div><div class="uk-card uk-card-default uk-padding-small" uk-parallax="target: #test-start-end; start: 100% + 100; end: 100% + 100; y: 396; easing: 0;">100% + 100 / 100% + 100</div></div>
82
82
  </div>
83
83
  </div>
84
84
 
@@ -21,8 +21,8 @@
21
21
  <div class="uk-section uk-section-default">
22
22
  <div class="uk-container">
23
23
 
24
- <div id="js-sticky-parallax-container" class="uk-position-relative uk-background-muted uk-text-center" style="height: 300vh">
25
- <div class="uk-flex uk-flex-center uk-flex-middle" style="height: 100vh;" uk-sticky="bottom: #js-sticky-parallax-container">
24
+ <div id="js-sticky-parallax-container" class="uk-position-relative uk-background-muted uk-text-center uk-height-viewport-3">
25
+ <div class="uk-flex uk-flex-center uk-flex-middle uk-height-viewport" uk-sticky="bottom: #js-sticky-parallax-container">
26
26
  <div>
27
27
 
28
28
  <img class="uk-position-relative uk-position-z-index" src="images/size-v.jpg" width="400" height="800" alt="" style="max-width: 50vw" uk-parallax="target: #js-sticky-parallax-container; y: 0,-250; easing: -1; start: 100vh; end: 100vh;">
@@ -118,7 +118,7 @@
118
118
  </div>
119
119
  <div>
120
120
 
121
- <div class="uk-background-muted uk-text-center" style="height: 100vh" uk-sticky="bottom: #js-sticky-parallax-viewport">
121
+ <div class="uk-background-muted uk-text-center uk-height-viewport" uk-sticky="bottom: #js-sticky-parallax-viewport">
122
122
 
123
123
  <div uk-parallax="target: #js-sticky-parallax-viewport; start: 100vh; end: 100vh; y: 10vh, 80vh; easing: 0">
124
124
 
@@ -146,12 +146,12 @@
146
146
 
147
147
  <div class="uk-section uk-section-default">
148
148
 
149
- <div id="js-sticky-parallax-images" style="height: 250vh" uk-grid>
149
+ <div id="js-sticky-parallax-images" style="min-height: 250vh" uk-grid>
150
150
  <div class="uk-width-expand">
151
151
 
152
- <div class="uk-background-muted" style="height: 100vh;" uk-sticky="bottom: #js-sticky-parallax-images">
152
+ <div class="uk-background-muted uk-height-viewport" uk-sticky="bottom: #js-sticky-parallax-images">
153
153
  <div uk-parallax="target: #js-sticky-parallax-images; y: 55vh, 45vh;">
154
- <img class="uk-position-center-left" src="images/photo.jpg" width="1800" height="1200" alt="" uk-parallax="target: #js-sticky-parallax-images; start: 125vh; end: 100% + 100vh - 185vh; opacity: 1,1 99%,0; easing:0">
154
+ <img class="uk-position-center-left" src="images/photo.jpg" width="1800" height="1200" alt="" uk-parallax="target: #js-sticky-parallax-images; start: 125vh; end: 100% + 100vh - 185vh; opacity: 1,1,0; easing:0">
155
155
  <img class="uk-position-center-left" src="images/photo2.jpg" width="1800" height="1200" alt="" uk-parallax="target: #js-sticky-parallax-images; start: 175vh; end: 100% + 100vh - 235vh; opacity: 0,1 16.666%,1 99%,0; easing:0">
156
156
  <img class="uk-position-center-left" src="images/photo3.jpg" width="1800" height="1200" alt="" uk-parallax="target: #js-sticky-parallax-images; start: 225vh; end: 100% + 100vh - 275vh; opacity: 0,1 20%,1; easing:0">
157
157
  </div>
@@ -206,10 +206,10 @@
206
206
 
207
207
  <div class="uk-section uk-section-default">
208
208
 
209
- <div id="js-sticky-parallax-images-all" style="height: 250vh" uk-grid>
209
+ <div id="js-sticky-parallax-images-all" style="min-height: 250vh" uk-grid>
210
210
  <div class="uk-width-expand">
211
211
 
212
- <div class="uk-background-muted" style="height: 100vh;" uk-sticky="bottom: #js-sticky-parallax-images-all">
212
+ <div class="uk-background-muted uk-height-viewport" uk-sticky="bottom: #js-sticky-parallax-images-all">
213
213
  <div uk-parallax="target: #js-sticky-parallax-images-all; y: 55vh, 45vh;">
214
214
  <img class="uk-position-center-left" src="images/photo.jpg" width="1800" height="1200" alt="" uk-parallax="target: #js-sticky-parallax-images-all; start: 100vh; end: 100% + 100vh - 160vh; opacity: 1,1 99%,0; easing:0">
215
215
  <img class="uk-position-center-left" src="images/photo2.jpg" width="1800" height="1200" alt="" uk-parallax="target: #js-sticky-parallax-images-all; start: 150vh; end: 100% + 100vh - 210vh; opacity: 0,1 16.666%,1 99%,0; easing:0">
@@ -226,7 +226,7 @@
226
226
  </div>
227
227
  <div class="uk-width-expand">
228
228
 
229
- <div style="height: 100vh;" uk-sticky="bottom: #js-sticky-parallax-images-all">
229
+ <div class="uk-height-viewport" uk-sticky="bottom: #js-sticky-parallax-images-all">
230
230
  <div uk-parallax="target: #js-sticky-parallax-images-all; y: 55vh, 45vh;">
231
231
 
232
232
  <div class="uk-position-center-left" uk-parallax="target: #js-sticky-parallax-images-all; start: 100vh; end: 100% + 100vh - 150vh; opacity: 0,1 20%,1 80%,0">