动画像它从右向左移动的图像

时间:2016-07-05 07:43:06

标签: javascript css css-animations

我试图动画一个应该像云一样从右向左移动的地板,它可以工作,但问题是它在容器外溢出。我怎样才能防止这种情况发生?对不起,我是css动画的新手。提前谢谢。

以下是我提出的小提琴:点击here



.container {
    width: 50%;
    margin: 0 auto;
    text-align: center;
}

#clouds{
    padding: 100px 0;
    background: #3598dc;
    background: -webkit-linear-gradient(top, #3598dc 0%, #fff 100%);
    background: -linear-gradient(top, #3598dc 0%, #fff 100%);
    background: -moz-linear-gradient(top, #3598dc 0%, #fff 100%);
}

.cloud {
    width: 200px; height: 60px;
    background: #fff;
    border-radius: 200px;
    -moz-border-radius: 200px;
    -webkit-border-radius: 200px;
    position: relative;
}

.cloud:before, .cloud:after {
    content: '';
    position: absolute;
    background: #fff;
    width: 100px; height: 80px;
    position: absolute; top: -15px; left: 10px;

    border-radius: 100px;
    -moz-border-radius: 100px;
    -webkit-border-radius: 100px;
    -webkit-transform: rotate(30deg);
    transform: rotate(30deg);
    -moz-transform: rotate(30deg);
}

.cloud:after {
    width: 120px; height: 120px;
    top: -55px; left: auto; right: 15px;
}

#character{
    margin-top: -120px;
    background:url(http://i.imgur.com/Zjsbcni.png);
    width: 84px;
    height: 126px;
    animation: walk 1.0s steps(6) infinite;
    margin-left: 425px;
}

#flooring {
    height: 39px;
    background-image: url(http://i.imgur.com/usFekrp.png);
    animation: movefloor 20s linear infinite;
    overflow: hidden;
}

@keyframes movefloor {
    0% {margin-left: 1000px;}
    100% {margin-left: -1000px;}
}

@keyframes walk {
    from { background-position: 0px; }
    to { background-position: -500px; }
}

.x1 {
    -webkit-animation: moveclouds 15s linear infinite;
    -moz-animation: moveclouds 15s linear infinite;
    -o-animation: moveclouds 15s linear infinite;
}

.x2 {
    left: 200px;
    -webkit-transform: scale(0.6);
    -moz-transform: scale(0.6);
    transform: scale(0.6);
    opacity: 0.6; /*opacity proportional to the size*/

    -webkit-animation: moveclouds 25s linear infinite;
    -moz-animation: moveclouds 25s linear infinite;
    -o-animation: moveclouds 25s linear infinite;
}

.x3 {
    left: 252px;
    top: -200px;
    -webkit-transform: scale(0.8);
    -moz-transform: scale(0.8);
    transform: scale(0.8);
    opacity: 0.8; /*opacity proportional to the size*/

    -webkit-animation: moveclouds 20s linear infinite;
    -moz-animation: moveclouds 20s linear infinite;
    -o-animation: moveclouds 20s linear infinite;
}


@-webkit-keyframes moveclouds {
    0% {margin-left: 1000px;}
    100% {margin-left: -1000px;}
}
@-moz-keyframes moveclouds {
    0% {margin-left: 1000px;}
    100% {margin-left: -1000px;}
}
@-o-keyframes moveclouds {
    0% {margin-left: 1000px;}
    100% {margin-left: -1000px;}
}

<div class="container">
    <div id="clouds">
        <div class="cloud x1"></div>
        <div class="cloud x2"></div>
        <div class="cloud x3"></div>
        <div class="cloud x4"></div>
        <div class="cloud x5"></div>
    </div>
    <div id="character"></div>
    <div id="flooring"></div>
</div>
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:3)

overflow: hidden;添加到ID&#34;云&#34;

   #clouds{
      overflow: hidden;
    }

https://jsfiddle.net/p7noxpx1/1/

地板https://jsfiddle.net/ggb62cux/4/

的示例

答案 1 :(得分:2)

overflow:hidden添加到#clouds

body {
    font-family: 'Candal', sans-serif;
    overflow: hidden;
    background-color:black;

    /* remove this line, this is to prove the cloud is invisible ^^^ */
}

.container {
    width: 50%;
    margin: 0 auto;
    text-align: center;
}

