1

ボタンの後ろに ,:beforeを配置しようとしています。:after box-shadowしかし、トランジションは a タグの前から始まっています。私の作品の CMS では、すべてのプロパティが a タグにある必要があります。

<a href="#" class="btn">Join Today</a>


.btn{
  position: relative;
  z-index: 1;
  display: inline-block;
  text-align: center;
  background-color: #8ec656;
  border-radius: 30px;
  font-family: 'Roboto Condensed', sans-serif;
  font-size: 20px;
  color: #fff;
  border: 3px #d2d2d2 solid;
  padding: 15px 40px;
  line-height: 1;
  transition: box-shadow .4s;
}
.btn:hover{
  background: #6b9640;
  box-shadow: inset 0px -22px 13px 0px #84b652, inset 0px 2px 5px 0px #84b652;
}
.btn:before,
.btn:after{
  content: "";
  position: absolute;
  z-index: -1;
  bottom: 9px;
  left: 10px;
  width: 88%;
  top: 73%;
  transition: box-shadow .4s;
}
.btn:hover:before,
.btn:hover:after{
  box-shadow: 0 15px 10px #777;
}

https://jsfiddle.net/3aj5muyu/

4

3 に答える 3

0

これ.btnは、 がスタック コンテキストを確立するためです。したがって、その背景は常にコンテンツの後ろになります。後ろから前の順番は

  1. スタッキング コンテキストを形成する要素の背景と境界線。
  2. 負のスタック レベルを持つ子スタック コンテキスト (最も負の値が最初)。
  3. インフロー、非インライン レベル、非配置の子孫。
  4. 配置されていないフロート。
  5. インライン テーブルとインライン ブロックを含む、インフロー、インライン レベル、位置付けされていない子孫。
  6. スタック レベル 0 の子スタック コンテキストと、スタック レベル 0 の配置された子孫。
  7. 正のスタック レベルを持つ子スタック コンテキスト (最初に最小の正)。

これを修正するに.btnは、スタッキング コンテキストを確立しないようにします。次のプロパティをラッパーに移動します。

position: relative;
z-index: 1;

.btn-wrapper {
  position: relative;
  z-index: 1;
  display: inline-block;
}
.btn{
  display: inline-block;
  text-align: center;
  background-color: #8ec656;
  border-radius: 30px;
  font-family: 'Roboto Condensed', sans-serif;
  font-size: 20px;
  color: #fff;
  border: 3px #d2d2d2 solid;
  padding: 15px 40px;
  line-height: 1;
  transition: box-shadow .4s;
  text-decoration: none;
}
.btn:hover{
  background: #6b9640;
  box-shadow: inset 0px -22px 13px 0px #84b652, inset 0px 2px 5px 0px #84b652;
}
.btn:before,
.btn:after{
  content: "";
  position: absolute;
  z-index: -1;
  bottom: 9px;
  left: 10px;
  width: 88%;
  top: 73%;
  transition: box-shadow .4s;
}
.btn:hover:before,
.btn:hover:after{
  box-shadow: 0 15px 10px #777;
}
<div class="btn-wrapper">
  <a href="#" class="btn">Join Today</a>
</div>

于 2016-02-22T21:04:22.427 に答える
0
.btn:before,
.btn:after{
  transition: .6s;
  content: "";
  box-shadow: 0 28px 17px -3px #777;
  width: 84%;
  height: 11px;
  top: 48%;
  left: 15px;
  position: absolute;
  opacity: 0;
}
.btn:hover:before,
.btn:hover:after{
  opacity: 1;
}

これは私が解決しなければならなかったものです。ご回答ありがとうございます。

于 2016-02-22T23:49:15.650 に答える
0

次の実際の例を見てください。

.btn {
  position: relative;
  /* z-index: 1; */
  display: inline-block;
  
  background-color: #8ec656;
  border-radius: 30px;
  border: 3px #d2d2d2 solid;
  padding: 15px 40px;
  transition: box-shadow .4s;
  text-decoration: none;
}

.btn > span {
  text-align: center;
  font-family: 'Roboto Condensed', sans-serif;
  font-size: 20px;
  color: #fff;
  line-height: 1;
}

.btn:hover{
  background: #6b9640;
  box-shadow: inset 0px -22px 13px 0px #84b652, inset 0px 2px 5px 0px #84b652;
}
.btn:before,
.btn:after{
  display: inline-block;
  content: "";
  position: absolute;
  z-index: -1;
  bottom: 9px;
  left: 10px;
  width: 88%;
  top: 73%;
  transition: box-shadow .4s;
}
.btn:hover:before,
.btn:hover:after{
  box-shadow: 0 15px 10px #777;
}
<a href="#" class="btn"><span>Join Today</span></a>

https://jsfiddle.net/7argwcje/

これは、before 要素と after 要素が実質的に .btn 要素の子であり、プレーン テキストの兄弟であるためです (今すぐ参加)。したがって、テキストを強制的に前面に配置する方法はありません。

変更点は次のとおりです。

.btn {
  position: relative;
  /* z-index: 1; */
  display: inline-block;
  background-color: #8ec656;
  border-radius: 30px;
  border: 3px #d2d2d2 solid;
  padding: 15px 40px;
  transition: box-shadow .4s;
  text-decoration: none;
}

.btn > span {
  text-align: center;
  font-family: 'Roboto Condensed', sans-serif;
  font-size: 20px;
  color: #fff;
  line-height: 1;
}

基本的に、一部のプロパティを.btnラッパー スパン要素に転送しました。

z インデックスが不要になったことに注意してください。

于 2016-02-22T21:13:59.560 に答える