CSS-ленты, которые изменяются соответственно в окне просмотра
В течение некоторого времени я использовал this для создания угловых лент, и до сих пор он всегда работал нормально:
body {
margin: 10%
}
img {
border-radius: 0.5vw;
}
.picture {
position: relative;
}
.ribbon {
position: absolute;
left: -5px; top: -5px;
z-index: 1;
overflow: hidden;
width: 75px; height: 75px;
text-align: right;
}
.ribbon span {
font-size: 10px;
font-weight: bold;
color: #FFF;
text-transform: uppercase;
text-align: center;
line-height: 20px;
transform: rotate(-45deg);
-webkit-transform: rotate(-45deg);
width: 100px;
display: block;
background: #79A70A;
background: linear-gradient(#9BC90D 0%, #79A70A 100%);
box-shadow: 0 3px 10px -5px rgba(0, 0, 0, 1);
position: absolute;
top: 19px; left: -21px;
}
.ribbon span::before {
content: "";
position: absolute; left: 0px; top: 100%;
z-index: -1;
border-left: 3px solid #79A70A;
border-right: 3px solid transparent;
border-bottom: 3px solid transparent;
border-top: 3px solid #79A70A;
}
.ribbon span::after {
content: "";
position: absolute; right: 0px; top: 100%;
z-index: -1;
border-left: 3px solid transparent;
border-right: 3px solid #79A70A;
border-bottom: 3px solid transparent;
border-top: 3px solid #79A70A;
}
<div class="picture">
<div class="ribbon ribbon-top-left">
<span>TEXT</span>
</div>
<img src="http://i.imgur.com/5lWqOGT.png" />
</div>
Ответы
Ответ 1
Если вы масштабируете ширину и позицию с помощью CSS vh
(так как вы уже масштабируете высоту изображения с помощью vh
), вы можете быстро ее отрегулировать:
width: 40vh;
top: 9.3vh;
left: -7.7vh;
Вы можете сделать то же самое с font-size
и line-height
. См. Скрипт ниже.
Демо: JSFiddle
Ответ 2
Это как можно ближе. Я использовал функцию CSS calc()
для умножения vh
, чтобы получить дроби. Это выглядит нормально, по крайней мере, в Safari.
body {
margin: 10%
}
img {
border-radius: 0.5vw;
height: 60vh;
}
.picture {
position: relative;
}
.ribbon {
position: absolute;
left: calc(100vh * -0.01);
top: calc(100vh * -0.01);
z-index: 1;
width: calc(100vh * 0.15);
height: calc(100vh * 0.15);
overflow: hidden;
}
.ribbon span {
font-size: calc(100vh * 0.025);
font-weight: bold;
color: #FFF;
text-transform: uppercase;
text-align: center;
line-height: calc(100vh * 0.05);
transform: rotate(-45deg) translate(-25%, -30%);
-webkit-transform: rotate(-45deg) translate(-25%, -30%);
width: calc(100vh * 0.15);
display: block;
background: #79A70A;
background: linear-gradient(#9BC90D 0%, #79A70A 100%);
box-shadow: 0 calc(100vh * 0.0075) calc(100vh * 0.0125) 0 rgba(0,0,0,0.4);
position: absolute;
}
.ribbon span::before {
content: "";
position: absolute; left: 0px; top: 100%;
z-index: -1;
border-left: calc(100vh * 0.01) solid #79A70A;
border-right: calc(100vh * 0.01) solid transparent;
border-bottom: calc(100vh * 0.01) solid transparent;
border-top: calc(100vh * 0.01) solid #79A70A;
}
.ribbon span::after {
content: "";
position: absolute; right: 0px; top: 100%;
z-index: -1;
border-left: calc(100vh * 0.01) solid transparent;
border-right: calc(100vh * 0.01) solid #79A70A;
border-bottom: calc(100vh * 0.01) solid transparent;
border-top: calc(100vh * 0.01) solid #79A70A;
}
<div class="picture">
<div class="ribbon ribbon-top-left">
<span>TEXT</span>
</div>
<img src="http://i.imgur.com/5lWqOGT.png">
</div>