Модератор форума: 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
bandjuk
Сообщений: 6816
Репутация: 2398
Уровень замечаний:

Сообщение # 136 | 21:32:17
.eText img {max-width: 180px;}
SmerchCool
Сообщений: 6
Репутация: 0

Сообщение # 137 | 21:45:08
Цитата (SmerchCool)
http://g-cool.ru/publ/proverochnaja_statja/1-1-0-40 вот
А вот в кратком описании таже картинка автоматически уменьшалась

http://g-cool.ru/publ/ вот

Добавлено (23 Мар 2013, 21:35:30)
---------------------------------------------

Цитата (bandjuk)
.eText img {max-width: 180px;}
Извините, но куда именно это вставлять... я не знаю где в css находится блок статей, поможете?

Добавлено (23 Мар 2013, 21:45:08)
---------------------------------------------
bandjuk, Огромное спасибо! Я разобрался))) Если у вас есть киви кошелек, то можете его сообщить и я готов отблагодарить вас за помощь)))) Еще раз, Большое спасибо)

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

Сообщение # 138 | 22:58:13
Уважаемые Господа! Помогите, кто сможет.
Делал сайт используя практически все исходные настройки "по умолчанию" - ну не силен я в HTML, к сожалению... Оно все бы ничего, но в школах все чаще стали попадаться "широкие" мониторы, на которых информацию на нашем сайте стало читать чуть ли не вертя головой. Растягивается текст сообщений во весь экран - очень неудобно, да и первоначально задуманный дизайн теряется. Я так понял, что происходит это из-за того, что ширина крайних контейнеров прописана в пикселях, а средней колонки - в процентах. Однако, попытки менять проценты в "управлении дизайном модуля" ни к чему не приводят, а прописка ширины средней колонки (в рх) уменьшает ширину текста материала, но ширина колонки остается прежней. Очевидно необходимо более глубокое "копание", но боюсь испортить сайт. Помогите, pleasе... Сайт: http://nosivka-syut.at.ua/

Добавлено (23 Май 2013, 22:58:13)
---------------------------------------------
Ну раз никто не откликается, доложу результат своих скромных изысканий в теме изложенной мной выше.

Шапку и низ сайта сделал шириной 1024рх. Это просто. А вот ширина средней колонки видно задается глобально для всех страниц сайта. Ширина текста внутри средней колонки тоже поддается "пиксельной" регулировке, а ширина самой колонки - нет. В CSS не разбираюсь, но если бы кто подсказал где и как, то, может быть, и разобрался бы. Тапочками прошу не бросать. Свое образование я получал тогда, когда еще и микросхем не было, не говоря о ПК. Результат описанных экспериментов http://saytick.ucoz.ru/ (баг видно при разрешении более 1024рх). Спасибо.
Сообщение отредактировал VasilVas - Четверг, 23 Май 2013, 22:59:38
Middl
Сообщений: 244
Репутация: 46

Сообщение # 139 | 00:17:25
VasilVas, пробовали задать свойства для eMessage в Таблице стилей CSS?

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

Сообщение # 140 | 10:31:55
[b]Middl, спасибо за отклик.[/b]
Вот фрагмент с таблицы стилей CSS, который, как мне кажется, может иметь отношение к моей проблеме. Не найду где задана ширина средней колонки сайта?


Добавлено (02 Июн 2013, 10:31:55)
---------------------------------------------
Цитата Middl
Цитата
VasilVas, пробовали задать свойства для eMessage в Таблице стилей CSS?


Господа! Проблема с установкой ширины средней колонки в пикселях. Подробно изложено в посте 138. Спасибо Middl - он подсказал где копать. Пока самостоятельно не получается разобраться.
Сообщение отредактировал VasilVas - Воскресенье, 02 Июн 2013, 10:37:01
Miss_Esq
Сообщений: 13859
Репутация: 4159
Уровень замечаний:

Сообщение # 141 | 20:28:49
VasilVas, Зафиксируйте ширину средней колонки ...

</td>

