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

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

Практика
HTML:
<div id="page">
<div id="left">
Меню
</div>
<div id="right">
Контент
</div>
</div>
<div id="main">
<div class="foot">
<ul>
<li><a href="#" title="О компании">О компании</a></li>
<li><a href="#" title="Контакты">Контакты</a></li>
</ul>
<div class="contacts">
<span class="copy">Copyright; © 2009</span>
</div>
</div>
<!--Растягивающаяся картинка-->
<div class="img"><img src="img/back_001.jpg" width="100%" alt="" title="" /></div>
</div>
* 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 — это дело вкуса.
Просьба не устраивать холиваров :)
Все вроде бы хорошо, но нам установить высоту блока обертки картинки (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(){
var client = document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight; ;
var h = 270 + document.getElementById('page').offsetHeight;
if (h > client) {
document.getElementById('main').style.height = h + 'px';
}
}
* This source code was highlighted with Source Code Highlighter.Изменение в CSS
#main {
position: absolute;
top:0; left:0; right:0; bottom:0;
z-index: 1;
height:100%;
}
* This source code was highlighted with Source Code Highlighter.Буду рад, если кому-то пригодится.



комментарии (47)