Статьи

Все, что вы знаете, неправильно!

Все меняется.
В эти выходные я прочитал очень интересную книгу: «Все, что вы знаете о CSS, неправильно» . Книга иллюстрирует, как теперь, когда IE прошел тест ACID 2 , мы, наконец, можем начать создавать наши веб-сайты надлежащим образом. До сих пор мы были вынуждены внедрять хаки, чтобы сформировать идеальный макет — абсолютное позиционирование, нестабильные поплавки и т. Д. Но это все начинает меняться! Я покажу вам, как через двадцать минут.

Таблицы CSS настолько просты в использовании, что стоит принять их как можно скорее.
-Кевин Янк




Этот урок покажет вам, как вы будете строить макеты в будущем. На самом деле, вы должны использовать эти методы прямо сейчас! Вместо того чтобы полагаться на float и абсолютное позиционирование при создании наших макетов, мы вместо этого сосредоточимся на использовании таблиц CSS.

Зная, что IE7 и ниже не распознают свойства таблицы CSS, нам сначала нужно создать наш невероятно простой сайт «старым» способом. Вставьте следующий код в ваш файл «index.html».

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
<body>
    <div id=»wrap»>
        <div id=»header»>
            <h1> My Header</h1>
        </div><!—end header—>
        <div id=»main»>
            <ul id=»nav»>
                <li><a href=»#»>1</a></li>
                <li><a href=»#»>2</a></li>
                <li><a href=»#»>3</a></li>
                <li><a href=»#»>4</a></li>
            </ul>
            <div id=»primaryContent»> — dummy text— </div>
        </div><!—end main—>
 
        <div id=»footer»>
            <h1>My Footer</h1>
        </div><!—end footer —>
    </div><!—end wrap—>
</body>

Нам не нужно слишком много проходить. Мы создали контент для нашего двухколоночного макета. Навигация (#nav) будет перемещаться слева от основного содержимого (#primaryContent). Давайте продолжим и добавим немного быстрого стиля. Я собираюсь использовать цвета фона (и уродливые тоже!), Чтобы вы могли легко определить, где начинается и заканчивается каждый div.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/* Just resetting a few elements */
 
h1, ul, li {
    margin: 0;
}
 
p {
    margin: 0;
}
 
/* Main content styling */
 
#wrap {
    width: 800px;
    margin: auto;
}
 
#header, #footer {
    background: red;
}
 
#nav {
    background: gray;
    width: 150px;
    float: left;
}
 
#primaryContent {
    background: yellow;
    margin-left: 150px;
    padding: 0 .5em;
}

Мы установили ширину нашей боковой панели (#nav) в 150 пикселей и сместили ее влево. Вместо того, чтобы плавать раздел primaryContent, было бы лучше просто добавить левое поле, равное ширине нашей боковой панели. Мы также добавим немного отступов, чтобы отодвинуть текст от краев div.

1
2
3
4
5
#primaryContent {
    background: yellow;
    margin-left: 150px;
    padding: 0 .5em;
}

Вы должны получить что-то похожее на это:

Продукт

Сразу же (после того, как блики от этих ужасных цветов исчезнут) вы увидите, что серый фон на боковой панели не тянется к нижней части. Это потому, что плавающие элементы занимают столько места, сколько необходимо.

Одним из решений будет жесткое кодирование определенной высоты, но это плохая идея. Что если основной контент изменится? Вам придется вернуться в свой CSS-файл, чтобы снова настроить значение высоты. Так что не делай этого! Вместо этого, принято решение создать фоновое изображение и расположить его вертикально. Это называется созданием искусственных столбцов. Просто перейдите в Photoshop, создайте холст размером 800×10 пикселей и вставьте соответствующие цвета. Вы знаете, что боковая панель имеет серый фон и ширину 150 пикселей, поэтому просто используйте инструмент выделения для выбора эту область, и заполните ее серым цветом. После того, как вы сделаете то же самое для ужасного желтого цвета, вы получите следующее:

BG

Сохраните его в корне вашего решения и назовите его «bg.png». Теперь мы можем расположить это изображение по вертикали, создавая искусственные столбцы.