<td valign="top" style="padding: 0px 10px 0px 10px; width: 800px;">

или вообще ширину шаблона

есть

Код
<table cellpadding="0" cellspacing="0" border="0" width="100%" style="padding-left: 10px; padding-right: 10px;">
<tr>
<td align="center">
<!-- <middle> -->


написать

Код
<table cellpadding="0" cellspacing="0" style="padding: 0px 10px; border: 0px; width: 1024px;">
<tr>
<td align="center">
<!-- <middle> -->

Сообщение отредактировал Miss_Esq - Понедельник, 03 Июн 2013, 20:31:41
VasilVas
Сообщений: 15
Репутация: 0

Сообщение # 142 | 01:11:59
Miss_Esq, спасибо огромное. Значит, все таки, копать нужно было в "Редакторе страниц"! К сожалению, получилось не все. А именно, получилась "Главная страница" и "Обратная связь". Остальные "Каталог файлов", "Каталог статей", "Блог", "Форум", "Фотоальбомы" и "Гостевая книга" - проблема осталась...
Не могли бы еще немножко подсобить? Вот мой редактор страниц до моего вмешательства:

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>$SITE_NAME$ - $MODULE_NAME$</title>
<?$META_DESCRIPTION$?>
<link type="text/css" rel="StyleSheet" href="/_st/my.css" />
</head>
<body style="background: #FFFFFF; margin:0px; padding:0px;">
$ADMIN_BAR$
$GLOBAL_AHEADER$
<table cellpadding="0" cellspacing="0" border="0" width="100%" style="padding-left: 10px; padding-right: 10px;"><tr><td align="center">
<!-- <middle> -->
<table border="0" cellpadding="0" cellspacing="3" width="100%" style="border: 3px double #FFD17B; background: #FFF9EF;">
<tr>
<td valign="top" width="200">
$GLOBAL_CLEFTER$
</td>
<td valign="top" style="padding:0px 10px 0px 10px;">
<table border="0" cellpadding="10" cellspacing="0" width="100%" style="border:1px solid #CBB592;"><tr><td style="background:#FFFFFF;"><!-- <body> -->$CONTENT$<!-- </body> --></td></tr></table>
</td>
<td valign="top" width="200">
$GLOBAL_DRIGHTER$
</td>
</tr>
</table>
<!-- </middle> -->
</td></tr></table>
$GLOBAL_BFOOTER$
</body>
</html>

А это с внесенными подсказанными Вами изменениями:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>$SITE_NAME$ - $MODULE_NAME$</title>
<?$META_DESCRIPTION$?>
<link type="text/css" rel="StyleSheet" href="/_st/my.css" />
</head>
<body style="background: #FFFFFF; margin:0px; padding:0px;">
$ADMIN_BAR$
$GLOBAL_AHEADER$
<table cellpadding="0" cellspacing="0" style="padding: 0px 10px; border: 0px; width: 1024px;">
<tr>
<td align="center">
<!-- <middle> -->
<table border="0" cellpadding="0" cellspacing="3" width="100%" style="border: 3px double #FFD17B; background: #FFF9EF;">
<tr>
<td valign="top" width="200">
$GLOBAL_CLEFTER$
</td>
<td valign="top" style="padding:0px 10px 0px 10px;">
<table border="0" cellpadding="10" cellspacing="0" width="100%" style="border:1px solid #CBB592;"><tr><td style="background:#FFFFFF;"><!-- <body> -->$CONTENT$<!-- </body> --></td></tr></table>
</td>
<td valign="top" width="200">
$GLOBAL_DRIGHTER$
</td>
</tr>
</table>
<!-- </middle> -->
</td></tr></table>
$GLOBAL_BFOOTER$
</body>
</html>

Добавлено (04 Июн 2013, 01:11:59)
---------------------------------------------
ВСЕ ПОНЯЛ. ОГРОМНОЕ СПАСИБО! Но работы не мало, конечно...

Miss_Esq
Сообщений: 13859
Репутация: 4159
Уровень замечаний:

