包装器div在活动状态下将“之前”和“之后”伪元素重叠

时间:2019-06-19 07:30:23

标签: css

我创建了需要渐变边框的按钮,为了做到这一点,我使用了“ before”和“ after”伪元素(渐变之前和白色背景颜色之前和之后重叠,按z-指数)。问题是,当包装div具有背景颜色时,按钮伪元素在活动状态上会重叠!可以通过将z-index添加到0或1到包装div中来解决此问题……但是,我仍然不喜欢这种解决方法!谢谢!

https://jsfiddle.net/x0uw5et3/1/ enter code here

2 个答案:

答案 0 :(得分:0)

wrapper-of-wrapper类编辑为关注

.wrapper-of-wrapper {
   background-color: purple;
   position:relative;
   z-index:-2;
}

答案 1 :(得分:0)

嘿,我有您的解决方法your fiddle here

.wrapper-of-wrapper {
  background-color: purple;
  position: relative;
  z-index: 1;
}

body {
  background: orange;
}

.wrapper {
  /* background-color: orange; */
}

.wrapper-of-wrapper {
  background-color: purple;
  position: relative;
  z-index: 1;
}

 .sf-btn {
  font-family: Poppins, Helvetica Neue, Helvetica, Arial, sans-serif;
  display: inline-block;
  margin-bottom: 0;
  font-size: 14px;
  font-weight: 400;
  text-align: center;
  white-space: nowrap;
  vertical-align: middle;
  -ms-touch-action: manipulation;
  touch-action: manipulation;
  cursor: pointer;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  background-image: none;
  border-radius: 4px;
  line-height: 24px;
  border: 0;
  padding: 8px 16px;
  width: 100%;
  -webkit-transition: all .4s cubic-bezier(.25, .8, .25, 1);
  transition: all .4s cubic-bezier(.25, .8, .25, 1);
  -webkit-transition: none;
  transition: none;
}

.sf-btn:focus, .sf-btn:hover {
  color: #fff;
}

.sf-btn:active, .sf-btn:focus, .sf-btn:hover {
  color: #fff;
}

@media (min-width: 640px) {
  .sf-btn {
    width: auto;
  }
}

.sf-btn svg {
  fill: inherit;
}

.sf-btn--secondary {
  z-index: 3;
  color: #262a33;
  position: relative;
  background-color: #fff;
  font-weight: 600;
  outline: none;
}

.sf-btn--secondary::before {
  background: -webkit-gradient(linear, left top, right top, from(red), color-stop(50%, red), to(#ff7000));
  background: linear-gradient(90deg, red, red 50%, #ff7000);
  content: "";
  position: absolute;
  z-index: -2;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  border-radius: 4px;
}

.sf-btn--secondary::after {
  content: "";
  position: absolute;
  background-color: #fff;
  border-radius: 4px;
  z-index: -1;
  top: 2px;
  left: 2px;
  right: 2px;
  bottom: 2px;
}

.sf-btn--secondary:hover {
  color: #262a33;
}

.sf-btn--secondary:hover::before {
  top: -2px;
  left: -2px;
  right: -2px;
  bottom: -2px;
}

.sf-btn--secondary:focus {
  color: #262a33;
}

.sf-btn--secondary:focus::before {
  z-index: -2;
  -webkit-box-shadow: 0 0 6px 2px #ff7000;
  box-shadow: 0 0 6px 2px #ff7000;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}

.sf-btn--secondary:active {
  z-index: inherit;
  background: linear-gradient(34deg, #eb2506, #eb2506 37%, #ef6f08);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
}

.sf-btn--secondary:active::after {
  z-index: -2;
}

.sf-btn--secondary:active::before {
  -webkit-box-shadow: none;
  box-shadow: none;
}

.sf-btn--lg {
  padding: 8px 64px;
  font-size: 16px;
  line-height: 48px;
  font-weight: 700;
}

.sf-btn--full-width {
  width: 100%;
  margin-right: -4px!important;
}

.sf-btn--full-width::after {
      transform: translateX(4px);
}

.wrapper--red {
  background-color: red;
  z-index: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrapper-of-wrapper">
  <div class="wrapper">

    <button class="sf-btn sf-btn--lg sf-btn--secondary">Hello</button>   

  </div>
</div>