«Прозрачная» рамка вокруг предметов на фоне - PullRequest
0 голосов
/ 01 мая 2018

Было несколько вопросов, касающихся какой-то прозрачной границы, но не того, что я ищу, я думаю.

enter image description here

Это может быть очень глупо, но: возможно ли как-то иметь элементы ( эти белые квадраты ) на фоне ( черная текстура ), каждый из которых имеет границу, «удалить» фон для границы в 10px (или как угодно)? Таким образом, у вас есть непрерывный фон, и каждый элемент сверху «обрезает» какую-то его часть. Истинная «прозрачная» граница (как и другие вопросы), очевидно, просто позволит вам увидеть фон, поэтому я не это имею в виду.

Если нет, то как бы вы могли создать такой адаптивный дизайн?

Извините, я не знаю другого способа объяснить это. Спасибо.

См. Пример / скрипку здесь: jsfiddle.net / 14nn2pLy

   html, body {
    margin: 0;
    padding: 0;
    height: 100%;
    background: #fd1dfa;
}

#main_header {
    position: fixed;
    top: 0px;
    width: 100%;
    height: 200px;
    background: url() no-repeat center top;
    background-size: contain;
}

#main_footer {
    position: fixed;
    bottom: 0px;
    width: 100%;
    height: 200px;
    background: url(https://preview.ibb.co/hACMzS/background_footer.png) no-repeat center bottom;
    background-size: contain;
}

#icons {
    position: fixed;
    bottom: 0px;
    width: 900px;
    height: 75px;
    background: url(https://preview.ibb.co/mkPODn/footer_items.png) no-repeat center bottom;
    border: 10px;
    border-color: rgba( 0, 0, 0, 0);
}
<div id="main_header"></div>

<div id="main_footer">
    <div id="icons"></div>
</div>

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Вы можете создать изображение с прозрачным фоном и использовать его как изображение границы.

.background {
position: relative;
  width: 100%;
  height: 100%;
  padding: 10px;
  background-color: #fd1dfa;
  z-index: 1 !important;
}

.background:after {
  content: "";
  display: table;
  clear: both;
}

hr {
  border: 10px solid white;
  position: relative;
  top: 100px;
  z-index: 5 !important;
}

.center {
  position: relative;
  width: 50px;
  height: 50px;
  background-color: #fd1dfa;
  color: #ffffff;
  padding: 10px;
  z-index: 10 !important;
}

.border {
  position: relative;
  z-index: 8 !important;
  margin: 30px;
  width: 70px;
  height: 70px;
  float: left;
  background: white;
  border: 10px solid transparent;
  border-image: 
  
}
<div class="background">
 <hr>
  <div class="border">
    <div class="center">
      text and words
    </div>
  </div>

  <div class="border">
    <div class="center">
      text and words
    </div>
  </div>

  <div class="border">
    <div class="center">
      text and words
    </div>
  </div>
   
  
</div>
0 голосов
/ 01 мая 2018

Мой мыслительный процесс

Единственный способ, которым я могу придумать, это сделать рамку того же цвета, что и фон (в вашем случае это оттенок розового), но учтите, что это возможно только при наличии сплошного фона.

Пример:

.bg {
  position: relative;
  height: 250px;
  width: 500px;
  background-image: url(https://i.imgur.com/nRXO8xa.jpg);
}

.border {
  height: 20px;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 30px;
  margin: auto;
  padding: 10px;
  background: steelblue;
  border: 10px solid black;
}

.no-border {
  height: 20px;
  position: absolute;
  top: 0;
  bottom: 0;
  right: 30px;
  margin: auto;
  padding: 10px;
  background: steelblue;
  border: 10px solid #F7F2D5;
}
<div class="bg">
  <div class="border">black border</div>
  <div class="no-border">"transparent" border</div>
</div>

Решение:

Требуемый эффект возможен при использовании clip-path на фоне. Обратите внимание, что я также изменил HTML и CSS, иначе это не сработало бы. clip-path используется в основном для вырезания части фонового изображения, которая вам не нужна, так что она становится прозрачной и активируется при наведении.

body,
html {
  height: 100%;
  margin: 0;
}

body {
  background: url(https://images.unsplash.com/photo-1473662712020-75289ee3c5de);
  background-size: cover;
}

.container {
  height: 140px;
  width: 618px;
  position: relative;
  top: 40%;
  margin: 0 auto;
}

.bg {
  height: 140px;
  width: 618px;
  position: relative;
}

.icon {
  height: 50px;
  width: 50px;
  position: absolute;
  top: 25.25%;
  left: 38.25%;
  z-index: 1;
}

.icon:hover+.bg {
  clip-path: polygon(0 0, 0 100%, 44% 78.5%, 37.5% 50%, 44% 22%, 50.5% 50%, 44% 78.5%, 0 100%, 100% 100%, 100% 0);
}
<div class="container">

  <div class="icon">
    <img src="https://i.imgur.com/V2eI4Rm.png" alt="icon">
  </div>

  <div class="bg">
    <img src="https://i.imgur.com/D3V3ZYq.png" alt="background">
  </div>

</div>
...