Модератор форума: 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
-Bandit-
Сообщений: 42
Репутация: 0

Сообщение # 106 | 00:13:50
Доброго времени суток господа.
Все прочитал но что то полезного для себя не нашел

Вопрос такой если я меняю масштаб сайта то задний фон меняется не так как нужно может кто поможет,

Вот сайт http://russianlions.ucoz.com/

Я только учусь ucoz
Rad_van_Cor
Сообщений: 1179
Репутация: 437

Сообщение # 107 | 04:31:27
Quote (-Bandit-)
может кто поможет

Замени это

Code
<body style="background-image:url(/hinter.png)">

на это

Code
<body style="position:center; background:url(/hinter.png) 50% 0px #000000 no-repeat;-webkit-background-size: 100% auto;-o-background-size: 100% auto;-moz-background-size: 100% auto;background-size: 100% auto;">

Сообщение отредактировал Rad_van_Cor - Вторник, 27 Ноя 2012, 10:39:04
-Bandit-
Сообщений: 42
Репутация: 0

Сообщение # 108 | 04:43:36
Спасибо реально подмок

Я только учусь ucoz
djeburg66
Сообщений: 17
Репутация: 0

Сообщение # 109 | 16:00:18
Подскажите пожалуйста, делал шапку на экране 1152*864, а на работе зашел с ноутбука на сайт и увидел, что шапка не доходит до правой стороны экрана (т.е. справа от шапки еще место есть). #logoPick {float:right;width:69%;background:url('сайт') no-repeat #D3F1FD;height:131px;max-width:1024px;} вот мой код, что здесь нужно поменять? 
Еще проблема возникала при создании сайта, стандартная шапка была в виде панорамной картинки размеров 1024*131, но свою шапку я не смог ни в каком редакторе подогнать под эти размеры, пришлось вставлять картинку чуть больше по размерам. Как картинку еще можно подогнать под нужные размеры?
И просьба, объясните общедоступным языком)))
Заранее очень благодарен Вам.
Miss_Esq
Сообщений: 13859
Репутация: 4159
Уровень замечаний:

Сообщение # 110 | 17:28:00
djeburg66, Адрес у сайта есть ??

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

Сообщение # 111 | 12:22:55
Quote (Miss_Esq)
Адрес у сайта есть ??
specgruz75.ucoz.ru
antoha777
Сообщений: 7
Репутация: 0

Сообщение # 112 | 17:36:24
Здравствуйте. Подскажите кто знает, а как быть с горизонтальным меню? Ну то есть чтоб оно тоже "масштабировалось" по разрешение экрана. вот мой код
<style> #menu {list-style-type:none; margin:-6px 0 auto 0px; padding:0;}#menu li {float:left; padding:0; margin:0 1px 0 0; position:relative; width:150px; height:1em; z-index:100;}#menu li dl {position:absolute; top:0; left:30;}#menu li a, #menu li a:visited {text-decoration:none;}#menu li dd {display:none;}#menu li:hover, #menu li a:hover {border:0;}#menu li:hover dd, #menu li a:hover dd {display:block;}#menu li:hover dl, #menu li a:hover dl {padding-bottom:20px;}#menu table {border-collapse:collapse; padding:0; margin:-1px; font-size:1em;}#menu dl {width: 100%; margin: 0; padding: 0; background: #9FC2D7 url(http://moydomik.ucoz.com/dis/men/bottom.gif) no-repeat bottom left; text-align:center; cursor:pointer;}#menu dt {margin:0; padding: 5px; font-size: 0.9em; color: #fff; border-bottom:1px solid #444;}#menu .one {background:#9FC2D7 url(http://moydomik.ucoz.com/dis/men/top.gif) no-repeat top left;}#menu .two {background: #9FC2D7 url(http://moydomik.ucoz.com/dis/men/top.gif) no-repeat top left;}#menu .three {background: #9FC2D7 url(http://moydomik.ucoz.com/dis/men/top.gif) no-repeat top left;}#menu .four {background: #9FC2D7 url(http://moydomik.ucoz.com/dis/men/top.gif) no-repeat top left;}#menu dd {margin:0; padding:0; color: #fff; font-size: 1em; background: #47a; text-align:left;}#menu dd.last {border-bottom:1px solid #444;}.gallery dt a, .gallery dt a:visited {display:block; color:#000000;}.gallery dd a, .gallery dd a:visited {color:#fff; text-decoration:none; display:block; padding:4px 5px 4px 20px;background: #47a url(http://moydomik.ucoz.com/dis/men/arrowr.gif) no-repeat 10px 10px; width:125px;}.gallery dd a:hover {background: #258 url(http://moydomik.ucoz.com/dis/men/arrowr.gif) no-repeat 11px 10px; color:#9cf;}</style>
admin1769
Сообщений: 1
Репутация: 0

