clip-path
прекрасно умеет скруглять, rtfm.Практически все способы вставки svg в html не позволяют менять цвет при помощи css.
fill: red;
stroke: green;
currentColor
, в CSS меняем свойство color
.mask: url(img.svg) no-repeat center / contain;
background: red;
&:hover {
background: green;
}
:nth-child(3n + 1)
выберет нам первые элементы каждого ряда.:nth-last-child(-n + 2)
.:nth-child(3n + 1):nth-last-child(-n + 2)
.~
что бы выбрать все (в вашем случае не больше одного) элементы которые идут после уже выбранного.li:nth-child(3n + 1):nth-last-child(-n + 2),
li:nth-child(3n + 1):nth-last-child(-n + 2) ~ li {
.....
}
-n + 2
на -n + 3
.li:nth-child(3n):nth-last-child(-n + 3) ~ li {
.....
}
<svg width='0' height='0'>
<defs>
<clipPath id='example' clipPathUnits='objectBoundingBox'>
<path d="M 0 0 a 1 1 0 0 0 1 1 h -1 v -1z"/>
</clipPath>
</defs>
</svg>
.example {
clip-path: url(#example);
}
.elem:not(:last-child) {margin-right: NNpx}
.elem + .elem {margin-left...}
gap
в гридах и флексах! window.addEventListener('scroll', function () {
const currentScrollTop = window.pageYOffset || document.documentElement.scrollTop;
document.body.classList.toggle('scrolled', currentScrollTop > 0)
});
body.scrolled
.topbar__bottom-consult {
opacity: 0;
transition: 0.3s ease;
}
body.scrolled .topbar__bottom-consult {
opacity: 1;
}
position:sticky
.topbar__bottom {
position: sticky;
top: 0;
}
min-content
, а для main 1fr
, т.е. все оставшееся пространство. grid-template-rows: min-content 1fr
translate
элементу. А чтобы не делать отдельные обработчики клика всем кнопкам, можно записать им в data-атрибут информацию о том, на сколько какие координаты должна изменить данная кнопка.<button data-steps="1,0">right</button>
<button data-steps="-1,0">left</button>
<button data-steps="0,1">down</button>
<button data-steps="0,-1">up</button>
<button data-steps="1,1">right down</button>
<button data-steps="0,-2">double up</button>
const coord = [ 0, 0 ];
const stepSize = 30;
const box = document.querySelector('#box');
const buttons = document.querySelectorAll('[data-steps]');
buttons.forEach(n => n.addEventListener('click', onClick));
function onClick() {
this.dataset.steps.split(',').forEach((n, i) => coord[i] += n * stepSize);
box.style.transform = `translate(${coord.map(n => `${n}px`).join(',')})`;
}