Как вычислить width, используя calc?
а не через js
то есть не задавать wrap.style.setProperty('--w', w + 'px');
а тут всё учесть ( width: var(--w, 100vw);) 28 строка css
const wrap = document.querySelector('.wrap');
const setWidth = () => {
let w = wrap.offsetWidth;
wrap.style.setProperty('--w', w + 'px');
}
setWidth();
window.addEventListener('resize', () => {
setWidth();
});
.container {
padding: 0 30px;
margin: 0 auto;
max-width: 1190px;
}
.wrap {
display: grid;
grid-template-columns: 1fr 1fr;
column-gap: 24px;
}
.item {
background-color: #eee;
padding: 20px;
padding-bottom: 108px;
overflow: hidden;
}
.item {
position: relative;
}
.item::before {
content: '';
position: absolute;
bottom: 25px;
left: 0;
width: var(--w, 100vw);
height: 65px;
background-position: left 110px bottom;
background-repeat: no-repeat;
background-image: url('https://svgshare.com/i/_Xm.svg');
background-size: contain;
}
.item:nth-child(even)::before {
transform: translateX(calc(0px - 50% - 12px));
}
.item:first-child::before {
left: 88px;
background-position: left 10px bottom;
}
.item:first-child::after {
position: absolute;
content: ' ';
bottom: 38px;
left: 40px;
width: 48px;
height: 48px;
border-radius: 50%;
background-color: #c8d1f2;
}
*, *::after, *::before {
box-sizing: border-box;
}
<div class="container">
<div class="wrap">
<div class="item">
<h3>title 1</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Rerum debitis inventore suscipit pariatur, rem distinctio consectetur sequi. Voluptates laborum eos dicta laboriosam quia cupiditate rem beatae non, debitis laudantium enim?</p>
</div>
<div class="item">
<h3>title 2</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Rerum debitis inventore suscipit pariatur, rem distinctio consectetur sequi. Voluptates laborum eos dicta laboriosam quia cupiditate rem beatae non, debitis laudantium enim?</p>
</div>
</div>
</div>
Ответы (1 шт):
Автор решения: UModeL
→ Ссылка
Конкретно для данного случая, достаточно указать сумму удвоенной ширины родителя и ширины отступа между колонками сетки:
width: calc( 200% + 24px ); /* column-gap: 24px; */
Если добавим переменную, то сможем одновременно: и устанавливать отступ в сетке и прокидывать значение до нужного псевдоэлемента:
*, *::after, *::before { box-sizing: border-box; }
.container {
padding: 0 30px;
margin: 0 auto;
max-width: 1190px;
}
.wrap {
display: grid;
grid-template-columns: 1fr 1fr;
--col-gap: 24px;
column-gap: var(--col-gap);
}
.item {
position: relative;
background-color: #eee;
padding: 20px;
padding-bottom: 108px;
overflow: hidden;
}
.item::before {
content: '';
position: absolute;
bottom: 25px;
left: 0;
width: calc(200% + var(--col-gap));
height: 65px;
background-image: url('https://svgshare.com/i/_Xm.svg');
background-position: left 110px bottom;
background-repeat: no-repeat;
background-size: contain;
}
.item:nth-child(even)::before {
transform: translateX(calc(0px - 50% - 12px));
}
.item:first-child::before {
left: 88px;
background-position: left 10px bottom;
}
.item:first-child::after {
content: ' ';
position: absolute;
bottom: 38px;
left: 40px;
height: 48px;
width: 48px;
border-radius: 50%;
background-color: #c8d1f2;
}
<div class="container">
<div class="wrap">
<div class="item">
<h3>title 1</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Rerum debitis inventore suscipit pariatur, rem distinctio consectetur sequi. Voluptates laborum eos dicta laboriosam quia cupiditate rem beatae non, debitis laudantium enim?</p>
</div>
<div class="item">
<h3>title 2</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Rerum debitis inventore suscipit pariatur, rem distinctio consectetur sequi. Voluptates laborum eos dicta laboriosam quia cupiditate rem beatae non, debitis laudantium enim?</p>
</div>
</div>
</div>