Модератор форума: Yuri_G  
Подстройка размера картинки под разрешение экрана
fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 1 | 23:56:47
Все сайты, по макету вёрстки, можно разделить на три принципиальные группы: жестко фиксированные (Rigid fixed), адаптивные резиновые (Adaptable fluid) и расширяемые эластичные (Expandable elastic) макеты.

В данной теме, рассмотрим варианты подстройки элементов дизайна шапки, а именно - картинок, под резиновые макеты сайтов.

Делается это, обычно, тремя основными способами:
* Вёрсткой шапки, с использованием не фиксированных областей с фоном.
* Изменение параметров позиционированного изображения - разными способами.
* Изменение всего вида элементов методом динамического добавления/изменения стилей.



Вёрсткой шапки, с использованием не фиксированных областей с фоном.

Наиболее распространённой и кроссбраузерной, является конструкция вида:

HTML-код
Code
<table id="headerTb" width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
<td class="hdLeft"><div class="author">Copyright <b>2005-2011</b> <a class="flink" href="http://likbezz.ru/">«likbezz.ru»</a>, Оформление: <a class="flink" href="http://likbezz.ru/index/8-1" target="_blank">Flesh</a></div></td>
<td class="hdRight"> </td>
</tr>
</table>


CSS-стили:
Code
<style type="text/css">
/* StartStyle */
#headerTb{border-collapse:collapse;border-spacing:0;background:#1552ca url(_st/v00_h_bg.jpg) repeat-x left top;height:121px;}
td.hdLeft{background:url(_st/v00_h1.jpg) no-repeat left top;width:auto;vertical-align:top;}
td.hdRight{background:url(_st/v00_h2.jpg) no-repeat right top;width:445px;}
/* EndStyle */
</style>

...
В подобном исполнении, всё просто - рисуется шапка, в каком-нибудь графическом редакторе, например в фотошопе или кореле, нарезается на отдельные графические элементы (фрагменты):

картинка - слева:


картинка - справа:


и фон - по центру.

...
Для таблицы, в данном случае, прописывается фон, а ширина указывается в процентах - обычно 100%.
Ширина ячеек таблицы, в которых будут размещаться графические элементы, обычно прописывается в пикселах, но, как минимум, одна из ячеек таблицы должна иметь свободную ширину (auto).
То есть если ячеек две, как в данном случае, одной прописывается фиксированный размер, равный ширине картинки, второй устанавливается значение «auto» - то есть на всю оставшуюся ширину.

Сами картинки могут вставятся в предназначенные для них ячейки, как просто картинкой (тегом <img />), так и фоном.
В данном случае, картинки вставлены фоном, так как левая ячейка уже содержит текстовый блок - копирайт, а правая предполагает его наличие.

Здесь все просто - смотрим пример:

Пример ...

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


Изменение параметров позиционированного изображения

Масштабированием относительно родительского элемента.

В данном случае - таблица.

Сразу хочу отметить, что у браузера Internet Explorer небольшие проблемы с изменением размеров объекта - в данном случае - картинки.
Суть его в следующем:
Если у картинке реальная ширина равна, допустим 1024px, и необходимо чтобы при изменении ширины окна браузера это изображение растягивались/сужались пропорционально, то при сужении окна браузера ширина изображения в определенный момент “застревает” и не сужаются дальше. В результате чего оно выходит за пределы предполагаемого контента.
То бишь, изображения не сужаются меньше их фактического размера.

Обходится этот «баг» достаточно просто и заключается всего в одной строчке CSS-кода - в свойстве «table-layout: fixed», которое нужно применить к таблице, в которую заключено изображение.

Следовательно, если у вас картинка шапки заведомо больше, минимальной ширины сайта, нужно задать таблице этот параметр.
Задаётся он через стили (CSS) и имеет всего два аргумента: «auto» и «fixed».

Кроме того:
Если у изображения не указана высота, или указано значение «auto» - изображение масштабируется пропорционально (сохраняя соотношение сторон).
Если же высота указана конкретно (в любых положительных единицах измерения), то соотношение сторон нарушается и изображение масштабируется только в ширину, сохраняя заданную в высоту.

