Библиотека Интернет Индустрии I2R.ru |
|||
|
Раскладка в CSS: потокПродолжение. Предыдущие материалы: 27.08.05 В предыдущей статье я уже пару раз помянул прямой поток - тот порядок, в котором располагаются боксы, если им не давать какого-то специального позиционирования. И порядок этот, надо сказать, не такой уж и простой. Типы боксовБоксы, участвующие в потоке, бывают двух принципиально разных типов: строчные и блочные (”inline” и “block” в терминлогии CSS). Строчные боксы, как следует из названия, это все то, что раскладывается друг за другом в строки и переносится на следующие строки, когда не хватает ширины. К ним относится обычный текст, теги, отвечающие за оформление текста, такие как Это пример длинного текста, в котором встречаются <em>всяческие <dfn>теги</dfn></em>, которые, тем не менее, <strong>нисколько не нарушают</strong> его плавного течения с переносами на следующие строки...
Кстати, те части, которые не обрамлены никаким тегами объединяются в так называемые безымянные строчные боксы (”anonymous inline box”). Важным свойством строчных боксов является то, что у них есть свой собственный размер. Он складывается из размера шрифта (для букв), собственных размеров картинок, расстояния между строками. Это означает, что браузер при раскладке строчных боксов определяет их размер сам, без указания всяких Еще одна особенность - это то, что для строчных боксов не работают верхние и нижние границы и отступы. Это не так уж и странно, если учесть, что из-за переноса строк четких понятий “верх” и “низ” уже нет. Блочные боксы (или просто “блоки”) - это прямоугольники, которые занимают по ширине все доступное им место и никуда не переносятся. А вот собственной высоты они не имеют. Их размер по высоте определяется теми боксами, которые они содержат в себе. И это - содержание в себе других боксов - их основная задача. Содержать в себе они могут и строчные боксы, и блочные. <body>
Здесь блочные боксы Вообще, технически, если внутри блока сидят и строчные, и блочные боксы вперемешку, то все строчные объединяются в безымянные блочные боксы (”anonymous block box”). В предыдущем примере текст до заголовка как раз заключается в такой безымянный блочный бокс. Расположение боксовПоток задает довольно жесткое поведение боксов, поэтому как-то вольготно их располагать, в общем-то, и нельзя. Что с ними можно делать - так это выравнивать по горизонтали. Проще всего с этим обстоят дела у строчных боксов. Для них существует специальное свойство - С блочными боксами все слегка сложнее. Первое, с чем надо разобраться - это ширина. Особенностью (полезной особенностью!) блочных боксов в прямом потоке состоит в том, что если ширина не задана явно, то она расчитывается автоматически так, чтобы бокс в точности уместился в ширину своего родителя вместе с отступами, рамками и границами. Это не то же самое, что задание ширины в 100% - тогда при наличии отступов, рамок или границ он за пределы родителя вылезет. Из этого же следует, что выравнивание блочного бокса по горизонтали без указания ширины не имеет смысла: он и так занимает все пространство. А вот если ширину четко указать, и она будет мнеьше, чем ширина родителя, то тогда блочный бокс уже может выравниваться. Делается это, как ни странно, с помощью задания левой и правой границ (margin’ов): То есть, принцип такой: установка боковой границы в ‘auto’ отлепляет бокс от соответствующего края и прилепляет к противоположному, если в ‘auto’ стоят обе границы - бокс выравнивается по центру. Если же ни одна из боковых границ не стоит в ‘auto’, то бокс выравнивается к тому краю, с которого идет текст в текущем языке (то есть, у нас - слева, а в арабском - справа). Вертикальное выравниваниеРаз уж зашла речь о выравнивании, скажу и о вертикальном. Это одна из тех немногих вещей, с которой в CSS совсем плохо. Говоря по-простому, какого-то одного вменяемого механизма, да еще и работающего в большинстве браузеров, просто не существует. Существуют способы обходить этот недостаток, причем нет ни одного универсального - все с каким-то условиями. Я, видимо, остановлюсь на этом больном вопросе в отдельной статье, а нетерпеливым пока вот - по-английски. Управление типами боксовТип боксов, создаваемых элементами HTML, опредеяется ими самими. Например, Однако, CSS’ом это поведение можно свободно менять. Для этого служит свойство Там есть значения, которые придают любым элементами поведение таблиц (к чему я еще вернусь в одной из следующих статей). Есть значения, имитирующие отображения элементов списков, которые создают два бокса: отдельно для текста и отдельно для значочка. И есть еще экзотика типа Остаются три очевидных и наиболее часто используемых значения: Таким образом, если у нас есть такой HTML: <p>Текст с <strong>выделенным</strong> текстом внутри.</p>
… и такой CSS: strong {
display:block;
}
То выделенный текст вылезет из строки и начнет занимать отдельное место по вертикали: Аналогично, можно сделать и наоборот. HTML: <h1>Заголовок</h1>
CSS: h1,p {
И заголовок с абзацем выложены в одну срочку: Это, в частности, широко используется для таких вещей, как раскладывание главного меню сайта, заданного с помощью списка ( Таким образом, CSS позволяет довольно свободно обращаться с ролью боксов в потоке. Это как-раз один из тех механизмов, который отделяет оформление от содержимого: при выборе тегов для описания структуры страницы надо руководствоваться смыслом этих тегов, а не тем, как они вроде бы выглядят. Потому что выглядеть они могут как угодно… Предыдущие материалы: Эта статья - часть находящегося в процессе написания цикла под рабочим названием “Учебник”. Я рекомендую ознакомиться и с другими статьями, которые можно найти в категории “Учебник“, где они сейчас собраны в обратном хронологическом порядке. Статьи по теме: Автор: Иван Сагалаев |
|
2000-2008 г. Все авторские права соблюдены. |
|