Выбор только средней части изображения с помощью CSS
У меня есть изображение с CSS: width:100%;
Теперь изображение вокруг 560px
высокое, но я хочу только выбрать 300 пикселей изображения, отрезая верхнюю и нижнюю части изображения, не сжимая его.
Можно ли это сделать?
Я просмотрел crop
, но вам нужно выбрать части для этого, и поэтому он не будет работать при попытке получить только середину.
![Example of image cropping desired]()
Ответы
Ответ 1
Попробуйте это.
Это использует значение CSS для клипа.
Это было упомянуто в сообщении @Sam Jacob.
<style>
.clip-me {
position: absolute;
clip: rect(110px, 160px, 170px, 60px);
/* values describe a top/left point and bottom/right point */
clip-path: inset(10px 20px 30px 40px); /* or "none" */
/* values are from-top, from-right, from-bottom, from-left */
}
</style>
<img class="clip-me" src="thing-to-be-clipped.png">
Примечание. Это свойство CSS не работает в IE.
Ответ 2
Использовать путь клипа
img {
position: absolute;
clip: rect(0, 100px, 100px, 0); /* clip: shape(top, right, bottom, left);*/
}
Изменить: как указано в комментарии, позиция должна быть абсолютной или фиксированной для этого, чтобы работать
Если вы не хотите, чтобы позиция была абсолютной или фиксированной, установите изображение, которое вы хотите отобразить в качестве фона в контейнере (td, div, span и т.д.), а затем отрегулируйте положение фона, чтобы получить спрайт, который вы хотите.
В качестве страницы mozilla здесь говорится, что использование клипа не является веб-стандартом, учитывая использование клипа или фоновой позиции для достижения этого.
img{
/* deprecated version */
position: absolute; /* absolute or fixed positioning required */
clip: rect(110px, 160px, 170px, 60px); /* or "auto" */
/* values descript a top/left point and bottom/right point */
/* current version (doesn't require positioning) */
clip-path: inset(10px 20px 30px 40px); /* or "none" */
/* values are from-top, from-right, from-bottom, from-left */
}
Подробное описание здесь
Ответ 3
Поместите отрицательный margin-top
в ваше изображение, родитель должен будет overflow: hidden;
Ответ 4
Вы можете использовать clip-path
:
/* values are from-top, from-right, from-bottom, from-left */
.clip {
clip-path: polygon(5% 5%, 80% 5%, 80% 60%, 90% 60%, 5% 60%);
-webkit-clip-path: polygon(5% 5%, 80% 5%, 80% 60%, 90% 60%, 5% 60%);
}
Вот пример jsfiddle: http://jsfiddle.net/q08g3948/1/
Ответ 5
Вместо этого вы можете использовать background-position
(что было бы вполне совместимо с браузером).
Я знаю, что вы указали "нет фонового изображения", но это можно добавить динамически с помощью script, так как при необходимости может быть фоновая позиция.
Быстрый выбор:
div{
background:url(http://lorempixel.com/300/300);
background-position:0 -100px;
height:100px;
width:300px;
}
<div></div>
<br/><br/>Original
<br/><br/>
<img src="http://lorempixel.com/300/300"/>
Ответ 6
Используйте относительное позиционированное div + абсолютное позиционированное изображение. Используйте top: -999px; bottom: -999px; margin-top: auto; margin-bottom: auto;
для вертикального центрирования изображения. Абсолютно отзывчивый. Никаких значений жесткого кодирования или процентных значений.
.image-wrap {
position: relative;
overflow: hidden;
/* fixed height */
height: 300px;
/* for demonstration */
margin-top: 1em;
margin-bottom: 1em;
box-shadow: 0 0 .5em red;
}
.image-wrap img {
position: absolute;
/* fit horizontally */
width: 100%;
height: auto;
/* center vertically */
top: -1000px;
bottom: -1000px;
margin-top: auto;
margin-bottom: auto;
}
<div class="image-wrap">
<img src="http://lorempixel.com/600/600/sports/4" width="600" height="600">
</div>
<div class="image-wrap">
<img src="http://lorempixel.com/600/600/sports/5" width="600" height="600">
</div>