Как сделать так, чтобы стороны этого ленточного баннера не были прозрачными? - PullRequest
0 голосов
/ 21 ноября 2018

Мне было интересно, как заставить нижнюю ленту показывать левую и правую сторону ленты?Верхний показывает отлично, но когда я добавляю цвет фона на страницу, левая и правая сторона ленты исчезают.

Я застрял на этом какое-то время, поэтому мне было интересно, как решить эту проблему?Заранее спасибо!

body {
  text-align: center;

}

section {
  background-color: aqua;
}

h6 {
  display: inline-block;
  font-size: 34px;
  line-height: 28px;
  color: #8699a0;
  text-shadow: 0 0 1px #758890;
  margin: 120px 0;
  font-family: arial, verdana;
  outline: none;
  padding: 14px 30px;
  position: relative;
  text-transform: uppercase;
  box-shadow:
    0 0 30px 0 rgba(0, 0, 0, 0.1),
    0 36px 0 -18px #b1e3e2;
}

/*the ribbon ends*/
h6:before {
  content: "";
  position: absolute;
  top: 18px;
  left: -15%;
  z-index: -1;
  width: 130%;
  /*Using the triangle logic - 2-sided borders and 0 height. That will create negative triangles on the left and right.*/
  height: 0;
  border: 28px solid rgba(0, 0, 0, 0);
  border-left: 28px solid #b1e3e2;
  border-right: 28px solid #b1e3e2;
}

h6:after {
  content:"";
  width: 100%;
  height: 0;
  position: absolute;
  top: 100%;
  left: 0;
  z-index: -1;
  border-top: 18px solid #99acb2;
  border-left: 18px solid transparent;
  border-right: 18px solid transparent;
}

h6, h6:before {
  background-image:
    /*2 gray borders*/
    linear-gradient(
      transparent 8%,
      rgba(0, 0, 0, 0.1) 8%,
      rgba(0, 0, 0, 0.1) 14%,
      transparent 14%,
      transparent 86%,
      rgba(0, 0, 0, 0.1) 86%,
      rgba(0, 0, 0, 0.1) 92%,
      transparent 92%
    ),
    /*white gloss gradient*/
    linear-gradient(
      rgba(255, 255, 255, 0.75),
      rgba(255, 255, 255, 0)
    ),
    /*thin stripes*/
    linear-gradient(
      45deg,
      transparent 40%,
      rgba(0, 0, 0, 0.1) 40%,
      rgba(0, 0, 0, 0.1) 60%,
      transparent 60%
      ),
    /*white base*/
    linear-gradient(white, white);
  background-size:
    cover, /*borders*/
    cover, /*white gloss*/
    4px 4px, /*thin stripes*/
    cover; /*base white*/
}

h6, h6:before, h6:after {
  box-sizing: border-box;
  /*fix to make the borders appear on the ribbon ends as well*/
  background-origin: border-box;
}
<h6>BUY ONLINE AND SAVE</h6>

<section>
  
<h6>BUY ONLINE AND SAVE</h6>
  
</section>

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Хитрость заключается в том, чтобы избежать применения какого-либо эффекта к главному элементу и сохранить все на псевдоэлементах, тогда вы сможете просто добавить z-index:0 к главному элементу, чтобы избежать проблемы, сделав все принадлежащие одному и тому же контексту стека.

Вот модифицированный код:

body {
  text-align: center;

}

section {
  background-color: aqua;
}

h6 {
  display: inline-block;
  font-size: 34px;
  color: #8699a0;
  text-shadow: 0 0 1px #758890;
  margin: 120px 0;
  outline: none;
  padding: 14px 30px;
  position: relative;
  z-index:0;
  text-transform: uppercase;
  box-shadow:
    0 0 30px 0 rgba(0, 0, 0, 0.1),
    0 36px 0 -18px #b1e3e2;
}

h6:before {
  content: "";
  position: absolute;
  z-index: -2;
  top: 18px;
  bottom: -18px;
  left: -40px;
  right:-40px;
  background:
  linear-gradient(to top left,transparent 49.8%,#99acb2 50%) right 40px top 100%/20px 18px no-repeat,
    linear-gradient(to top right,transparent 49.8%,#99acb2 50%) 40px 100%/20px 18px no-repeat,
    linear-gradient(#b1e3e2,#b1e3e2) center/calc(100% - 120px) 100% no-repeat,
  
    linear-gradient(rgba(0, 0, 0, 0.1),rgba(0, 0, 0, 0.1)) 0 8%/100% 6% no-repeat,
    linear-gradient(rgba(0, 0, 0, 0.1),rgba(0, 0, 0, 0.1)) 0 92%/100% 6% no-repeat,
    linear-gradient(rgba(255, 255, 255, 0.75),rgba(255, 255, 255, 0)) no-repeat,
    linear-gradient(45deg, transparent 40%,rgba(0, 0, 0, 0.1) 40%,
            rgba(0, 0, 0, 0.1) 60%,transparent 60%) left/4px 4px,
    #fff;
}

h6:after {
  content:"";
  position: absolute;
  right:0;
  left: 0;
  top:0;
  bottom:0;
  z-index: -1;
  background:
    linear-gradient(rgba(0, 0, 0, 0.1),rgba(0, 0, 0, 0.1)) 0 8%/100% 6% no-repeat,
    linear-gradient(rgba(0, 0, 0, 0.1),rgba(0, 0, 0, 0.1)) 0 92%/100% 6% no-repeat,
    linear-gradient(rgba(255, 255, 255, 0.75),rgba(255, 255, 255, 0)) no-repeat,
    linear-gradient(45deg, transparent 40%,rgba(0, 0, 0, 0.1) 40%,
            rgba(0, 0, 0, 0.1) 60%,transparent 60%) left/4px 4px,
    #fff;
}

h6, h6:before, h6:after {
  box-sizing: border-box;
}
<h6>BUY ONLINE AND SAVE</h6>

<section>
  
<h6>BUY ONLINE AND SAVE</h6>
  
</section>
0 голосов
/ 21 ноября 2018

Проблема в том, что вы устанавливаете h6: before и h6: after уровень элемента один на задний план с помощью z-index-1, чтобы поместить их позади h6.

, если вы добавляете позицию относительно иz-индекс любого значения в вашем разделе, все это выйдет на передний план.

section {
  background-color: aqua;
  position: relative;
  z-index: 0; // works with any value
}

Важным моментом для вашего решения является то, что добавляя позиции и z-индекс в ваш раздел, вы определяетеон как корневой элемент стека контекста, вместо корневого HTML, автоматически перемещает любого потомка, даже с отрицательным z-индексом перед ним.Вкратце, это порядок наложения:

  1. Корневой элемент контекста наложения
  2. Позиционированные элементы (и их дочерние элементы) с отрицательными значениями z-index (более высокие значения располагаются передболее низкие значения; элементы с одинаковыми значениями суммируются в соответствии с внешним видом в HTML)
  3. Непозиционированные элементы (упорядоченные по внешнему виду в HTML)
  4. Позиционированные элементы (и их дочерние элементы) сЗначение z-index для auto (упорядочено по внешнему виду в HTML)
  5. Позиционированные элементы (и их дочерние элементы) с положительными значениями z-index (более высокие значения располагаются перед более низкими значениями; элементы с одинаковыми значениямисоставляется в соответствии с внешним видом в HTML)

Более подробное описание укладки см. в следующей статье https://philipwalton.com/articles/what-no-one-told-you-about-z-index/

...