2017-03-25 6 views
2

要するに、ボトムの境界が暗いボタンがあります。ホバーでは、ボタンを少し下に移動して(ボタンを押したままにする)ボーダーを縮小します。複数の変更中にCSSのトランジションがちらつく

しかし、アニメーションのようにわずかにジッタがあり、ボタン「押さ」の感触を完全に消滅させます。

.btn { 
    color: grey; 
    background: lightgrey; 
    border: 0 rgba(0, 0, 0, .1) solid; 
    border-bottom-width: 4px; 
    font-family: sans-serif; 
    padding: 10px; 
    position: relative; 
    text-decoration: none; 
    top: 0; 
    transition: all 250ms; 
} 

.btn:hover { 
    top: 2px; 
    border-bottom-width: 2px; 
} 

私は簡単のためにここに-webkitのような接頭辞を使用していない。ここで

は、問題のCSSとともに、問題を実証Fiddleです。

主な問題はボトムボーダーです。ボタンは下に滑り落ちますが、境界線は違ったことをしているように見えます(滑らかではありません)。

ここに任意のアイデアはありますか?

+0

あなたが 'opacity'を使用することが推奨されており、パフォーマンスを最適化するための 'transform'プロパティ – sdvnksv

+0

私はSafariでジッターは見ませんが、私はFireFox、Opera、Google Chromeで見ています。起こっているのは、ボタン(上)が1ピクセル下がったことです。ボーダーの幅が1ピクセル下がり、ボタンがもう一度下に移動し、ボーダーが再び下に移動します。私は別のアプローチを試みます。ボックスの影を追加して、ボックスの影だけを変えることもできます。また、2つのボタンを位置とz-インデックスで重ねて配置し、最も高いz-インデックスでボタンを下に移動することもできます。このように、トランジションは1つのトランジションだけを処理します。 – Kobbe

+0

これをボックスシャドーで試すことができます(https://jsfiddle.net/vishal_vash/2w3v8rcc/) – Vishal

答えて

1

::before擬似要素と下の枠線を交換し、それがscaleプロパティのアニメーション化も、transform: translateY(2px)top推移を交換しよう:

https://jsfiddle.net/qjfstq1c/1/

.btn, .btn:before { 
    transition: all 250ms; 
    transform-origin: top center; 
} 
.btn { 
    display: inline-block; 
    color: grey; 
    background: lightgrey; 
    font-family: sans-serif; 
    padding: 10px; 
    position: relative; 
    text-decoration: none; 
} 
.btn:before { 
    content: ''; 
    position: absolute; 
    top: 100%; left: 0; right: 0; 
    border-top: 4px solid #bebebe; 
} 
.btn:hover { 
    transform: translateY(2px); 
} 
.btn:hover:before { 
    transform: scaleY(.5); 
} 
+0

これは私がやっていることとほとんど同じです。それは物事を少し複雑にしますが、望む効果があります。 – NukesForKids

関連する問題