2017-05-07 5 views
-1

私はCSSでスピナーを作成しましたが、アニメーションなしで中央に配置しましたが、アニメーションを開始するときにスピナーが移動します。具体的には "@キーフレームスピナー"ルールを使用します。
どのように私はそれを中央の位置に保つことができますか?私のスピナーが回転するときのセンターの中心 - CSSアニメーション

.spinner-animation{ 
 
    width: 500px; 
 
    height: 500px; 
 
    position: relative; 
 
    background: gray; 
 
} 
 

 
.spinner-animation > .spinner{ 
 
    width: 400px; 
 
    height: 400px; 
 
    position: absolute; 
 
    left: 50%; 
 
    top: 50%; 
 
    transform: translate(-50%,-50%); 
 
    border-radius: 50%; 
 
    box-shadow: inset 3px 3px 3px red; 
 
    animation: spinner 1.2s linear infinite; 
 
} 
 

 
.spinner-animation > .content{ 
 
    display: inline-block; 
 
    width: 300px; 
 
    height: 300px; 
 
    border-radius: 50%; 
 
    position: absolute; 
 
    left: 50%; 
 
    top: 50%; 
 
    transform: translate(-50%,-50%); 
 
    background-color: black; 
 
    text-align: center; 
 
    line-height: 300px; 
 
    color: white; 
 
} 
 

 

 
@keyframes spinner { 
 
    0% { 
 
    transform: rotate(0deg); 
 
    } 
 
    100% { 
 
    transform: rotate(360deg); 
 
    } 
 
}
<div class="spinner-animation"> 
 
    <span class="spinner"></span> 
 
    <div class="content">Loading...</div> 
 
</div>

+0

は、あなたの答えありがとうございました。 – DeveloperBeginner

答えて

0

私はアニメーションを修正し、スピナーにtransform-originを追加しました:D

.spinner-animation{ 
 
    width: 500px; 
 
    height: 500px; 
 
    position: relative; 
 
    background: gray; 
 
} 
 

 
.spinner-animation > .spinner{ 
 
    width: 400px; 
 
    height: 400px; 
 
    position: absolute; 
 
    left: 50%; 
 
    top: 50%; 
 
    transform-origin: top left; 
 
    transform: translate(-50%,-50%); 
 
    border-radius: 50%; 
 
    box-shadow: inset 3px 3px 3px red; 
 
    animation: spinner 1.2s linear infinite; 
 
} 
 

 
.spinner-animation > .content{ 
 
    display: inline-block; 
 
    width: 300px; 
 
    height: 300px; 
 
    border-radius: 50%; 
 
    position: absolute; 
 
    left: 50%; 
 
    top: 50%; 
 
    transform: translate(-50%,-50%); 
 
    background-color: black; 
 
    text-align: center; 
 
    line-height: 300px; 
 
    color: white; 
 
} 
 

 

 
@keyframes spinner { 
 
    0% { 
 
    transform: rotate(0deg) translate(-50%,-50%); 
 
    } 
 
    100% { 
 
    transform: rotate(360deg) translate(-50%,-50%); 
 
    } 
 
}
<div class="spinner-animation"> 
 
    <span class="spinner"></span> 
 
    <div class="content">Loading...</div> 
 
</div>

0

フレックスボックス溶液:(水平方向)flex要素として親要素を表示し、整列(垂直)と正当その絶対位置子供中心に。

.spinner-animation{ 
 
    width: 500px; 
 
    height: 500px; 
 
    background: gray; 
 
    display: flex; 
 
    align-items: center; 
 
    justify-content: center; 
 
} 
 

 
.spinner-animation > .spinner{ 
 
    width: 400px; 
 
    height: 400px; 
 
    position: absolute; 
 
    border-radius: 50%; 
 
    box-shadow: inset 3px 3px 3px red; 
 
    animation: spinner 1.2s linear infinite; 
 
} 
 

 
.spinner-animation > .content{ 
 
    display: inline-block; 
 
    width: 300px; 
 
    height: 300px; 
 
    border-radius: 50%; 
 
    position: absolute; 
 
    background-color: black; 
 
    text-align: center; 
 
    line-height: 300px; 
 
    color: white; 
 
} 
 

 

 
@keyframes spinner { 
 
    0% { 
 
    transform: rotate(0deg); 
 
    } 
 
    100% { 
 
    transform: rotate(360deg); 
 
    } 
 
}
<div class="spinner-animation"> 
 
    <span class="spinner"></span> 
 
    <div class="content">Loading...</div> 
 
</div>

0

別の容器にspanを入れて、このコンテナにposition: absoluteを適用

.spinner-animation { 
 
    width: 500px; 
 
    height: 500px; 
 
    position: relative; 
 
    background: gray; 
 
} 
 

 
.holder { 
 
    position: absolute; 
 
    width: 400px; 
 
    height: 400px; 
 
    left: 50%; 
 
    top: 50%; 
 
    transform: translate(-50%, -50%); 
 
} 
 

 
.holder .spinner { 
 
    display: block; 
 
    width: 100%; 
 
    height: 100%; 
 
    border-radius: 50%; 
 
    box-shadow: inset 3px 3px 3px red; 
 
    animation: spinner 1.2s linear infinite; 
 
} 
 

 
.spinner-animation>.content { 
 
    display: inline-block; 
 
    width: 300px; 
 
    height: 300px; 
 
    border-radius: 50%; 
 
    position: absolute; 
 
    left: 50%; 
 
    top: 50%; 
 
    transform: translate(-50%, -50%); 
 
    background-color: black; 
 
    text-align: center; 
 
    line-height: 300px; 
 
    color: white; 
 
} 
 

 
@keyframes spinner { 
 
    0% { 
 
    transform: rotate(0deg); 
 
    } 
 
    100% { 
 
    transform: rotate(360deg); 
 
    } 
 
}
<div class="spinner-animation"> 
 
    <div class="holder"> 
 
    <span class="spinner"></span> 
 
    </div> 
 
    <div class="content">Loading...</div> 
 
</div>

0

アニメーションでtransformがを上書きされますポジショニングの場合、アニメーションtransformtranslate()を追加する必要があります。

.spinner-animation{ 
 
    width: 500px; 
 
    height: 500px; 
 
    position: relative; 
 
    background: gray; 
 
} 
 

 
.spinner-animation > .spinner{ 
 
    width: 400px; 
 
    height: 400px; 
 
    position: absolute; 
 
    left: 50%; 
 
    top: 50%; 
 
    transform: translate(-50%,-50%); 
 
    border-radius: 50%; 
 
    box-shadow: inset 3px 3px 3px red; 
 
    animation: spinner 1.2s linear infinite; 
 
} 
 

 
.spinner-animation > .content{ 
 
    display: inline-block; 
 
    width: 300px; 
 
    height: 300px; 
 
    border-radius: 50%; 
 
    position: absolute; 
 
    left: 50%; 
 
    top: 50%; 
 
    transform: translate(-50%,-50%); 
 
    background-color: black; 
 
    text-align: center; 
 
    line-height: 300px; 
 
    color: white; 
 
} 
 

 

 
@keyframes spinner { 
 
    0% { 
 
    transform: translate(-50%,-50%) rotate(0deg); 
 
    } 
 
    100% { 
 
    transform: translate(-50%,-50%) rotate(360deg); 
 
    } 
 
}
<div class="spinner-animation"> 
 
    <span class="spinner"></span> 
 
    <div class="content">Loading...</div> 
 
</div>

関連する問題