HTML-код:
Code
<table id="headerTb" width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
<td class="hdImg"><img class="topImg" src="/_content/_tpl/v00/_st/v00_h_1200.jpg" border="0" alt="" /></td>
</tr></table>


CSS-стили (изображение масштабируется пропорционально)
Quote (CSS)
<style type="text/css">
/* StartStyle */
#header{ height:auto;}
#headerTb{border-collapse:collapse;border-spacing:0;table-layout:fixed;background-color:#1552ca;height:121px;}
#headerTb img.topImg{width:100%!important;height:auto!important;-ms-interpolation-mode:bicubic;}
td.hdImg{vertical-align:top;}
/* EndStyle */
</style>


CSS-стили (изображение масштабируется линейно - в ширину)
Quote (CSS)
<style type="text/css">
/* StartStyle */
#header{ height:auto;}
#headerTb{border-collapse:collapse;border-spacing:0;table-layout:fixed;background-color:#1552ca;height:121px;}
#headerTb img.topImg{width:100%!important;height:125px!important;-ms-interpolation-mode:bicubic;}
td.hdImg{}
/* EndStyle */
</style>


Примеры:
Пропорционально-масштабируемая картинка ...

Линейно-масштабируемая картинка ...
...

И ещё:
Не все браузеры умеют правильно масштабировать изображения.
Opera, Safari и Google Chrome отобразят их почти без искажений.
А в Internet Explorer и Firefox (опаньки!) картинка исказится.

В MSIE искажения будет наиболее заметными.
Дело в том, что для ресемплинга (изменения размеров изображения) браузеры используют свой собственный, метод.

Например, если фактическая ширина изображения 200x200, но вы указываете, что его размеры должна быть 400x400 (увеличиваете), то изображение будет растянуто, используя «nearest-neighbor» алгоритм масштабирования - по соседним пикселям - то бишь замыливание, если не указано иное.

Если же наоборот, вы уменьшаете изображение, то будет использоваться «bicubic» - бикубический режим сглаживания.

В Internet Explorer «nearest-neighbor» является значением по-умолчанию, но есть возможность принудительно задать необходимый режим, в зависимости от начальных размеров и качества вашей картинки.

Делается это через CSS, свойством «-ms-interpolation-mode».

Оно может принимать два значения:
Quote (Info)
-ms-interpolation-mode:nearest-neighbor; - Всегда используется интерполяция по соседним пикселам.
-ms-interpolation-mode:bicubic; - Всегда используется высококачественный бикубический режиме интерполяции.


Internet Explorer v6 - не поддерживает данную функцию.

В примерах, так как картинка изначально больше минимальной ширины контент блока, задан бикубический режим сглаживания:
Quote
#headerTb img.topImg{width:100%!important;height:auto!important;-ms-interpolation-mode:bicubic;}

...


Изменение параметров позиционированного изображения

Масштабирование относительно родительского элемента.

В данном варианте - блоком-обёрткой, позиционированному относительно его исходного положения (position:relative).

Суть его в том - создается дополнительный блок-обертка, для которого устанавливается position:relative и в него помещается картинка (<img />), используемая в качестве фона.

Для того, чтобы картинка не висела на первом плане, загораживая собой возможный внутренний контент шапки - текст, другие картинки, прочее - блоку-обёртке назначают z-index:1, а картинке, что будет выступать в роли фона, тоже задают позиционирование (так как только позиционированным элементам можно задать атрибут - z-index - кроме position:static;) и атрибут z-index:-1, смещая тем самым её (по z-оси) на задний план.

Чтобы управлять положением блока с контентом внутри блока с картинкой, применяется абсолютное позиционирование и/или поля/отступы.
Блоки вне обёртки, позиционируются как и обычно.

HTML-код:
Quote (HTML)
<div id="wrapBox">
<div id="selfBox"><div class="author">Copyright 2005-2011 <a class="flink" href="http://likbezz.ru/">«likbezz.ru»</a>, Оформление: <a class="flink" href="http://likbezz.ru/index/8-1" target="_blank">Flesh</a></div></div>
<img class="topImg" src="/_content/_tpl/v00/_st/v00_h_1200.jpg" alt="" />
</div>

