Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
185
Добавлен:
10.05.2015
Размер:
8.45 Mб
Скачать

Проблемы композиции в компоновках с одним и двумя столбцами

Изменения в разметке, необходимые для преобразования шаблона с одним столбцом в шаблон с двумя столбцами являются очевидными, но во многих ситуациях новые правила стилей оформления не требуются.

Размещение #sidebar слева вместо его порядка в исходном коде

Для этого существуют две процедуры; одна будет работать независимо от длины любого столбца, в то время как другая требует, чтобы #bodyCopy был длиннее #sidebar.

Первый и более распространенный подход состоит в использовании float:

  1. Присвоить значение width для #bodyCopy.

  2. Добавляем в это правило значение float для кода справа.

  3. Присваиваем #sidebar подходящее значение width.

  4. Присваиваем требуемым образом значения margin и padding для #bodyCopy и/или #footer обеспечивая существование требуемого промежутка между двумя элементами.

  5. Присваиваем clear: both; для #footer.

Оба столбца имеют заданные значения width, так что оба будут иметь согласованные поля.

В том случае, когда #sidebar располагается по правому краю компоновки, уже описанные действия все равно должны выполниться, за исключением того, что значение float для #bodyCopy должно задаваться как left. Значение width, присвоенное #sidebar, необходимо заменить подходящим значением margin-left.

Можно также присвоить вместо width большое значение margin-left или margin-right (как потребуется) неплавающему элементу.

Второй подход, с меньшей вероятностью порождающий ошибки в Internet Explorer 6, состоит в присвоении большого значения margin-left или margin-right для #bodyCopy, как потребуется, и позиционировать абсолютно #sidebar. Однако этот подход будет менее гибким, так как в тех случаях, когда #sidebar будет длиннее #bodyCopy, предыдущий элемент будет проникать в #footer.

Ложные столбцы: использование фонового изображения для выравнивания длин столбцов, когда длина их контента различна

Более внимательное рассмотрение реализаций столбцов с помощью свойства float показывает, что когда требуются различные фоновые цвета или вертикальные линейки между столбцами, на них нельзя рассчитывать для распространения на всю длину области основного контента при применении со свойствами background-color или border.

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

#main {

background-image: url(images/bg_2column.gif);

background-repeat: repeat-y;

}

Если bg_2column.gif состоит из двух полос высококонтрастного цвета, которые соответствуют более или менее точно по ширине столбцам контента, в результате будет два столбца, которые будут представляться имеющими одинаковую высоту … но на самом деле нет, что обнаружится, если вставить дальше следующие правила:

#bodyCopy {

background-color: #ccc;

}

#sidebar {

background-color: #999;

}

Выполнение этого шага не обязательно исключает необходимость применять свойства color или background-color к заданному столбцу; если используемый по умолчанию цвет текста плохо читается на одном или обоих столбцах, их фоновый цвет или цвет переднего плана должны быть явно определены в таблице стилей в качестве защиты от возможного отказа браузера загрузить фоновые изображения.