Как масштабировать анимацию css до соответствующего размера экрана - PullRequest
1 голос
/ 06 августа 2020

Я пытаюсь сделать анимацию для веб-страницы, над которой сейчас работаю. Я хочу, чтобы анимация мяча начиналась с нижнего края экрана, go до середины, а затем расширялась на всю страницу. У меня проблема с расширяющейся частью. Когда он расширяется, поскольку я использую transform: scale, он расширяется за пределы ширины и высоты области просмотра, заставляя меня прокручивать. Как можно сделать так, чтобы он поместился во вьюпорте без необходимости прокрутки. Я попытался поместить его в контейнер и поставить overflow: hidden, но, похоже, это не работает. Вот мой код

    <!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="ballcopy.css">
        <meta name="veiwport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <main>
             <div class="ball"></div>
        </main>
    </body>
</html>
    *, *::after, *::before {box-sizing: inherit;}

html{
    box-sizing: border-box;
}

body{
    margin: 0; 
    padding: 0;
}

.ball{
    background-color: #eb8c28; 
    width: 100px;
    height: 100px;
    border-radius: 0%;
    position: absolute;
    bottom: 0%;
    left: 50%;
    animation: rise;
    animation-duration: 2s;
    animation-iteration-count: 1;
    animation-fill-mode: forwards;
}

@keyframes rise{
    0%{
        border-radius: 50%;
    }
    50%{
        border-radius: 50%;
        transform:translateY(-400px);
    }

    75%{
        border-radius: 40%;
    }

    80%{
        border-radius: 30%;
    }

    90%{
        border-radius:20%;
    }
    100%{
        transform: scale(20,20);
    }
}
```

Ответы [ 2 ]

1 голос
/ 06 августа 2020
body{
  height: 100vh;
  width: 100vw;
  overflow: hidden;
}

это исправляет, чтобы ваша анимация не переполнялась и не заставляла вас прокручиваться.

0 голосов
/ 06 августа 2020

Чтобы overflow: hidden работал на main, вам нужно установить position: relative и height:

*,
*::after,
*::before {
  box-sizing: inherit;
}

html {
  box-sizing: border-box;
}

body {
  margin: 0;
  padding: 0;
}

main {
  position: relative;
  height: 100vh;
  overflow: hidden;
}

.ball {
  background-color: #eb8c28;
  width: 100px;
  height: 100px;
  border-radius: 0%;
  position: absolute;
  bottom: 0%;
  left: 50%;
  animation: rise;
  animation-duration: 2s;
  animation-iteration-count: 1;
  animation-fill-mode: forwards;
}

@keyframes rise {
  0% {
    border-radius: 50%;
  }
  50% {
    border-radius: 50%;
    transform: translateY(-100%);
  }
  75% {
    border-radius: 40%;
  }
  80% {
    border-radius: 30%;
  }
  90% {
    border-radius: 20%;
  }
  100% {
    transform: scale(20, 20);
  }
}
<main>
  <div class="ball"></div>
</main>

Или вы можете установить overflow: hidden на теле:

*,
*::after,
*::before {
  box-sizing: inherit;
}

html {
  box-sizing: border-box;
}

body {
  margin: 0;
  padding: 0;
  overflow: hidden;
}

.ball {
  background-color: #eb8c28;
  width: 100px;
  height: 100px;
  border-radius: 0%;
  position: absolute;
  bottom: 0%;
  left: 50%;
  animation: rise;
  animation-duration: 2s;
  animation-iteration-count: 1;
  animation-fill-mode: forwards;
}

@keyframes rise {
  0% {
    border-radius: 50%;
  }
  50% {
    border-radius: 50%;
    transform: translateY(-100%);
  }
  75% {
    border-radius: 40%;
  }
  80% {
    border-radius: 30%;
  }
  90% {
    border-radius: 20%;
  }
  100% {
    transform: scale(20, 20);
  }
}
<main>
  <div class="ball"></div>
</main>

Кроме того, рекомендуется установить transform: translateY в относительное значение, чтобы его можно было масштабировать для разных размеров экрана, т.е. transform: translateY(-100%)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...