Как сделать фон текста в виде фигуры
Подскажите как можно добиться такого фона для текста поверх изображения.
.content {
overflow: hidden;
position: relative;
height: 200px;
width: 500px
}
.content-text {
position: absolute;
width: 200px;
left: 40px;
top: 30px;
background: rgba(255, 255, 255, 0.85);
}
content img {
width: 100%;
height: 100%;
object-fit: cover;
position: absolute;
top: 0;
left: 0;
}
<div class="content">
<div class="content-text">
<h1>Название </h1>
<p>описание</p>
</div>
<img src="https://mirpozitiva.ru/wp-content/uploads/2019/11/1472042718_14.jpg" alt='' />
</div>
Ответы (2 шт):
Автор решения: Rudi
→ Ссылка
Можно что-то такое сделать..
.content {
overflow: hidden;
position: relative;
height: 200px;
width: 500px
}
.content-text .info {
transform: skewX(-20deg);
}
.content-text {
position: absolute;
width: 200px;
height: 100%;
left: 30px;
background: rgba(255, 255, 255, 0.85);
transform: skewX(20deg);
opacity: 0.5;
text-align: center;
z-index: 99;
display: flex;
justify-content: center;
align-items: center;
}
img {
width: 100%;
height: 100%;
object-fit: cover;
position: absolute;
top: 0;
left: 0;
z-index: 1;
}
<div class="content">
<div class="content-text">
<div class="info">
<h1>Название </h1>
<p>описание</p>
</div>
</div>
<img src="https://mirpozitiva.ru/wp-content/uploads/2019/11/1472042718_14.jpg" alt='' />
</div>
Автор решения: De.Minov
→ Ссылка
Вариантов несколько:
Использовать linear-gradient
Мы используем картинку как фон, а так же поверх него добавляем градиент.
Минус такого использования заключается в том, что "полоска" не подстраивается под размер шрифта.
.image {
display: block;
width: 100%;
background-image:
linear-gradient(75deg,
transparent 10%, rgba(255,255,255, .35) 10%,
rgba(255,255,255, .35) 45%, transparent 45%
),
url('//i.imgur.com/Y88UEAT.png');
background-repeat: no-repeat;
background-size: 100% 100%, cover;
position: relative;
}
.image::before {
content: '';
display: block;
width: 100%;
height: 0;
padding-top: 48.25%;
}
.image .text {
display: inline-block;
font-size: 200%;
font-weight: bold;
color: #2d498a;
position: absolute;
left: 15%;
top: 50%;
transform: translateY(-50%);
}
<div class="image">
<div class="text">Some text</div>
</div>
Использовать skewX()
Для этого варианта используется трансформация, но данный способ будет трансформировать и дочернии элементы, так что их придётся трансформировать в "обратную сторону".
.image {
display: block;
width: 100%;
background: url('//i.imgur.com/Y88UEAT.png') no-repeat center center / cover;
position: relative;
}
.image::before {
content: '';
display: block;
width: 100%;
height: 0;
padding-top: 48.25%;
}
.image .line {
display: inline-flex;
flex-direction: column;
justify-content: center;
align-items: flex-start;
height: 100%;
background-color: rgba(255,255,255, .35);
padding: 0 10%;
box-sizing: border-box;
position: absolute;
left: 5%;
top: 0;
transform: skew(20deg);
}
.image .line > * {
transform: skew(-20deg);
}
.image .text {
display: inline-block;
font-size: 200%;
font-weight: bold;
color: #2d498a;
}
<div class="image">
<div class="line">
<div class="text">Some text</div>
</div>
</div>