Задача:
Дизайнер нарисовал макет страницы, на заднем фоне которой была картинка. Я сначала было решил, что это фон который увеличивается по ширине в зависимости о разрешения монитора.
Но не тут то было. Дизайнер настаивал на то, что это масштабируемая картинка, которая сужается / растягивается при изменение окна приложения и по ширине и по высоте.
Заранее предупредив заказчика – что картинка будет грузиться 1 и в максимальном разрешении – его определили как 1600, приступил к работе.
Теория:
Для реализации данной функциональности, нам необходимо будет поиграться с абсолютным позиционированием. Так как фон масштабировать мы не можем – придется положить на нижний слой изображение которое будет пропорционально масштабироваться, а сверху нее уже положиться сетку сайта.
Схематическое представление приведено на рисунке.

Практика
HTML:
CSS:
Использовать либо xaк для ie6 "_", либо conditional comments — это дело вкуса.<br / >Просьба не устраивать холиваров :)
Все вроде бы хорошо, но нам установить высоту блока обертки картинки (div id=«main») равной = высоты слоя с данными div id=«page» + 400px — высота отсупа от картинки, в противном случае у нас контент сайта и картинка будут жить отдельными жизнями. Для данной цели мы задействуем JS, который мы повесим на onload
JS
Пример
Из за баннера хостинга в FF белая полоса :) в IE все путем
Bug Fix
Забыл про большие мониторы для этого вычисляем высоту окна
Изменение в CSS
Буду рад, если кому-то пригодится.
Дизайнер нарисовал макет страницы, на заднем фоне которой была картинка. Я сначала было решил, что это фон который увеличивается по ширине в зависимости о разрешения монитора.
Но не тут то было. Дизайнер настаивал на то, что это масштабируемая картинка, которая сужается / растягивается при изменение окна приложения и по ширине и по высоте.
Заранее предупредив заказчика – что картинка будет грузиться 1 и в максимальном разрешении – его определили как 1600, приступил к работе.
Теория:
Для реализации данной функциональности, нам необходимо будет поиграться с абсолютным позиционированием. Так как фон масштабировать мы не можем – придется положить на нижний слой изображение которое будет пропорционально масштабироваться, а сверху нее уже положиться сетку сайта.
Схематическое представление приведено на рисунке.

Практика
HTML:
<div id="page"><br> <div id="left"><br> Меню<br> <br> </div><br> <div id="right"><br> Контент<br> </div><br></div><br><br><div id="main"><br> <div class="foot"><br> <ul><br> <li><a href="#" title="О компании">О компании</a></li><br> <li><a href="#" title="Контакты">Контакты</a></li><br> </ul><br> <div class="contacts"><br> <span class="copy">Copyright; © 2009</span><br> </div><br> </div><br><!--Растягивающаяся картинка--><br> <div class="img"><img src="img/back_001.jpg" width="100%" alt="" title="" /></div><br></div><br><br>* This source code was highlighted with Source Code Highlighter.
CSS:
- html {
- height:100%;
- }
- body {
- margin: 0; padding: 0;
- height: 100%;
- }
- a {
- outline:none;
- }
- /*Обертка картинки*/
- #main {
- position: relative;
- z-index: 1;
- height:100%;
- }
- /*Сам слой с картиной*/
- #main div.img {
- display: block;
- position: absolute;
- bottom:0; /*картинка всегда будет находиться внизу страницы*/
- z-index: 10;
- min-width: 1000px;
- width: 100%;
- _width: expression((documentElement.clientWidth||document.body.clientWidth)<1004?'1004px':'100%');
- }
- /*Слой с копирайтами и нижнее меню*/
- #main div.foot {
- position: absolute;
- bottom: 80px;
- z-index: 20;
- width:100%;
- height: 30px;
- min-width: 1000px;
- _width: expression((documentElement.clientWidth||document.body.clientWidth)<1004?'1004px':'100%');
- }
- #main div.foot ul {
- list-style:none;
- font: normal 12px Verdana;
- margin: 14px 0 0 75px;
- padding: 0;
- }
- #main div.foot ul li {
- display: inline;
- margin: 0 120px 0 0;
- }
- #main div.foot ul li a, #main div.foot ul li a:visited {color: #faffcd;}
- #main div.foot ul li a:hover {color:#163133;}
- #main div.contacts {
- position:absolute;
- right: 44px; top: 14px;
- width: 360px;
- font: normal 11px Verdana;
- color: #faffcf;
- }
- /*Cам сайт*/
- #page {
- position: absolute;
- top: 0; left: 0;
- z-index: 30;
- width: 100%;
- overflow: hidden;
- margin: 0 0 300px 0;
- min-width: 1000px;
- _width: expression((documentElement.clientWidth||document.body.clientWidth)<1004?'1004px':'100%');
- }
- #left {
- width:290px;
- float: left;
- }
- #right {
- margin:0 48px 0 370px;
- position: relative;
- color: #4c4f51;
- font: normal 12px/18px Verdana;
- }
Использовать либо xaк для ie6 "_", либо conditional comments — это дело вкуса.<br / >Просьба не устраивать холиваров :)
Все вроде бы хорошо, но нам установить высоту блока обертки картинки (div id=«main») равной = высоты слоя с данными div id=«page» + 400px — высота отсупа от картинки, в противном случае у нас контент сайта и картинка будут жить отдельными жизнями. Для данной цели мы задействуем JS, который мы повесим на onload
JS
- <script language="javascript">
- function test(){
- var h = 400 + document.getElementById('page').offsetHeight;
- if (h > 600) {
- document.getElementById('main').style.height = h + 'px';
- }
- }
- </script>
Пример
Из за баннера хостинга в FF белая полоса :) в IE все путем
Bug Fix
Забыл про большие мониторы для этого вычисляем высоту окна
function test(){<br> var client = document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight; ;<br> var h = 270 + document.getElementById('page').offsetHeight;<br> if (h > client) { <br> document.getElementById('main').style.height = h + 'px';<br> }<br> }<br><br>* This source code was highlighted with Source Code Highlighter.
Изменение в CSS
<br>#main {<br> position: absolute;<br> top:0; left:0; right:0; bottom:0;<br> z-index: 1;<br> height:100%;<br>}<br><br>* This source code was highlighted with Source Code Highlighter.
Буду рад, если кому-то пригодится.