Изменение размера и обрезка изображения в HTML5 и CSS
Мои требования -
- Случайное изображение отображается внутри div / canvas
- Высота изображения должна быть отрегулирована по высоте родителей
- Ширина изображения должна быть пропорционально изменена (с высотой)
- Если ширина изображения больше родительской ширины, обрезать слева и справа одинаково
Я добился этого с помощью сценария Java. Jsfiddle находится по адресу http://jsfiddle.net/yesprasoon/N3WvF/. Вы можете изменить размер окна вывода, чтобы увидеть, как оно работает.
Однако я чувствую, что делаю это утомительно, и в CSS и / или jQuery есть что-то очень простое. не могли бы вы помочь мне с чистым CSS (желательно)?
Я также прилагаю Java-скрипт -
var strDataURI;
//
displayBackground(true);
//
window.onresize = function(event) {
displayBackground(false);
}
//
function displayBackground(bChangeImage)
{
//alert("displayBackground");
var appWidth = window.innerWidth;
var appHeight = window.innerHeight;
//
if (bChangeImage)
{
var suffix_array = ["_california","_easter","_eiffel","_hk","_taj"];
var ran = Math.floor((Math.random()*5)+1);
ran = ran - 1;
//ran = 3;
strDataURI = "http://minds-eye.info/TP_Test/TP"+suffix_array[ran]+".jpg";
}
//
var myCanvas = document.getElementById('canvas');
var ctx = myCanvas.getContext('2d');
var img = new Image;
img.onload = function(){
ctx.canvas.width = appWidth;
ctx.canvas.height = appHeight;
//
var hFraction = appHeight / img.naturalHeight;
var displayWidth = img.naturalWidth*hFraction;
mrgLeft = (appWidth - displayWidth)/2;
mrgTop = (appHeight - img.naturalHeight)/2;
ctx.drawImage(img,mrgLeft,0, displayWidth, appHeight);
//blurMargin = 20;
//stackBlurCanvasRGB( "canvas", blurMargin, blurMargin, appWidth-blurMargin*2, appHeight-blurMargin*2, 6 );
};
img.src = strDataURI;
}
2 ответа
Это должно сделать трюк:
HTML:
<div id="canvasHolder">
</div>
CSS
#canvasHolder{
background: white url(http://placekitten.com/400/700) no-repeat center center;
background-size: auto 100% ;
height:100%;
width:100%;
}
Чтобы высота фонового изображения всегда оставалась равной 100% содержащего элемента, а ширина автоматически масштабировалась, сохраняя соотношение, просто установите для background-size значение "auto 100%", чтобы для ширины было установлено значение auto, а для высоты - до 100%. Ширина будет пропорционально масштабироваться, в то время как высота всегда остается на уровне 100% от высоты содержащего элемента.
Центрирование обеспечивает автоматическую обрезку влево и вправо.
HTML:
<div class="container">
</div>
CSS:
.container {
background-image: url(https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQWamCIidr9XrdW7BqKL5DXbqqQxlL8z43Imawqvi5esIqNe7Uh);
background-size: auto 100%;
background-repeat: no-repeat;
background-position: center;
height: 300px;
}
Смотрите мое демо jsBiin здесь. Измените высоту контейнера в CSS, чтобы изображение автоматически пропорционально масштабировалось.