#html #css
#HTML #css
Вопрос:
Я пытаюсь обрезать изображение в круг и применить фильтр серого цвета с текстом сверху. Проблема, с которой я сталкиваюсь, двоякая. Во-первых, поскольку моя система позволяет пользователям загружать изображения в виде изображения профиля, размер контура клипа круга изменяется в зависимости от размера исходного изображения, что, в свою очередь, не позволяет мне наложить на изображение правильный фильтр серого цвета. Есть какие-либо советы о том, как это исправить? Конечным результатом должно быть изображение справа в виде круга с фильтром серого цвета.
CodePen: https://codepen.io/dansbyt/pen/wvzyJzj
HTML:
<div class="center">
<img class='pic large primary' src='../resources/pics/23.png'>
<div class='picgroup large'>
<div class='count'> 14</div>
<img class='pic large secondary' src='../resources/pics/81.png'>
</div>
</div>
CSS:
.pic {clip-path: circle();}
.primary {z-index: 3}
.secondary {z-index: 0; margin-left: -50px; margin-bottom: -30px}
.large.primary {width: 220px}
.large.secondary {width: 170px}
.small.primary {width: 150px}
.small.secondary {width: 116px}
.pic img{float:right; max-width: 100%; max-height: 100%; display: block;}
.center {
display: flex;
justify-content: center;
align-items: center;}
.secondary img{object-fit: cover}
.picgroup {position: relative}
.small.picgroup:before {
width:116px; height: 116px;
margin-top: 20px;}
.large.picgroup:before {
width:150%; height: 150%;
margin-top: -30px;}
.picgroup:before {
content:"";
position: absolute;
top:0; left:0;
margin-left: -50px;
clip-path: circle();
background: rgba(0,0,0,0.5);
z-index: 2;
}
.picgroup .count {
font-size: 50px;
color: #E5E5E5;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-65%, -50%);
z-index: 2;}
Комментарии:
1. Почему вы не хотите подавать
filter: brightness()
заявку?2. Боже, это работает! Спасибо. Ради обучения, как бы я это сделал, если бы хотел, чтобы конечный результат был зеленым или, может быть, розовым наложением?
3. вы можете поместить элемент поверх изображения, используя абсолютную позицию, придать цвет фона и поиграть с непрозрачностью, чтобы сделать его таким, как вы хотите. абсолютный элемент должен быть одинаковой высоты и ширины, хотя
4. @ZiaAhmad Правильно, я пытался это сделать, но, как я уже говорил в исходном сообщении, пользователи могут загружать свои собственные изображения, поэтому я не могу предсказать высоту и ширину.
5. на самом деле вы можете ограничить высоту и ширину родительского div (в котором находится изображение) и установить для изображения ширину 100%
Ответ №1:
Для наложения цвета вы можете использовать brightness()
hue-rotate()
правила и вместе для .secondary
. Вот так:
.secondary {
...
filter: brightness(0.5) hue-rotate(90deg);
}
.pic {clip-path: circle();}
.primary {z-index: 3}
.secondary {z-index: 0; margin-left: -50px; margin-bottom: -30px;
filter: brightness(0.5) hue-rotate(90deg);
}
.large.primary {width: 220px}
.large.secondary {width: 170px}
.small.primary {width: 150px}
.small.secondary {width: 116px}
.pic img{float:right; max-width: 100%; max-height: 100%; display: block;}
.center {
display: flex;
justify-content: center;
align-items: center;}
.secondary img{object-fit: cover}
.picgroup {position: relative}
.small.picgroup:before {
width:116px; height: 116px;
margin-top: 20px;}
/*.large.picgroup:before {
width:150%; height: 150%;
margin-top: -30px;}*/
.picgroup:before {
content:"";
position: absolute;
top:0; left:0;
margin-left: -50px;
clip-path: circle();
background: rgba(0,0,0,0.5);
z-index: 2;
}
.picgroup .count {
font-size: 50px;
color: #E5E5E5;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-65%, -50%);
z-index: 2;}
<div class="center">
<img class='pic large primary' src='https://mrdansby.com/resources/pics/23.png'>
<div class='picgroup large'>
<div class='count'> 14</div>
<img class='pic large secondary' src='https://mrdansby.com/resources/pics/81.png'>
</div>
</div>