Этот сайт не наркоманов. Это сайт программистов. Здесь курят мануал.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Мы в твиттере!
Мы вконтакте!
Мы на яндексе!

Краснодарское время: 23 Май, 2012, 12:39:18

Страниц: [1]
Печать
Автор Тема: Верстка: масштабирование фона  (Прочитано 2330 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Timur    ↓ 
09 Декабрь, 2008, 11:35:33
НЕ ХУЕТА! ХУЕТА!

NullPointerException
Группа: в ухо

Карма: 56
Сообщений: 1009
Сила слова: 5.55

Как растянуть фоновый рисунок по всей ширине/высоте блока?
 
Уже не первый раз слышу этот вопрос, поэтому решил оформить в виде статьи. Профессионалы вряд ли подчерпнут здесь что-то новое, статья рассчитана исключительно для новичков.
 
Что бы не было недоразумений (ну вдруг, кто-то не знает?), нужно сказать о таком распространенном случае, когда нужно растянуть фон по всей ширине или высоте блока. А фоновый рисунок при этом  является простым градиентом. Если тянем по ширине

  • создаем картинку с шириной в 1px и необходимой высотой;

  • ставим её на фон и устанавливаем, что бы фон повторялся только по ширине:
    HTML
    <div style="background:url(bg.png) repeat-x;"></div>
    Если растягиваем по высоте — заменяем на repeat-y.

Теперь к непосредственной теме статьи. Сразу хочу напомнить, что все используемые форматы изображений в веб — растровые, т.е. даже при незначительном растяжении картинки, её качество будет значительно ухудшаться. Поэтому до CSS3 эта возможность в таблицах стилей не предусматривалась.
 
Но не забываем, что на календаре – «Веб-два-ноль». IE5 давно исчез, IE6 медленно, но верно движется к тому же итогу. Некоторые современные браузеры уже поддерживают формат SVG — который так и расшифровывается «Scalable Vector Graphics» — масштабируемая векторная графика. Т.е. размеры картинок в этом формате можно свободно изменять без всякой потери качества.
Видимо поэтому в CSS3 будет свойство background-size, непосредственно отвечающее за масштабирование фона. Opera, Safari и Konqueror уже поддерживают это свойство через -o-background-size, -webkit-background-size and -khtml-background-size, соответственно. К сожаленью свойства -ie-background-size не существует и врядли оно появится в ближайшем времени. Поэтому, как обычно, будем извращаться.
 
Итак, если уж возникла суровая необходимость привязать размеры фона к размерам блока можно использовать следующий приём.
Создается дополнительный блок-обертка, для которого устанавливается position:relative. В него

  • помещается картинка (<img>), используемая в качестве фона.

  • собственно, блок, к которому нужно привязать фон. Блок обязательно должен иметь position:absolute

Для обоих элементов устанавливаются width:100% и height:100%. Теперь их размеры привязаны к размерам блока-обертки и изменяются вместе с ним. В данном случае, при абсолютном позиционировании блока, он помещается поверх картинки и она становится «фоном».
 
Ниже пример. Для наглядности, вместо блока используется таблица (естественно, можно использовать что угодно).
HTML
<style type="text/css">
/* Блок-обертка */
#table-outer {
    position:relative;
    width:300px;
    height:300px;
}
   
    /* Фоновый рисунок */
    #table-bg {
        width:100%;
        height:100%;
    }     
 
    /* Фон и таблица растягиваются по всей ширине и высоте блока-обертки */
    #self-table {
        position:absolute;
        left:0;
        top:0;
        width:100%;
        height:100%;
    }
 
        /* Ячейка таблицы */
        #self-table td {
            border:1px solid #999;
            text-align:center;
        }   
</style>
 
<!-- Блок-обертка -->
<div id="table-outer">
 
  <!-- Фоновый рисунок -->
  <img id="table-bg" src="table-bg.png" alt="Фоновый рисунок" />
 
  <!-- Таблица -->
  <table id="self-table">
    <tr><td>1.1</td> <td>1.2</td> <td>3.1</td></tr>
    <tr><td>2.1</td> <td>2.2</td> <td>3.2</td></tr>
    <tr><td>3.1</td> <td>3.2</td> <td>3.3</td></tr>
  </table>
 
</div>

Ссылки:
« Последнее редактирование: 09 Декабрь, 2008, 04:31:16 от Timur » Записан
Страниц: [1]
Печать
 

Перейти в: