Пропорциональное центрирование картинки на бекграунде
Здравствуйте.
Подскажите пожалуйста, как отцентрировать пропорционально изображение в зависимости от размеров экрана? Есть такой код Проверяем высоту экрана и изображения, если высота изображения меньше присваиваем ему высоту окна, ширину при это auto. Если высота изображения больше ширины экрана, присваиваем ширину.
function backCover(){
var hWindow = $(window).height();
var wWindow = $(window).width();
var hElem = $('.back-cover').find('img').height();
// alert(1.2*wWindow)
if(hElem < hWindow){
$('.back-cover').find('img').css({
height: hWindow,
width:'auto'
});
}
else{
$('.back-cover').find('img').css({
height:'auto',
width:1.2*wWindow
// marginTop:-0.5*$('img').height(),
// marginLeft:-0.5*$('img').width()
});
}
}
Но скрипт работает странно. В чем моя ошибка? |
вы хотите изображение на весь экран сделать?
|
Да, чтобы оно растягивалось пропорционально.
|
Александр222, выбрать картинку -- создать новую на основе её src картинку -- вычислить коэфициент соотношения ширины и высоты -- присвоить первоначальной ширину или высоту окна -- которая из них меньше -- а второй параметр высоту или ширину умножить на полученный ранее коэфициент или 1/коэфициент
2 способ присваивать только или ширину или высоту -- в современных браузерах обычно этого достаточно -- вторая величина увеличится пропорционально |
Александр222,
про background-size слышали? |
даже написал)) точнее спер)
<html>
<head>
<title>example</title>
<style>
div
{
width: 300px;
height: 400px;
background-image: url(my_image);
#background-size: cover;
overflow-y: hidden ! important;
overflow-x: hidden ! important;
background-color: #f8f8f8;
background-size: contain;
background-repeat: no-repeat;
background-position: right;
}
</style>
</head>
<body>
<div style=""></div>
</body>
</html>
|
центрирование картинки пропорционально по размерам видимой части
Александр222,
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
* {
margin: 0px;
padding: 0px;
}
img{
position: absolute;
}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
jQuery.fn.fullCenter = function () {
var hWindow = $(window).height()+ 16;
var wWindow = $(window).width() + 16;
this.each(function (indx, element) {
var el = $(element);
var h = el.outerHeight(true);
var w = el.outerWidth(true);
var l = Math.min(hWindow, wWindow);
if (hWindow * (h / w) > wWindow * (w / h)) el.css({
height: hWindow,
marginLeft: (wWindow - w * (hWindow / h)) / 2
});
else el.css({
width: wWindow,
marginTop: (hWindow - h * (wWindow / w)) / 2
})
});
return this
};
$(window).load(function () {
$("img").fullCenter()
});
</script>
</head>
<body>
<img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" alt="">
<img src="http://tovar2.ru/userfile/%F0%EE%FF%EB.jpg" alt="">
<img src="http://img-fotki.yandex.ru/get/11/oleg-ivanov1966.20/0_2fa57_e915327f_XL" alt="">
</body>
</html>
|
http://joxi.ru/0rvIU_3JTJBvDlzP5EM
Появляются пробелы. Растянуть картинку на всю ширину просто, а растянуть пропорционально, чтобы не было пробелов - трудно. Какая ошибка в мною приведенном коде? Почему он работает мягко говоря "лагая" Логика должна быть такой думаю
if(hElem < hWindow){
$('.back-cover').find('img').css({
height: hWindow,
width:'auto'
});
}
else{
$('.back-cover').find('img').css({
height:'auto',
width:1.2*wWindow
});
}
|
Вот пример
http://www.benthomsonphoto.com/ |
Александр222, на всякий случай
1. $(window).load 2. подобрать +16 -- это ширина полосы прокрутки -- обычно +20 и сам код выше вы проверяли? |
| Часовой пояс GMT +3, время: 17:06. |