I次CSS3ボタンのアニメーションを持っている:擬似要素は、アンカータグの境界線との位置合わせない
HTML ::
<a href="" class="btn">
<span>
Hover on Me
</span>
</a>
CSS:
/* line 1, C:/xampp/htdocs/fs/borderAnimation/scss/style.scss */
body {
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
/* line 8, C:/xampp/htdocs/fs/borderAnimation/scss/style.scss */
*,
*:before,
*:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
/* line 82, C:/xampp/htdocs/fs/borderAnimation/scss/style.scss */
a {
text-decoration: none;
}
/* line 85, C:/xampp/htdocs/fs/borderAnimation/scss/style.scss */
a:hover,
a:active,
a:focus {
text-decoration: none;
}
/* line 93, C:/xampp/htdocs/fs/borderAnimation/scss/style.scss */
.btn {
display: inline-block;
border: 2px solid rgba(0, 0, 0, 0.1);
background: transparent;
color: #252525;
font-size: 1.25em;
padding: 0.65em 2em;
text-transform: uppercase;
position: relative;
overflow: hidden;
}
/* line 19, C:/xampp/htdocs/fs/borderAnimation/scss/style.scss */
.btn:before,
.btn:after {
content: '';
position: absolute;
left: 0;
right: 0;
height: 2px;
background: #ff0000;
transition: all 0.85s;
}
/* line 29, C:/xampp/htdocs/fs/borderAnimation/scss/style.scss */
.btn:before {
top: 0;
transform: translate3d(-105%, 0, 0);
}
/* line 33, C:/xampp/htdocs/fs/borderAnimation/scss/style.scss */
.btn:after {
bottom: 0;
transform: translate3d(105%, 0, 0);
}
/* line 41, C:/xampp/htdocs/fs/borderAnimation/scss/style.scss */
.btn > span:before,
.btn > span:after {
content: '';
position: absolute;
top: 0;
bottom: 0;
width: 2px;
background: #ff0000;
transition: all 0.85s;
}
/* line 51, C:/xampp/htdocs/fs/borderAnimation/scss/style.scss */
.btn > span:before {
left: 0;
transform: translate3d(0, 105%, 0);
}
/* line 55, C:/xampp/htdocs/fs/borderAnimation/scss/style.scss */
.btn > span:after {
right: 0;
transform: translate3d(0, -105%, 0);
}
/* line 65, C:/xampp/htdocs/fs/borderAnimation/scss/style.scss */
.btn:hover:before,
.btn:hover:after,
.btn:active:before,
.btn:active:after,
.btn:focus:before,
.btn:focus:after {
transform: translate3d(0, 0, 0);
}
/* line 71, C:/xampp/htdocs/fs/borderAnimation/scss/style.scss */
.btn:hover > span:before,
.btn:hover > span:after,
.btn:active > span:before,
.btn:active > span:after,
.btn:focus > span:before,
.btn:focus > span:after {
transform: translate3d(0, 0, 0);
}
今の問題は、国境I :before
と:after
疑似要素を使用して作成した場合、アンカータグの境界の上に正確に配置しないと、ボタン内の2ピクセルのように見えます。
私はbox-sizing:border-box
プロパティを追加しましたが、同じ結果が得られます。なぜ、アンカーボーダーの上に擬似要素を配置できないのですか?
私は次のプロパティを使用していたが、それでも望ましい結果得ることはありません見ることができるように:擬似要素は、彼らがしている要素の子であるため
*,*:before,*:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
スニペット、その場合には、なぜ '' 自体に適用されるpsudo要素はの内側に表示されていますか? –
@AlexanderSolonikこれは、擬似要素がどのように機能するかということだからです。あなたはあなたが持っている 'span 'と同様のレンダリングを行い、子要素は' a'になります。だから擬似と「スパン」は兄弟であるため、上記のような仕組みになっています。それは理にかなっていますか? ...擬似の代わりに、既存の「スパン」より前に2つの「スパン」を追加し、同じ結果を達成することができます。 – LGSon
実際に私はまだパッドの境界線などがタグにあるときにに表示されているに表示されているpsudo要素であって、の上部と下部に正確に触れていないので、パディング、境界線などがスパンに適用されると、スクロール要素は突然スパンの境界線に揃えられます。 –