#clouds{
    padding: 100px 0;
    background: #3598dc;
    background: -webkit-linear-gradient(top, #3598dc 0%, #fff 100%);
    background: -linear-gradient(top, #3598dc 0%, #fff 100%);
    background: -moz-linear-gradient(top, #3598dc 0%, #fff 100%);
    overflow:hidden;

    /* add this line ^^^ */
}

.cloud {
    width: 200px; height: 60px;
    background: #fff;
    border-radius: 200px;
    -moz-border-radius: 200px;
    -webkit-border-radius: 200px;

    position: relative;
}

.cloud:before, .cloud:after {
    content: '';
    position: absolute;
    background: #fff;
    width: 100px; height: 80px;
    position: absolute; top: -15px; left: 10px;

    border-radius: 100px;
    -moz-border-radius: 100px;
    -webkit-border-radius: 100px;

    -webkit-transform: rotate(30deg);
    transform: rotate(30deg);
    -moz-transform: rotate(30deg);
}

.cloud:after {
    width: 120px; height: 120px;
    top: -55px; left: auto; right: 15px;
}

#character{
    margin-top: -120px;
    background:url(http://i.imgur.com/Zjsbcni.png);
    width: 84px;
    height: 126px;
    animation: walk 1.0s steps(6) infinite;
    margin-left: 425px;
}

#flooring {
    height: 39px;
    background-image: url(http://i.imgur.com/usFekrp.png);
    animation: movefloor 20s linear infinite;
    overflow: hidden;
}

@keyframes movefloor {
    0% {margin-left: 1000px;}
    100% {margin-left: -1000px;}
}

@keyframes walk {
    from { background-position: 0px; }
    to { background-position: -500px; }
}

.x1 {
    -webkit-animation: moveclouds 15s linear infinite;
    -moz-animation: moveclouds 15s linear infinite;
    -o-animation: moveclouds 15s linear infinite;
}

/*variable speed, opacity, and position of clouds for realistic effect*/
.x2 {
    left: 200px;

    -webkit-transform: scale(0.6);
    -moz-transform: scale(0.6);
    transform: scale(0.6);
    opacity: 0.6; /*opacity proportional to the size*/

    /*Speed will also be proportional to the size and opacity*/
    /*More the speed. Less the time in 's' = seconds*/
    -webkit-animation: moveclouds 25s linear infinite;
    -moz-animation: moveclouds 25s linear infinite;
    -o-animation: moveclouds 25s linear infinite;
}

.x3 {
    left: 252px;
    top: -200px;
    -webkit-transform: scale(0.8);
    -moz-transform: scale(0.8);
    transform: scale(0.8);
    opacity: 0.8; /*opacity proportional to the size*/

    -webkit-animation: moveclouds 20s linear infinite;
    -moz-animation: moveclouds 20s linear infinite;
    -o-animation: moveclouds 20s linear infinite;
}

.x4 {
    left: 470px;
    top: -250px;

    -webkit-transform: scale(0.75);
    -moz-transform: scale(0.75);
    transform: scale(0.75);
    opacity: 0.75; /*opacity proportional to the size*/

    -webkit-animation: moveclouds 18s linear infinite;
    -moz-animation: moveclouds 18s linear infinite;
    -o-animation: moveclouds 18s linear infinite;
}

.x5 {
    left: -150px;
    top: -150px;

    -webkit-transform: scale(0.8);
    -moz-transform: scale(0.8);
    transform: scale(0.8);
    opacity: 0.8; /*opacity proportional to the size*/

    -webkit-animation: moveclouds 20s linear infinite;
    -moz-animation: moveclouds 20s linear infinite;
    -o-animation: moveclouds 20s linear infinite;
}

@-webkit-keyframes moveclouds {
    0% {margin-left: 1000px;}
    100% {margin-left: -1000px;}
}
@-moz-keyframes moveclouds {
    0% {margin-left: 1000px;}
    100% {margin-left: -1000px;}
}
@-o-keyframes moveclouds {
    0% {margin-left: 1000px;}
    100% {margin-left: -1000px;}
}
<div class="container">
  <h1>CSS3 Animation</h1>
  <div id="clouds">
		<div class="cloud x1"></div>
		<div class="cloud x2"></div>
		<div class="cloud x3"></div>
		<div class="cloud x4"></div>
		<div class="cloud x5"></div>
	</div>
  <div id="character"></div>
  <div id="flooring"></div>
</div>

答案 2 :(得分:1)

Updated fiddle

修复1:云层溢出容器:

正文上的

overflow: hidden只会隐藏溢出页面正文的元素。因此,您需要将overflow: hidden添加到div #clouds

修改#clouds,如下所示:

#clouds {
  padding: 100px 0;
  background: #3598dc;
  background: -webkit-linear-gradient(top, #3598dc 0%, #fff 100%);
  background: -linear-gradient(top, #3598dc 0%, #fff 100%);
  background: -moz-linear-gradient(top, #3598dc 0%, #fff 100%);
overflow: hidden;
}

修复2:隐藏地板动画 地板动画是隐藏的,因为它会溢出身体。将正文中的overlfow: hidden更改为overflow-x: hidden

修改body,如下所示:

body {
  font-family: 'Candal', sans-serif;
  overflow-x: hidden;
}

答案 3 :(得分:1)

<强>解决方案

我认为您应该将overflow: hidden;添加到.container#clouds,因为每个元素都包含在.container中。云定位于绝对位置,因此它们可能会在.container内溢出,因此overflow: hidden;会应用于#clouds。如果您希望它位于容器内,也可以更改#character的边距。

<强> CSS

 .container {           
  margin: 0 auto;
  overflow: hidden;
  text-align: center;
  width: 50%;
}

#clouds {           
  background: #3598dc;
  background: -webkit-linear-gradient(top, #3598dc 0%, #fff 100%);
  background: -linear-gradient(top, #3598dc 0%, #fff 100%);
  background: -moz-linear-gradient(top, #3598dc 0%, #fff 100%);
  overflow: hidden;
  padding: 100px 0;      
}

#character{
  animation: walk 1.0s steps(6) infinite;
  background:url(http://i.imgur.com/Zjsbcni.png);      
  height: 126px;  
  margin-left: 320px;
  margin-top: -120px;
  width: 84px;
}

Check this fiddle