.element {
width: 100%;
height: 400px;
position: relative;
}
.element:before {
content: "";
width: 30%;
height: 100%;
background: #673ab7;
position: absolute;
top: 0;
left: 0;
}
.element:after {
content: "";
width: 70%;
height: 100%;
background: url(image.jpg);
position: absolute;
top: 0;
right: 0;
}
.element {
width: 100%;
height: 400px;
background: linear-gradient(to right, #e91e63 100%, transparent), url(image.jpg);
background-size: 30% 100%, 70% 100%;
background-position: left center, right center;
background-repeat: no-repeat, no-repeat;
}
<svg class="svg">
<clipPath id="my-clip-path" clipPathUnits="objectBoundingBox">
<path d="M0.5,0 L1,1 H0"></path>
</clipPath>
</svg>
<div class="clipped">
<video src="./assets/video.mp4"></video>
</div>
.svg {
position: absolute;
width: 0;
height: 0;
}
.clipped {
width: 100%;
max-width: 500px;
height: 350px;
-webkit-clip-path: url(#my-clip-path);
clip-path: url(#my-clip-path);
}
video {
width: 100%;
height: 100%;
object-fit: cover;
}
<parent>
<card></card>
<card></card>
<card></card>
<card></card>
<button></button>
</parent>
display: flex
и без изменений свойство align-items, тогда получается такая вот картина:Флексы растягиваются таким образом, чтобы занять всё доступное пространство контейнера.
align-items: center;
<span сlass="element">Hello</span>
и для удобства добавляем класс, по которому будет стилизовать элемент.display
со значением inline-flex
или inline-block
. Это нужно для получения корректных значений, при вычислении высоты и ширины элемента..element {
background-image: url(./image.jpg);
background-repeat: no-repeat;
background-size: cover;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-size: 50px;
line-height: 50px;
display: inline-flex;
font-family: "Roboto", sans-serif;
}
background-image: url(./picture.jpg);
background-repeat: no-repeat;
background-size: cover;
-webkit-text-fill-color
, заменив его следующей строчкой color: transparent
.-webkit-text-fill-color
-webkit-background-clip
Почему transition не срабатывает при скрытии элемента?
- transition: opacity 0.3s;
+ transition: opacity 0.3s, visibility 0.3s;
.block {
width: 250px;
height: 250px;
background: #eee;
opacity: 0;
visibility: hidden;
transition: opacity 0.3s, visibility 0.3s;
}
.block-active {
opacity: 1;
visibility: visible;
}
function show() {
const element = document.getElementById("block");
element.classList.toggle("block-active");
}
function show() {
const element = document.getElementById("block");
switch (Boolean(element.classList.contains("block-active"))) {
case false:
return element.classList.add("block-active");
case true:
return element.classList.remove("block-active");
}
}
</input type="file">
:--animation-duration
скорее всего содержится <число>ms
. Если указать только число, то всё будет работать.calc(var(--animation-duration) * 1ms)
сложности? Неужели не проще написать напрямую время анимации или пусть даже в переменной, но без calc()
и прочего? Для чего лишние вычисления и прочие операции? Не нужно ничего усложнять.--animation-duration: 500ms;
.add-panel_button.sending .svg{
animation: fly-out-in var(--animation-duration) ease-in-out;
}
addTodoButton.addEventListener("click", () => {
addTodoButton.classList.add("sending");
addTodoButton.addEventListener("animationend", e => {
addTodoButton.classList.remove("sending");
addItem();
}, { once: true }
);
});
<span class="color-tabs__text"></span>
и добавив для этого элемента - псевдоэлемент, набросать для него дополнительные стили. <span class="color-tabs__text"></span>
, а также и внешний вид его псевдоэлемента, что собственно говоря очень удобно.Как поменять цвет активного буллита
.swiper-pagination-bullets .swiper-pagination-bullet-active {
// стили для активного буллета
}
и как их все вместе немного сдвинуть вниз
.swiper-pagination-bullets
. Например margin-top или если блок с буллетами имеет абсолютное позиционирование, тогда использовать свойство top. <div class="block">
<span class="title">Hello World</span>
<span class="value">999999</span>
</div>
.block {
display: flex;
align-items: baseline;
}
.block::after {
background: #4a4a4a;
height: 3px;
content: "";
flex-grow: 1;
}
.value {
order: 3;
}
.quality__button--all {
margin-right: 13px;
position: relative;
background: #FF6428;
border-radius: 40px;
padding: 18px 45px;
overflow: hidden;
display: inline-flex;
justify-content: center;
align-items: center;
text-decoration: none;
color: #FFF;
}
.quality__button--all::before {
content: "";
background: #FF6428;
color: #fff;
background: red;
border-radius: 40px;
position: absolute;
top: 0;
left: 0;
width: 0%;
height: 100%;
transition: width 0.3s linear;
}
.quality__button--all:hover::before {
width: 100%;
}
.quality__button.quality__button--all::after {
content: "Get the App";
position: relative;
color: inherit;
}
transform: translate
:.quality__button--all::before {
width: 100%;
transform: translateX(-100%);
transition: transform 0.3s linear;
}
.quality__button--all:hover::before {
transform: translateX(0);
}
menu.toggleClass('.burger-menu_active');
menu.hasClass('.burger-menu_active')
menu.toggleClass()
& menu.hasClass()
function burgerMenu(selector) {
const menuElement = document.querySelector(selector);
const elements = [
"burger-menu_link",
"burger-menu_button",
"burger-menu_overlay",
];
const isTriggerElement = (element) => {
return [...element.classList].some((className) =>
elements.includes(className)
);
};
menuElement.addEventListener("click", ({ target }) => {
if (isTriggerElement(target)) {
toggleMenu();
}
});
function toggleMenu() {
menuElement.classList.toggle("burger-menu_active");
menuElement.classList.contains("burger-menu_active")
? document.body.classList.add("no-scroll")
: document.body.classList.remove("no-scroll");
}
}
burgerMenu(".burger-menu");
pointer-events: none
для элемента .burger-menu_lines
.burger-menu_lines {
pointer-events: none;
}
.no-scroll {
overflow: hidden;
}