Как растянуть изображение, чтобы оно соответствовало квадрату на веб-странице?

#javascript #html #css

#javascript #HTML #css

Вопрос:

На веб-странице должно отображаться несколько изображений. И предполагается, что изображения должны отображаться так, чтобы они соответствовали квадрату (90 * 90 пикселей). К сожалению, размер изображений непредсказуем. Они могут быть 80 * 100 или 100 * 80 или 90 * 110.

Требуется растянуть изображение следующим образом:
1) Если изображение имеет ширину 45 и высоту 100, растяните его ширину до 90, а высоту до 200. Отобразите его верхние 90 пикселей.
2) Если изображение имеет ширину 100 и высоту 45, увеличьте его ширину до 200, а высоту до 90. Отобразите его левые 90 пикселей.

Одним словом, всегда оставляйте верхнюю левую часть изображения размером 90 * 90.

Каково решение для этого в JavaScript и CSS? Спасибо

Ответ №1:

Сработает ли это?

 <div style="width:90px;height:90px;border:1px solid #000;background-position:left top;background-image:url('myImage.jpg');background-size:100%;"></div>
  

Пример на http://snuzzer.dk/pub/fit_image_to_div.html

Обновить:

Я изменил его, чтобы вместо этого использовать JavaScript. Это должно решить проблему с отсутствием правильного отображения ширины / высоты при использовании подхода, основанного только на CSS. Взгляните на http://snuzzer.dk/pub/fit_image_to_div.html для примера.

 <script type="text/javascript">
function fitImage(src) {
    var image = new Image();
    image.src = src;
    var height = image.height;
    var width = image.width;

    if(width > height) { // Image is wider than it's high
        scale = 90 / height;
    }
    else { // Image is higher than it's wide
        scale = 90 / width;
    }

    image.width = width * scale;
    image.height = height * scale;

    document.getElementById('info').innerHTML = width   'x'   height   ' => '   image.width   'x'   image.height;

    document.getElementById('container').style.backgroundImage = 'url('   image.src   ')';
    document.getElementById('container').style.backgroundSize = image.width   'px '   image.height   'px';
}
</script>
<div style="width:90px;height:90px;border:1px solid #000;background-position:left top;" id="container"></div>
<div id="info"></div>
URL to an image: <input type="text" id="url" style="width:400px;" />
<br />
<input type="button" value="Fit images" onClick="fitImage(document.getElementById('url').value)" />
  

Комментарии:

1. <div style=»width: 180px; height: 180px; border:1px solid #000;background-position: вверху слева;background-image:url(‘

google.com/images/logos /… >

2. Но этот трюк плохо работает, если ширина исходного изображения больше высоты.

3. Я изменил его, чтобы вместо этого использовать JavaScript. Взгляните на пример по ссылке

4. Это работает в любом случае. Тем не менее, решение попадает в DOM несколько раз. Было бы неплохо решить это с помощью чистого CSS, но, похоже, такого решения нет.

Ответ №2:

Вам просто нужно указать необходимую ширину и высоту в html-теге изображения следующим образом

 <img src="myimgae.jpg" width="90" height="90"/>
  

Комментарии:

1. Это повлияет на соотношение высоты / ширины.

2. если вы хотите сохранить соотношение, просто укажите ширину или высоту, и другое значение будет получено динамически.