Где:
<div id="selfBox"> ... </div> - дополнительный контент - в данном случае - копирайт.
<img class="topImg" /> - картинка.

CSS-стили:
Quote
<style type="text/css">
/* StartStyle */
#header{height:auto;}
#wrapBox{position:relative;width:100%;height:auto;z-index:0;}
#selfBox{width:100%;position:absolute;}
#wrapBox img.topImg{display:block;position:relative;top:0;left:0;width:100%;height:100%;z-index:-1;}
/* EndStyle */
</style>


Пример ...

Кроме того:
Так же как и в примере выше, если у изображения не указана высота, или указано значение «100%» - изображение масштабируется пропорционально.
Если же высота указана конкретно, в любых положительных единицах измерения, то не пропорционально, а только в ширину, сохраняя заданную в высоту.

Пример - высота зафиксирована размером в 125px ...

Всё написанное выше - моё личное мнение и на абсолютную правоту не претендует.
Есть вопросы лично ко мне - пиши сюда: http://likbezz.ru/forum/8
LorD4683
Сообщений: 4
Репутация: 0

Сообщение # 196 | 01:18:29
Здравствуйте, помогите пожалуйста!!! У меня не получается вообще... Шапка состоит из 2 картинок.
При изменении масштаба странички Левая картинка размножается...
Объясните мне как чайнику куда и что нужно вписать пожалуйста... =((( Несовсем понимаю HTML и CSS
Пошагово напишите пожалуйста куда зайти и что куда написать. Заранее благодарен.

Вот мой сайт Motolove.ucoz.ru

Добавлено (06 Фев 2014, 01:18:29)
---------------------------------------------

Цитата LorD4683 ()
Здравствуйте, помогите пожалуйста!!! У меня не получается вообще... Шапка состоит из 2 картинок. При изменении масштаба странички Левая картинка размножается...
Объясните мне как чайнику куда и что нужно вписать пожалуйста... =((( Несовсем понимаю HTML и CSS
Пошагово напишите пожалуйста куда зайти и что куда написать. Заранее благодарен.

Вот мой сайт Motolove.ucoz.ru

Как мне сделать чтоб сайт подстраивался к любому (комьютеру/размеру)??
ПОЖАЛУЙСТА ПОДСКАЖИТЕ =(((
Miss_Esq
Сообщений: 13859
Репутация: 4159
Уровень замечаний:

Сообщение # 197 | 01:31:15
LorD4683,
Цитата
Как мне сделать чтоб сайт подстраивался к любому (комьютеру/размеру)??
Сменить тип макета, переделать всё ... Двумя шагами это не сделать, резиновый разве что, будет растягиваться под ширину монитора, разрешение экрана ..

LorD4683
Сообщений: 4
Репутация: 0

Сообщение # 198 | 01:47:33
Цитата Miss_Esq ()
Сменить тип макета, переделать всё ... Двумя шагами это не сделать, резиновый разве что, будет растягиваться под ширину монитора, разрешение экрана ..

Ну а как резиновый сделать? =( Чтоб посмотреть как это будет выглядеть.
Miss_Esq
Сообщений: 13859
Репутация: 4159
Уровень замечаний:

Сообщение # 199 | 01:54:08
LorD4683, Он у вас и так резиновый, меняйте масштаб, всегда во всю ширину монитора ...
А для пропорционального масштабирования страницы сайта относительно окна обозревателя, отображения независимо от разрешения, это динамично эластичный тип макета ...
Но для DEE нужно хорошо разбираться в HTML и CSS и уметь работать с полноразмерными HTML редакторами ...

LorD4683
Сообщений: 4
Репутация: 0

Сообщение # 200 | 02:01:08
Цитата Miss_Esq ()
LorD4683, Он у вас и так резиновый, меняйте масштаб, всегда во всю ширину монитора ... А для пропорционального масштабирования страницы сайта относительно окна обозревателя, отображения независимо от разрешения, это динамично эластичный тип макета ...
Но для DEE нужно хорошо разбираться в HTML и CSS и уметь работать с полноразмерными HTML редакторами ...

Ну вы видели что происходит с моей шапкой при изменении размера?
Как мне сделать чтоб моя левая картинка не размножалась?
Цитата Miss_Esq ()
Сменить тип макета, переделать всё ...

Это как? Я хочу научиться)
Может мне надо что-нибудь вставить в html шаблон или в css шаблон?

Вот что у меня написанно в Html шаблоне в верхней части сайта

<br />
<table border="0" cellpadding="0" cellspacing="0" height="240" width="100%" style="background:url('http://motolove.ucoz.ru/De3ain/levaja1.jpg') #000000;">
<tr>
<td><table cellpadding="0" cellspacing="0" border="0" height="240"><tr><td height="40" style="padding-left:20px;color:#СССССС;">$WDAY$, $DATE$, $TIME$<br /><?if($USERS_ON$)?><?if($USER_LOGGED_IN$)?><!--<s5200>-->Вы вошли как<!--</s>--> <a href="$PERSONAL_PAGE_LINK$"><b>$USERNAME$</b></a> | <!--<s3167>-->Группа<!--</s>--> "<u>$USER_GROUP$</u>"<?else?><!--<s5212>-->Приветствую Вас<!--</s>--> <b>$USERNAME$</b><?endif?><?endif?> <?if($RSS_LINK$)?>| <a href="$RSS_LINK$">RSS</a><?endif?></td></tr><tr><td height="80" style="vertical-align:top; padding-top:120px; padding-left:100px;"><span style="color:#FFFFFF;font:20pt bold Verdana,Tahoma;"><b><!-- <logo> --><!-- </logo> --></b></span></td></tr></table></td>
<td width="560" style="background:url('http://motolove.ucoz.ru/De3ain/pravaja_1.jpg');" valign="top" align="right">
<div style="padding-top:12px;padding-right:87px;"><a href="$HOME_PAGE_LINK$" title="Главная"><img src="/.s/t/451/2.gif" border="0" alt="Главная"></a></div>
<div style="padding-top:26px;padding-right:70px;"><?if($USERS_ON$)?><?if($USER_LOGGED_IN$)?><a href="$PERSONAL_PAGE_LINK$" title="Мой профиль"><img src="/.s/t/451/3.gif" border="0" alt="Мой профиль"></a><?else?><a href="$REGISTER_LINK$" title="Регистрация"><img src="/.s/t/451/4.gif" border="0" alt="Регистрация"></a><?endif?><?endif?></div>
<div style="padding-top:29px;padding-right:62px;"><?if($USERS_ON$)?><?if($USER_LOGGED_IN$)?><a href="$LOGOUT_LINK$" title="Выход"><img src="/.s/t/451/5.gif" border="0" alt="Выход"></a><?else?><a href="$LOGIN_LINK$" title="Вход"><img src="/.s/t/451/6.gif" border="0" alt="Вход"></a><?endif?><?endif?></div>
</td>
</tr>
</table>
Miss_Esq
Сообщений: 13859
Репутация: 4159
Уровень замечаний:

Сообщение # 201 | 02:23:33
LorD4683,
Цитата
Это как? Я хочу научиться)
начинать с нуля а не что то переделывать ...

<table border="0" cellpadding="0" cellspacing="0" height="240" width="100%" style="background:url('http://motolove.ucoz.ru/De3ain/levaja1.jpg') #000000;">

<table border="0" cellpadding="0" cellspacing="0" height="240" width="100%" style="background: # 000 url('http://motolove.ucoz.ru/De3ain/levaja1.jpg') no-repeat right top;">

Удлинить левую картинку в 2 раза, сделать плавный переход от изображения к чёрному от изображения мотоцикла влево ...

LorD463
Сообщений: 4
Репутация: 0

Сообщение # 202 | 02:58:35
Цитата Miss_Esq ()
начинать с нуля а не что то переделывать ... <table border="0" cellpadding="0" cellspacing="0" height="240" width="100%" style="background:url('http://motolove.ucoz.ru/De3ain/levaja1.jpg') #000000;">

<table border="0" cellpadding="0" cellspacing="0" height="240" width="100%" style="background: # 000 url('http://motolove.ucoz.ru/De3ain/levaja1.jpg') no-repeat right top;">

Удлинить левую картинку в 2 раза, сделать плавный переход от изображения к чёрному от изображения мотоцикла влево ...

Короче я удлинил изображение поменял фотки, и вроде норм)) motolove.ucoz.ru
Stariy
Сообщений: 4
Репутация: 0

Сообщение # 203 | 10:11:58
Здравствуйте. Описываю проблему - если включен "LightBox" в категориях: то картинка в оригинальном изображении открывается в новой красивой рамочке, но смещена вниз и отображается только половина её. Неделю назад все было хорошо (до выявления проблемы не рылся в настройках фотоальбома). Адрес - http://universe.ucoz.com/

Добавлено (14 Фев 2014, 10:11:58)
---------------------------------------------
Проблема решилась была изменена Версия библиотеки jQuery: с 1.7.2 на 1.10.2 cool Вернул обратно на 1.7.2, все отображается как надо.


WWW.UNIVERSE.UCOZ.COM - Наша Вселенная, всегда самая свежая информация о космонавтике,и нашей вселенной!
1irishka1
Сообщений: 5
Репутация: 0

Сообщение # 204 | 06:54:07
Помогите пожалуйста. Нужно сделать шапку резиновой:

<table cellpadding="0" cellspacing="0" border="0" width="100%" style="background: url('/.s/t/271/1.gif') #FFC388;" height="190">
<tbody><tr><td height="69" width="100%" align="center">
<table cellpadding="0" cellspacing="0" border="0" height="69" width="778" style="background: url('/.s/t/271/2.gif') left no-repeat;">
<tbody><tr><td><span style="color:#856B00;font:20pt bold Verdana,Tahoma; padding-left: 80px;"><!-- <logo> -->ECONIX - ЗАРАБОТОК<!-- </logo> --></span></td><td align="right" style="color:#9D8933;">$WDAY$, $DATE$, $TIME$<br><br><?if($USERS_ON$)?><?if($USER_LOGGED_IN$)?><!--<s5200>-->Вы вошли как<!--</s>--> <a href="$PERSONAL_PAGE_LINK$"><b>$USERNAME$</b></a> | <!--<s3167>-->Группа<!--</s>--> "<u>$USER_GROUP$</u>"<?else?><!--<s5212>-->Приветствую Вас<!--</s>--> <b>$USERNAME$</b><?endif?><?endif?> <?if($RSS_LINK$)?>| <a href="$RSS_LINK$">RSS</a><?endif?></td></tr>
</tbody></table></td></tr>
<tr><td height="121" width="100%" align="center"><img src="/3.jpg" alt=""></td></tr>
<tr><td height="24" align="center" width="100%" style="background: url('/.s/t/271/4.gif')">
<table cellpadding="0" cellspacing="0" border="0" height="24" width="778" style="background: url('/.s/t/271/5.gif')">
<tbody><tr><td width="108"><img src="/.s/t/271/6.gif" border="0"></td><td align="center" valign="top" style="padding-top: 3px;" class="top_menu"><a href="$HOME_PAGE_LINK$"><!--<s5176>-->Главная<!--</s>--></a> <?if($MODULE_URL$)?>| <a href="$MODULE_URL$">$MODULE_NAME$</a><?endif?> <?if($USERS_ON$)?><?if($USER_LOGGED_IN$)?> | <a href="$PERSONAL_PAGE_LINK$"><!--<s5214>-->Мой профиль<!--</s>--></a><?else?> | <a href="$REGISTER_LINK$"><!--<s3089>-->Регистрация<!--</s>--></a><?endif?><?endif?> <?if($USERS_ON$)?><?if($USER_LOGGED_IN$)?> | <a href="$LOGOUT_LINK$"><!--<s5164>-->Выход<!--</s>--></a><?else?> | <a href="$LOGIN_LINK$"><!--<s3087>-->Вход<!--</s>--></a><?endif?><?endif?></td><td width="108"><img src="/.s/t/271/7.gif" border="0"></td></tr>
</tbody></table>
</td></tr>
</tbody></table>

ЧТО НУЖНО ИЗМЕНИТЬ ИЛИ ПОДПИСАТЬ?
Miss_Esq
Сообщений: 13859
Репутация: 4159
Уровень замечаний:

Сообщение # 205 | 11:08:45
1irishka1, Попробуйте вместо красного написать width="100%"
<table cellpadding="0" cellspacing="0" border="0" width="100%" style="background: url('/.s/t/271/1.gif') #FFC388;" height="190">
<tbody><tr><td height="69" width="100%" align="center">
<table cellpadding="0" cellspacing="0" border="0" height="69" width="778" style="background: url('/.s/t/271/2.gif') left no-repeat;">

1irishka1
Сообщений: 5
Репутация: 0

Сообщение # 206 | 12:13:15
Спасибо, попробовала, но это не помогло. Растянулась другая картинка, которая содержит "Главная мой профиль выход". weep
Berecunda
Сообщений: 31
Репутация: 20

Сообщение # 207 | 16:33:46
sad Добрый день! У меня во всех браузерах сайт нормальный http://www.narodnyi-yurist.ru/ , а если захожу с планшета, то в шапке надписи и логотип сползают вниз, сама шапка не по всей ширине экрана айпада http://radikall.com/images/2014/02/28/VlwU0.jpg , а если с телефона захожу, там вообще дурдом, помогите пожалуйста в чем проблема?
Сообщение отредактировал Berecunda - Пятница, 28 Фев 2014, 16:45:08
Kotofei1194
Сообщений: 20
Репутация: 0

Сообщение # 208 | 23:46:49
Сайт http://stranstviakota.ucoz.ru/

Делаю на большом мониторе. Фотографии в рассказах фиксированной ширины и смотрятся хорошо и на широком мониторе и на маленьком нетбуке.
Но на планшете или смартфоне весь текст сползает вниз из-за ширины фотографии.
Как можно сделать фотографию, чтобы она изменялась пропорционально размеру экрана?
Фотографии загружаю ссылкой с Яндекса. Строка, например, выглядит вот так:
<div align="center"><img style="Border: 4px ridge rgb(105, 105, 105); margin-top: 6px;" alt="Ла Пальма" src="http://img-fotki.yandex.ru/get/9932/5429730.127/0_8b07f_9594cf5e_XXL.jpg" width="700"></div>

На принтскрине то, как это выглядит на широкоформатном мониторе

Заранее благодарю за помощь!
Прикрепления: 5148296.jpg (148.5 Kb)

Мой персональный сайт о путешествиях
http://stranstviakota.ucoz.ru/
1irishka1
Сообщений: 5
Репутация: 0

Сообщение # 209 | 06:55:06
Добрый день. Помогите с шапкой, смотрится ужасно, но никак не могу исправить http://www.aromacharm24.ru/
Вот скрин http://mepic.ru/view/?id=39642336dcb9531c7c714bed8290ee2b (на нем видно обрывчатый край шапки и сползающий рисунок).

Это шапка:
/* General Style */
body {background:#FFFFFF;margin:0;padding:0;}
#contanier {background:url('/.s/t/886/3.gif') repeat-x;}
#navBar {background:url('/.s/t/886/4.jpg') no-repeat;height:26px;padding-left:400px;}
#logoBlock {background:url('/51.jpg') no-repeat;padding-left:350px;height:150px;}
#logoBlock h1 {color:#775F10;font-size:25pt;font-weight:normal;font-family:Times New Roman;font-style:italic;}
.boxTable {width:206px;background:url('/.s/t/886/6.gif') repeat-y;}
.boxTitle {height:47px;background:url('/.s/t/886/7.gif') no-repeat;padding-top:20px;text-align:center;color:#FFFFFF;font-size:11pt;}
.boxContent {background:url('/.s/t/886/8.gif') bottom no-repeat;padding:5px 7px 40px 7px;}

Это нижний цветок шапки:
<table cellpadding="10" cellspacing="0" border="0" width="100%" style="background:url('/.s/t/886/1.jpg') center top no-repeat;">
Сообщение отредактировал 1irishka1 - Среда, 05 Мар 2014, 07:33:34
Miss_Esq
Сообщений: 13859
Репутация: 4159
Уровень замечаний:

Сообщение # 210 | 07:29:02
1irishka1, Адрес сайта с проблемой пишите ...

Поиск: