Как сделать background косой в css?
Ответы (5 шт):
Автор решения: Тимофей Белов
→ Ссылка
Сделать блок один прямой и другой, и повернуть через rotate и сделать что бы он мог выходить за рамки экрана.
Автор решения: Ruslan Mart
→ Ссылка
Как вариант:
.container {
height: 300px;
overflow: hidden;
position: relative;
}
.container::after {
background-color: blue;
bottom: 0;
content: '';
left: 0;
transform: rotate(-5deg);
transform-origin: left bottom;
position: absolute;
right: -100%;
top: 0;
}
Автор решения: CbIPoK2513
→ Ссылка
Вариант с transform: skew
body {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
margin: 0;
background: #f0f2f1;
}
.card {
display: inline-flex;
flex-direction: column;
justify-content: space-between;
width: 200px;
background: #fff;
}
.card .top {
display: block;
width: 100%;
overflow: hidden;
position: relative;
}
.card .top::before {
content: '';
display: block;
width: 100%;
height: calc(100% + 50px); /* Чтоб не вылезал верхний угол */
background: #3949ab;
transform-origin: bottom left;
transform: skewY(-5deg);
position: absolute;
left: 0;
right: 0;
bottom: 0;
z-index: 1;
}
.card .top .-wrap {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 100%;
padding: 1.5em .5em 2em;
box-sizing: border-box;
color: #fff;
position: relative;
z-index: 1;
}
.card .top .title {
margin-bottom: .5em;
}
.card .top .price span {
display: inline-block;
}
.card .top .price span:nth-child(1) {
font-size: .75em;
transform: translateY(-.75em);
}
.card .top .price span:nth-child(2) {
align-self: flex-end;
font-size: 1.75em;
}
.card .options {
display: inline-flex;
flex-direction: column;
align-self: center;
max-width: 100%;
text-align: center;
color: #aaa;
padding: 1.5em .5em;
box-sizing: border-box;
}
.card .options div {
padding: 0 1em;
box-sizing: border-box;
}
.card .options div:not(:last-child) {
border-bottom: 1px solid #ddd;
padding-bottom: .25em;
margin-bottom: .5em;
}
.card .button {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
padding: 0 .5em .5em;
box-sizing: border-box;
}
.card .button div {
border: 1px solid #222;
padding: .5em 1em;
box-sizing: border-box;
box-shadow: 0 0 1px 0 #000;
}
<div class="card">
<div class="top">
<div class="-wrap">
<div class="title">Free Trail</div>
<div class="price">
<span>$</span>
<span>00</span>
<span>per month</span>
</div>
</div>
</div>
<div class="options">
<div>30 Free Trail</div>
<div>5 Free Projects</div>
<div>PHP 5 Enabled</div>
<div>24/7 Suports</div>
</div>
<div class="button">
<div>Order Now</div>
</div>
</div>
Вариант с linear-gradient
body {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
margin: 0;
background: #f0f2f1;
}
.card {
display: inline-flex;
flex-direction: column;
justify-content: space-between;
width: 200px;
background: #fff;
}
.card .top {
display: block;
width: 100%;
background:
linear-gradient(175deg,
#3949ab,
#3949ab calc(100% - 1.3em),
transparent calc(100% - 1.25em));
overflow: hidden;
position: relative;
}
.card .top .-wrap {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 100%;
padding: 1.5em .5em 2em;
box-sizing: border-box;
color: #fff;
position: relative;
z-index: 1;
}
.card .top .title {
margin-bottom: .5em;
}
.card .top .price span {
display: inline-block;
}
.card .top .price span:nth-child(1) {
font-size: .75em;
transform: translateY(-.75em);
}
.card .top .price span:nth-child(2) {
align-self: flex-end;
font-size: 1.75em;
}
.card .options {
display: inline-flex;
flex-direction: column;
align-self: center;
max-width: 100%;
text-align: center;
color: #aaa;
padding: 1.5em .5em;
box-sizing: border-box;
}
.card .options div {
padding: 0 1em;
box-sizing: border-box;
}
.card .options div:not(:last-child) {
border-bottom: 1px solid #ddd;
padding-bottom: .25em;
margin-bottom: .5em;
}
.card .button {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
padding: 0 .5em .5em;
box-sizing: border-box;
}
.card .button div {
border: 1px solid #222;
padding: .5em 1em;
box-sizing: border-box;
box-shadow: 0 0 1px 0 #000;
}
<div class="card">
<div class="top">
<div class="-wrap">
<div class="title">Free Trail</div>
<div class="price">
<span>$</span>
<span>00</span>
<span>per month</span>
</div>
</div>
</div>
<div class="options">
<div>30 Free Trail</div>
<div>5 Free Projects</div>
<div>PHP 5 Enabled</div>
<div>24/7 Suports</div>
</div>
<div class="button">
<div>Order Now</div>
</div>
</div>
Автор решения: NoSkill
→ Ссылка
Нижнюю часть блока можно сделать посредством SVG. Преимущество в том, что таким образом можно делать не только ровные диагональные переходы.
Если блок растянеться, то растянется и SVG, сохраняя визуальные отступы в блоке (попробуйте растянуть страницу, чтобы увидеть этот эфект).
Напротив, если угол нужно сохранять при растягивании контейнера, то достаточно просто убрать width/height у SVG.
#container {
width: 50%;
border: 1px solid red;
}
#container > div {
padding: 20px;
color: #ffffff;
background-color: #3949ab;
}
#container > svg {
display: block;
width: 100%; height: 40px;
fill: #3949ab;
}
<div id="container">
<div>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 20" preserveAspectRatio="none">
<polygon points="0,0 100,0 0,20" />
</svg>
</div>
Автор решения: Qwertiy
→ Ссылка
Используй псевдоэлемент с clip-path и отрицательным z-index:
div {
width: 150px;
margin: auto;
border: 1px solid blue;
position: relative;
z-index: 0;
color: red;
}
div::before {
content: "";
position: absolute;
inset: 0 0 auto 0;
height: 50%;
clip-path: polygon(0 0, 100% 0, 100% calc(100% - 2em), 0 100%);
background: silver;
z-index: -1;
}
<div>
Вот на фото есть такая карточка , и как сделать мне такой синый цвет как на фото чуть косо?)
Вот на фото есть такая карточка , и как сделать мне такой синый цвет как на фото чуть косо?)
</div>