Сообщение # 113 | 20:24:03
Доброго!

Подскажите, пожалуйста, что нужно в коде прописать чтобы картинка в шапке сайта растягивалась на 80% по ширине экрана, но по высоте осталось прежние 300px. Использую шаблон 873. На широкоформатных экранах сайт заполняет только 1/3 экрана.
Догадываюсь, что нужно изменить эту строчку, но какие параметры прописать пока никак не пойму.
#mainBlock {width:800px;text-align:center;margin-left:auto;margin-right:auto;background:url('/.s/t/873/3.jpg') no-repeat #FFFFFF;}

сайт

Добавлено (12-Дек-2012, 20:24:03)
---------------------------------------------
Отлично, разобрался самостоятельно. Код изменил на следующий. Чуть размазывается картинка, но происходит заполнение страницей экрана более равномерно
#mainBlock {width:90%;text-align:center;margin-left:auto;margin-right:auto; background:url('/.s/t/873/3.jpg') no-repeat #FFFFFF; background-size: 100% 300px}

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

Сообщение # 114 | 13:04:15
Может найдется тот, кто поможет мне?
Хотелось, чтобы изображение подстраивалось под нужный размер экрана. Как это реализовать для этой страницы: http://avtcrtd.ucoz.ru/index/gallereja_izo/0-85 ??????
EARL2921
Сообщений: 8
Репутация: 0

Сообщение # 115 | 16:43:45
Здравствуйте.
У была такая проблема: нужно было сделать так, чтобы шапка, которая представлена в виде одного изображения, которое никак нельзя поделить на 3 части (панорамное фото) подходила под все виды мониторов. Решение я нашел следующее, поставил вот этот скрипт:
Код
</table>    
   <div class="borderwrap">    
   <img id="mylogo" src="Ссылка на шапку" />    
   <style type="text/css">    
   #mylogo {width: 100%; margin: 0 0 0 0;}    
   </style>    
   </table>

шапка прекрасно подстраивается под разные мониторы, только теперь утратилась функция ввода названия сайта на шапке. Как мне быть? Подскажите пожалуйста.
brodyaga30
Сообщений: 491
Репутация: 146

Сообщение # 116 | 17:36:38
Цитата (NN1459)
Может найдется тот, кто поможет мне?
почитайте тут

Цитата (EARL2921)
поставил вот этот скрипт
это не скрипт, а сочетание html и css
Цитата (EARL2921)
утратилась функция ввода названия сайта на шапке
т.е. код $SITE_NAME$ и вроде есть ещё $LOGO$ или как-то так, можно посмотреть в инструкции по созданию шаблонов для конструктора в ПУ не работает ?

Понял тебя, тридцатый ...
EARL2921
Сообщений: 8
Репутация: 0

Сообщение # 117 | 17:40:31
brodyaga30 а не подскажите как соединить эти 2 кода, чтобы получить один полнофункциональный?
brodyaga30
Сообщений: 491
Репутация: 146

Сообщение # 118 | 22:09:22
Цитата (EARL2921)
как соединить эти 2 кода
что соединить ? ... $SITE_NAME$ и ... прописать их в шаблоне ... или о чём Вы спрашиваете

Понял тебя, тридцатый ...
EARL2921
Сообщений: 8
Репутация: 0

Сообщение # 119 | 11:27:17
Цитата (brodyaga30)
что соединить ? ... $SITE_NAME$ и ... прописать их в шаблоне ... или о чём Вы спрашиваете
Да. Куда нужно вставить $SITE_NAME$ вот в этот код?
Код
</table>     
    <div class="borderwrap">     
    <img id="mylogo" src="Ссылка на шапку" />     
    <style type="text/css">     
    #mylogo {width: 100%; margin: 0 0 0 0;}     
    </style>     
    </table>
Miss_Esq
Сообщений: 13859
Репутация: 4159
Уровень замечаний:

Сообщение # 120 | 11:51:54
EARL2921,

Добавлено (28 Фев 2013, 11:51:54)
---------------------------------------------


Сообщение отредактировал Miss_Esq - Четверг, 28 Фев 2013, 11:47:53
Поиск:
Telegram
Будьте в курсе всех обновлений: подпишитесь на наш официальный Telegram-канал uCoz и задавайте вопросы в чате сообщества!