Сообщение # 143 | 09:32:24
VasilVas,
Цитата
Остальные "Каталог файлов", "Каталог статей", "Блог", "Форум", "Фотоальбомы" и "Гостевая книга" - проблема осталась...
Во всех шаблонах всех модулей менять нужно ..

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

Сообщение # 144 | 01:34:58
Да, на тренировочном сайтике я уже все сделал. Получается, что еще нужно и шапку и низ сайта центрировать (иначе, при уменьшении все будет "съезжать" влево) и фиксировать ширину, чтоб шапка и низ не растягивались во весь экран. Осталось теперь одно неудобство: не найду, где прописывается ширина окошка для админа и зарегистрированных пользователей, та, что имеет вид:
Общие Управление Добавление Пользователи Конструктор и т.д.
Пока, при уменьшении сайта, эта "линейка инструментов" растягивается во всю ширину экрана монитора. Хотя это уже и не существенно в принципе. Спасибо за помощь.
Сообщение отредактировал VasilVas - Среда, 05 Июн 2013, 01:45:43
Darkmonk
Сообщений: 2
Репутация: 0

Сообщение # 145 | 15:29:16
Ребят, помогите разобраться. Почему сайт меняет структуру при разных разрешениях
Фото с ipad при горизонтальном положении
http://imageshack.us/download/855/6afq.jpg
Фото с ipad при вертикальном положении
http://imageshack.us/download/443/ekxg.jpg

Скажите как сделать чтоб при вертикальном положении меню не съезжало в 2 ряда? И чтоб боковые края фона не обрезались? Только пожалуйста доступно :))

Добавлено (03 Июл 2013, 15:29:16)
---------------------------------------------
Кто нибудь.. пацаны)
Selena
Сообщений: 15657
Репутация: 1100

Сообщение # 146 | 15:36:42
Darkmonk, дайте нормальные ссылки на изображение, никто тут ничего качать не будет. Или уж на сайт сразу ссылку дайте.

Отправляя сообщение о помощи, приводите ссылку на свой сайт. Это не считается рекламой, зато снимает массу вопросов.
Darkmonk
Сообщений: 2
Репутация: 0

Сообщение # 147 | 15:43:44
SelenaПрошу прощенья) вот http://testik37.at.ua/
Selena
Сообщений: 15657
Репутация: 1100

Сообщение # 148 | 16:18:25
Darkmonk, у кнопок фиксированная ширина. Это даже лучше, что меню становится в два ряда, а не горизонтальный скролл появляется.
Вы бы ещё в микроскоп смотрели, понимать же надо, что графика имеет ограничения, не всё можно уменьшать до бесконечности.

Отправляя сообщение о помощи, приводите ссылку на свой сайт. Это не считается рекламой, зато снимает массу вопросов.
exavier3737
Сообщений: 11
Репутация: 1

Сообщение # 149 | 12:33:28
Всем доброго времени суток! У меня возникла трудность при создании сайта - http://shubki.ucoz.com/
На сайте в шапке есть кнопки вход, регистрация
прописывал я их кодом -
<layer name="lenta" top="0" right="0">
<div style="position:absolute; top:70; right:200;">
<a href="" title="Текст при наведении курсора на изображения" target="_blank_"><img border="0" src="url адрес изображения" align="right"></a>
</div>
</layer>
Так вот вопрос - У меня на компе и на ноуте все нормально отображается, а если кто-то зайдет с компа на котором установлено разрешение например 1024x768, то кнопки сдвинутся, как сделать чтобы они не двигались из-за разрешения?
SOCHI1014
Сообщений: 863
Репутация: 229

Сообщение # 150 | 18:38:06
Присвоим картинке значение img1
<div id="img1" style="padding-left:1px;float:left;"><img src="ссылка на картинку№1"></div>
Присвоим картинке значение img2
<div id="img2" style="padding-right:1px;float:right;"><img src="ссылка на картинку№2"></div>

Поиск:
Telegram
Будьте в курсе всех обновлений: подпишитесь на наш официальный Telegram-канал uCoz и задавайте вопросы в чате сообщества!