Изменение анимации css с абсолютного на относительное

Я нашел эту волновую анимацию " https://codepen.io/tedmcdo/pen/PqxKXg" и хотел бы использовать ее над своим заголовком на своей странице, но проблема в том, что анимация написана для абсолютных значений, но я бы нужна относительная позиция, так как анимация должна оставаться в верхней части страницы.

Я пытался изменить тип позиции на относительный, но как бы я это ни делал, я ломаю анимацию, если кто-то может мне помочь, я буду счастлив ^^

Спасибо всем за ваше время.

вот CSS:

html, body { height: 100%; }
body {
  background:radial-gradient(ellipse at center, rgba(255,254,234,1) 0%, rgba(255,254,234,1) 35%, rgba(254,208,149,1) 100%);
  overflow: hidden;
}

.ocean { 
  height: 5%;
  width:100%;
  position:absolute;
  bottom:0;
  left:0;
  background: #015871;
}

.wave {
  background: url(http://tedmcdo.com/labs/wave.svg) repeat-x; 
  position: absolute;
  top: -198px;
  width: 6400px;
  height: 198px;
  animation: wave 7s cubic-bezier( 0.36, 0.45, 0.63, 0.53) infinite;
  transform: translate3d(0, 0, 0);
}

.wave:nth-of-type(2) {
  top: -175px;
  animation: wave 7s cubic-bezier( 0.36, 0.45, 0.63, 0.53) -.125s infinite, swell 7s ease -1.25s infinite;
  opacity: 1;
}

@keyframes wave {
  0% {
    margin-left: 0;
  }
  100% {
    margin-left: -1600px;
  }
}

@keyframes swell {
  0%, 100% {
    transform: translate3d(0,-25px,0);
  }
  50% {
    transform: translate3d(0,5px,0);
  }
}

3 ответа

Решение

Не совсем уверен, что вы подразумеваете под этим:

...need a relative position since the animation should stay on top of the page.

... но я отвлекся.

Добавить содержащий div с относительным позиционированием

<div class="oceanContainer">
    <div class="ocean">
        <div class="wave"></div>
        <div class="wave"></div>
    </div>
</div>

с CSS

.oceanContainer {
    position: relative;
    height: 100% /* you can play around with this for your header */
}

Возможно, вам придется настроить некоторые другие CSS, хотя

.ocean {
  height: 5%; /* as above, adjust to %, px, (r)em's to your liking */
  bottom: 0;
}

.wave {
  bottom: 0;    /* change top to bottom */
}

.wave:nth-of-type(2) {
  bottom: 0;    /* change top to bottom */
}

Поместите его в относительный div(или другой контейнер), и.ocean будет абсолютным в относительном контейнере. Это может решить вашу проблему.

<div style="position: relative">
   <div class="ocean" style="position: absolute"></div>
</div>

Спасибо вам, ребята,

с вашей помощью я получил это далеко: https://codepen.io/anon/pen/GEXvYX и это прекрасно работает!

Но я снова немного застрял ^^ Как бы я масштабировал его для смартфонов, не нарушая пропорции волны?

css здесь:

.the-body {
  height: 300px;
  width:200px;
}

.wave-conatainer {
  height: 194px;
  width: 100%;
  bottom: 0;
  position:absolute;
  padding-top: 15px;
  padding-bottom: 80px;
  overflow: hidden;
}

.ocean {
  height: 91px;
  width: 100%;
  position:absolute;
  bottom: 0;
  background-color: #015871;
}

.wave {
  height: 100%;
  width: 3000px;
  position:absolute;
  background: url(http://tedmcdo.com/labs/wave.svg) repeat-x; 
  animation: wave 32s cubic-bezier(0.53, 0.63,0.45, 0.36) infinite;
  transform: translate3d(0, 0, 0);
  opacity: 0.8;
}

.wave:nth-of-type(2) {
  animation: wave 32s cubic-bezier( 0.36, 0.45, 0.63, 0.53) -.125s infinite, swell 16s ease -1.25s infinite;
  opacity: 0.8;
}

@keyframes wave {
  0% {
    margin-left: 0;
  }
  100% {
    margin-left: -1600px;
  }
}

@keyframes swell {
  0%, 100% {
    transform: translate3d(0,-15px,0);
  }
  50% {
    transform: translate3d(0,10px,0);
  }
}
Другие вопросы по тегам