1
2
3
#main {
    background: url(../bg.png) repeat-y;
}

Теперь мы успешно создали иллюзию равных столбцов.

Искусственные колонны

Так что это было не так уж сложно! Но все еще требовалось слишком много времени, чтобы создать что-то такое простое, как макет из двух столбцов. Нам даже пришлось пойти в Photoshop, чтобы завершить внешний вид! На этот раз давайте воссоздадим сайт с помощью таблиц CSS. Не волнуйтесь, очень мало нужно изменить!

Напомним, что IE7 и ниже не распознают таблицы CSS. Так что, по крайней мере, сейчас нам все еще нужно использовать метод, который мы выполнили выше. Создайте новую таблицу стилей и назовите ее «ie.css». Затем скопируйте и вставьте весь CSS, который мы записали в этот файл. Теперь не удаляйте его из «default.css». Мы просто удалим несколько стилей. На этот раз мы не будем реализовывать какие-либо хаки или плавающие объекты для создания наших столбцов.

Удалите следующие стили из таблицы стилей «default.css».

01
02
03
04
05
06
07
08
09
10
11
12
13
14
/* Because we’ll be using a «table» layout, we won’t need to tile a background image!
#main {
    background: url(../bg.png) repeat-y;
}
 
/* No floats!
#nav {
    float: left;
}
 
/* No floats = no left margin.
#primaryContent {
    margin-left: 150px;
}

Теперь, когда вы удалили ненужные стили, давайте добавим несколько новых! Во-первых, нам нужно создать два столбца внутри нашего «основного» div: один для навигации, а другой для основного контента. Давайте установим тип отображения #main в таблицу.

1
2
3
#main {
display: table;
}

Затем мы должны объявить элементы #nav и #primaryContent в качестве ячеек таблицы.

1
2
3
#nav, #primiaryContent {
display: table-cell;
}

Верьте или нет, это все, что нам нужно сделать, чтобы создать макет нашего столбца. Мы уже установили ширину навигации в 150 пикселей в ширину. Элемент primaryContent просто заполнит оставшееся пространство. Вот снимок нашего макета с использованием таблиц CSS.

Искусственные колонны

Это выглядит точно так же! Но мы не использовали поплавки или абсолютное позиционирование! Однако, как я уже говорил, если мы сейчас посмотрим на наш сайт в IE, мы увидим.

IE еще не распознает таблицы CSS

Хотя IE8 будет отображать сайт правильно, IE7 и ниже не будут. Чтобы компенсировать это, нам нужно включить условную таблицу стилей. (Вот почему мы сохранили CSS из нашего исходного макета и поместили его в «ie.css»).

1
2
3
<!—[if lte IE 7]>
  <link href=»css/ie.css» rel=»stylesheet» type=»text/css» />
<![endif]—>

Теперь все хорошо! Современные браузеры будут отображать сайт с использованием таблиц CSS, а IE будет использовать традиционный метод float.

Истинная сила вступает в игру, когда мы вносим изменения. Например, давайте представим, что в будущем мы решили добавить третий столбец на наш сайт. Мы можем сделать это примерно за тридцать секунд.

После закрывающего тега в элементе primaryContent добавьте новый столбец.

1
2
3
4
….
</div><!—end primaryContent—>
<div id=»secondaryContent»> — dummy text — </div>

Получите доступ к своей таблице стилей и установите для свойства display secondContent значение «table-cell». Вам также необходимо определить, насколько он должен быть широким. В этом случае я выбрал 90px.

1
2
3
4
5
#secondaryContent {
    width: 90px;
    display: table-cell;
    background: orange;
}

Вот и все. Нет поплавков, нет обнуления полей, нет противоречий в браузере.

Три колонны

Вы должны начать использовать этот метод сегодня! Разработчики IE наконец-то выслушали и предоставили нам инструменты, необходимые для создания сайтов так, как мы хотим их создавать. Таким образом, мы должны использовать эти инструменты — даже если они требуют немного больше работы в течение нескольких лет. Если вы начнете сегодня, вы будете впереди стаи!