Не стандарный бордер для блока

99
24 апреля 2021, 23:40

Всем привет, ребят, возникли трудности в вёрстке, как можно реализовать данный вид рамки?

Answer 1

Как и советовали в комментариях, я бы сам, скорее всего, использовал SVG, но в качестве некой альтернативы, покажу вариант с использованием JS. Хотя, как по мне, то не самый лучший вариант.

const span = document.querySelector('.card .circle'); 
const bgPos = () => { 
  let rect = span.getBoundingClientRect(); 
  span.style.backgroundPosition = `-${rect.left}px -${rect.top}px`; 
}; 
bgPos(); 
window.addEventListener('resize', bgPos);
body { 
  background: url(https://is.gd/nyZgUK) 0 0; 
} 
 
.card { 
  position: relative; 
  width: 80vw; 
  height: 50vw; 
  background: #81502c; 
  overflow: visible; 
  margin: 20px; 
  background: -webkit-linear-gradient(left, #81502c 0%, #f4e0a4 50%, #81502c 100%); 
  background: linear-gradient(to right, #81502c 0%, #f4e0a4 50%, #81502c 100%); 
} 
 
.card::before { 
  content: ''; 
  position: absolute; 
  top: -10px; 
  right: -10px; 
  bottom: -10px; 
  left: -10px; 
  border-width: 5px; 
  border-style: solid; 
  border-image: -webkit-linear-gradient(to right, #81502c 0%, #f4e0a4 50%, #81502c 100%) 1; 
  border-image: linear-gradient(to right, #81502c 0%, #f4e0a4 50%, #81502c 100%) 1; 
} 
 
.card .circle, 
.card .circle span, 
.card .circle::before, 
.card .circle span::after { 
  position: absolute; 
  border-radius: 50%; 
} 
 
.card .circle::before, 
.card .circle span::after { 
  content: ''; 
  top: 50%; 
  left: 50%; 
  -webkit-transform: translate(-50%, -50%); 
  transform: translate(-50%, -50%); 
  background: inherit; 
} 
 
.card .circle { 
  left: 50%; 
  bottom: -6vw; 
  width: 12vw; 
  height: 12vw; 
  padding: 1vw; 
  -webkit-transform: translateX(-50%); 
  transform: translateX(-50%); 
  background: url(https://is.gd/nyZgUK); 
  box-sizing: border-box; 
} 
 
.card .circle span { 
  width: 10vw; 
  height: 10vw; 
  background: -webkit-linear-gradient(left, #81502c -20%, #f4e0a4 50%, #81502c 120%); 
  background: linear-gradient(to right, #81502c -20%, #f4e0a4 50%, #81502c 120%); 
} 
 
.card .circle::before { 
  width: 8vw; 
  height: 8vw; 
  z-index: 1; 
} 
 
.card .circle span::after { 
  width: 6vw; 
  height: 6vw; 
  z-index: 2; 
}
<div class="card"> 
  <span class="circle bg"> 
    <span></span> 
  </span> 
</div>

Answer 2

Вариант на SVG

<div style="width: 300px; margin: 30px auto;"> 
  <svg xmlns="http://www.w3.org/2000/svg"  
       xmlns:xlink="http://www.w3.org/1999/xlink"  
       viewBox="-4 -4 648 580"> 
    <defs> 
      <mask id="cp"> 
        <rect width="100%" height="100%" fill="#fff"/> 
        <circle cx="325" cy="480" r="70" /> 
      </mask> 
      <linearGradient id="lg"> 
        <stop stop-color="#C28F45" offset="0"/> 
        <stop stop-color="#fff" offset="50%" stop-opacity="1" /> 
        <stop stop-color="#C28F45" offset="100%"/> 
      </linearGradient> 
    </defs> 
    <g> 
    <rect x="20" y="20" width="600" height="440" fill="url(#lg)" mask="url(#cp)"/> 
    <path d="M250,480 0,480 0,0 640,0 640,480 400,480 "fill="none" stroke="#C28F45" stroke-width="8"/> 
    <circle cx="325" cy="480" r="60" fill="none" stroke="#C28F45" stroke-width="6" stroke-linejoin="round"/> 
      <circle cx="325" cy="480" r="45" fill="#C28F45"/> 
    </g> 
  </svg> 
</div>

Answer 3

мб профессионалы css сделают, я попробовал пока не получается совсем, а то мне самому интересно посмотреть реализации.

body { 
	background: url('http://www.mariacenoura.pt/ptpictures/f/13/139206_lenovo-wallpaper.jpg'); 
} 
.div { 
  text-align: center; 
  border: 10px solid hsla(0,0%,100%,.5); 
  background: linear-gradient(to left, #f39c12, #ADF2F7); 
/* решение фон не растягивается под рамку  */ 
  background-clip: padding-box; 
  /* стили */ 
	max-width: 15em; 
	padding: 2em; 
	margin: 2em auto 0; 
	font: 30px/1.5 Arial; 
  font-weight: bold; 
  text-transform: uppercase; 
  position: relative; 
  padding-bottom: 60px; 
  z-index: -2; 
   
} 
 
.div:after { 
    content: ''; 
    position: absolute; 
    border: 3px solid transparent; 
    width: 110%; 
    height: 120%; 
    top: -25px; 
    left: -30px; 
border-image: linear-gradient(to top, transparent 0%, #ADF2F7 100%); 
border-image-slice: 1; 
   
} 
 
.circle { 
  width: 30px; 
  height: 30px; 
  background-color: #f39c12; 
  border-radius: 50%; 
  position: relative; 
  margin: 0 auto; 
  border: 5px solid hsla(0,0%,0%,.8); 
  background-clip: padding-box; 
  bottom: -100px; 
   
} 
.bg { 
  width: 40px; 
  height: 40px; 
    border-radius: 50%; 
  background-color: orange; 
  border: 10px solid transparent; 
  border-image-slice: 1; 
  position: relative; 
  z-index: -1; 
  left: -15px; 
   
  top: -15px; 
   
} 
.circle:after { 
  content: ''; 
  height: 2px; 
  width: 250px; 
  display: block; 
  bottom: 50%; 
  left: 50%; 
 transform: translateY(50%); 
   transform: translateX(25%); 
  position: absolute; 
  background: linear-gradient(to top, #f39c12, #ADF2F7); 
} 
.circle:before { 
  content: ''; 
  height: 2px; 
  width: 250px; 
  display: block; 
  bottom: 50%; 
  right: 50%; 
 transform: translateY(-50%); 
   transform: translateX(-25%); 
  position: absolute; 
  background: linear-gradient(to bottom, #f39c12, #ADF2F7); 
}
<div class="div">Пора повторить <br> мои коронные ПА. 
  <div class="circle"><div class="bg"></div></div> 
</div>

READ ALSO
Построение гистограммы WPF

Построение гистограммы WPF

Нужно сделать Гистограмму в wpf, но не простую, внутри каждой колонки гистограммы, должны быть другие маленькие колонки, сумма значений которых,...

207
Создание управление по типу игры Ballz

Создание управление по типу игры Ballz

Что же я прошу от вас(любому из этих пунктов я буду рад): 1)Скинуть видео урок или гайд как сделать такое управление 2)Дать ссылки на материал...

115
Как создать DynamicMethod из IL-кода?

Как создать DynamicMethod из IL-кода?

мне необходимо создать DynamicMethod по IL-коду следующего метода:

136
Добавление объектов в CollectionView внутри ObservableCollection

Добавление объектов в CollectionView внутри ObservableCollection

Не могу добавить объект в CollectionView, которая находится внутри объекта, который находится в ObservableCollectionМного прошерстил интернетов, натыкался...

132