htmlbook.ru - Для тех, кто делает сайты
Статьи Книги Шаг за шагом Рецепты Форум Графика для Web
Главная страница > Статьи > Табличная верстка > Особенности таблиц

Особенности таблиц

Влад Мержевич

Текстовая версия   Добавить комментарий

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

Ширина таблицы

Ширина таблицы, если она явно не указана, устанавливается браузером автоматически исходя из содержимого ячеек. Когда таблица применяется для создания опорной сетки на странице, такой подход нежелателен, поскольку зависит от переменных данных. Поэтому ширину таблицы указывают всегда — в процентах, если используется «резиновый» макет или в пикселах для макета фиксированной ширины.

Ширина ячеек

Ширина ячеек определяется параметром width тега <TD>, причем устанавливать это значение требуется в том случае, если ширина ячейки должна быть задана.

Рассмотрим на примере тот случай, когда размер ячеек нужно указать. Предположим, что нам требуется создать на веб-странице две колонки, одна из них должна иметь размер 200 пикселов, а вторая занимать оставшееся место. Создаем таблицу с двумя ячейками и для левой ячейки задаем параметр width=”200” (пример 1). Единицы измерения ставить не нужно, браузер сам понимает, что если задано число, значит, используются пикселы.

Пример 1. Ширина ячеек

Валидный HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Таблица</title>
</head>
<body>

<table width="100%" cellspacing="0" cellpadding="4" border="1">
<tr>
<td width="200">Левая колонка</td>
<td>Правая колонка</td>
</tr>
</table>

</body>
</html>

Поскольку в данном примере ширина таблицы указана как 100%, таблица будет занимать всю свободную ширину окна браузера. При этом левая колонка берет под себя 200 пикселов, а правая — оставшееся свободное место.

Ширина ячейки иной раз может меняться, несмотря на то, что указана жестко. Это происходит, например, в том случае, если в ячейку добавили рисунок, размер которого превышает ширину ячейки. Чтобы вместить изображение, ячейка будет вынуждена раздаться. Также может повлиять на размер ячейки ее текстовое содержимое, которое содержит очень длинное слово.

Чтобы избежать указанной ситуации применяют несколько средств.

Пример 2. Параметр table-layout

Валидный HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Таблица</title>
<style type="text/css">
TABLE {
 table-layout: fixed; /* Ячейки фиксированной ширины */
}
</style>
</head>
<body>

<table width="100%" cellspacing="0" cellpadding="4" border="1">
<tr>
<td width="200"><img src="dino.gif" width="289" height="120" alt="Динозаврик"></td>
<td>...</td>
</tr>
</table>

</body>
</html>

Результат данного примера показан на рис. 1.

Рис. 1. Отображение рисунка при использовании параметра table-layout

Рис. 1. Отображение рисунка при использовании параметра table-layout

Пример 3. Полосы прокрутки в ячейках

Валидный HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Таблица</title>
<style type="text/css">
TD DIV {
 overflow: scroll; /* Добавляем полосы прокрутки */
}
</style>
</head>
<body>

<table width="100%" cellspacing="0" cellpadding="4" border="1">
<tr>
<td width="200"><div><img src="dino.gif" width="289" height="120" alt="Динозаврик"></div></td>
<td>...</td>
</tr>
</table>

</body>
</html>

Результат данного примера показан на рис. 1.

Рис. 2. Отображение рисунка при использовании параметра oveflow

Рис. 2. Отображение рисунка при использовании параметра oveflow

Содержимое ячеек

Браузеры иначе отображают ячейку, внутри которой ничего нет. «Ничего» в данном случае означает, что внутрь ячейки не добавили ни рисунок, ни текст, причем пробел в расчет не принимается. Естественно, вид ячеек различается только в том случае, если вокруг них установлена граница. При использовании невидимой рамки, вид ячеек, независимо от того, есть в них что-нибудь или нет, совпадает.

Старые браузеры не отображали цвет фона пустых ячеек вида <td bgcolor="#ffcc00"></td>, поэтому в том случае, когда требовалось оставить ячейку без содержимого, но отобразить цвет фона, внутрь ячейки добавляли неразделяемый пробел (&nbsp;). Пробел не всегда подходит, особенно когда нужно установить высоту ячейки 1-2 пиксела, из-за чего широкое распространение получил прозрачный рисунок размером в один пиксел. Действительно, такой рисунок можно масштабировать на свое усмотрение, но он на веб-странице никак не отображается.

К счастью эпоха однопиксельных рисунков и всяческих распорок на их основе прошла. Браузеры достаточно корректно работают с таблицами и без присутствия содержимого ячеек.

Объединение ячеек

Предположим, что нам потребовалось использовать объединение некоторых ячеек в таблице, как, например, показано ниже. Причем высота оранжевой и серой ячейки жестко задана и равна 30 пикселам.

Ячейка 1 Ячейка 2
Ячейка 3

Ячейка 4

Для наглядности код этой таблицы приведен в примере 4.

Пример 4. Таблица с объединенными ячейками

Валидный HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Таблица</title>
</head>
<body>

<table width="300" border="1" align="center" cellpadding="4" cellspacing="0">
 <tr>
  <td width="94" height="30" bgcolor="#ffcc33">Ячейка 1</td>
  <td width="184" rowspan="2" valign="top">Ячейка 2</td>
 </tr>
 <tr>
  <td valign="top">Ячейка 3<br><br>
  </td>
 </tr>
 <tr bgcolor="#cccccc">
  <td colspan="2" height="30">Ячейка 4</td>
 </tr>
</table>

</body>
</html>

Хотя высота оранжевой ячейки вроде как указана фиксированной, она может произвольно меняться в зависимости от объема информации в других ячейках. Подобная неприятность замечена в некоторых браузерах, например, Internet Explorer 6.

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

Чтобы все-таки получить нужный результат, одну таблицу разбивают не несколько мелких таблиц или вкладывают таблицу внутрь ячейки другой таблицы. Вложенные таблицы получили свое распространение именно по той причине, что дают устойчивый и однообразный результат.

Скорость загрузки таблицы

Пока таблица не загрузится полностью, ее содержимое не начнет отображаться. Дело в том, что браузер, прежде чем показать содержимое таблицы, должен вычислить необходимые размеры ячеек, их ширину и высоту. А для этого необходимо знать, что в этих ячейках находится. Поэтому браузер и ожидает, пока загрузится все, что находится в ячейках, и только потом отображает таблицу.

Исходя из этого факта, таблицы не используют для хранения большой информации (от 100 кБ). А чтобы ускорить загрузку табличного макета, его разбивают на отдельные таблицы или используют свойство table-layout, применение которого позволяет несколько повысить скорость отображения содержимого таблицы.

Статья опубликована: 01.12.2005 Последнее обновление: 29.04.2008

Прежде, чем писать комментарий к статье, примите во внимание следующие моменты.

  1. Не задавайте вопросы в комментариях, для этой цели предназначен форум, где вы получите нужную помощь.
  2. Удаляются любые комментарии, которые:
    • включают множество ошибок;
    • написаны безграмотно;
    • не имеют отношения к данной статье;
    • не содержат никакой полезной информации для посетителей.
  3. Для выделения отдельных слов используйте следующие команды: [b]жирный[/b], [i]курсив[/i], [color=цвет]цветной текст[/color], [tag]тег[/tag], [var]параметр[/var], [code]пример[/code].
  4. Потренироваться в написании комментариев вы можете в песочнице.

Комментарии к статье

Druid

26.11.2006

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

dipper

12.04.2007

Может подскажет кто - если делать макет из нескольких таблиц в таком порядке (отдельная для каждой секции): заголовок,навигация,содержимое,подвал то как обеспечить идентичную ширину для всех разделов?

Влад Мержевич

12.04.2007

Задавать явно ширину для всех колонок.

dipper

17.05.2007

Явно в пикселах? Или можно и в процентах?

Влад Мержевич

21.05.2007

Да какая разница, главное, чтобы размеры у таблиц совпадали.

Sizam

20.07.2007

"А чтобы ускорить загрузку табличного макета, его разбивают на отдельные таблицы или используют свойство table-layout"
Могли бы вы рассказть,чем именно полезен table-layout. Каковы механизмы его действия.

Влад Мержевич

24.07.2007

Здесь все написано
http://htmlbook.ru/css/table-layout.html

alexey

25.08.2007

Спасибо за замечательную статью!

Вопрос

05.10.2007

У меня такой вопрос: как зделать так чтобы сайт с римунками подходил под любое разрешения окна браузера? Спасибо.

KonstantinPR

20.05.2008

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


<table>

<tr width="100%"height="100%">
<td background="img1.gif"cellpadding="0"cellspacing="0"border="0"width="50%"height="100%">
&nbsp;
</td>
<td background="img2.gif"cellpadding="0"cellspacing="0"border="0"width="50%"height="100%">
&nbsp;
</td >
</tr>

</table>

Loly

09.06.2008

...одну таблицу разбивают не несколько мелких таблиц... - очепятка

2 KonstantinPR почитай какие атрибуты есть у тегов табличных.
Наверно тебе так надо, чтобы проверять правильно ли все рисуется включай border на 1:
<style>body{margin: 0px;}</style>
<body>
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0" >
<tr>
<td width="50%">&nbsp;</td>
<td width="50%">&nbsp;</td>
</tr>
</table>
</body>

Добавить комментарий

Имя
Комментарий

Сохранить имя (используется cookie)

Поиск по сайту

Табличная верстка
Разделы
Теги по теме

DIV
Элемент DIV является блочным элементом и предназначен для выделения фрагмента документа с целью изменения вида содержимого.

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

TD
Предназначен для создания одной ячейки таблицы. Тег TD должен размещаться внутри контейнера TR, который в свою очередь располагается внутри тега TABLE.

CSS по теме

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

table-layout
Определяет, как браузер должен вычислять высоту и ширину ячеек таблицы, основываясь на ее содержимом.

Copyright 2002–2008 Влад Мержевич, по всем вопросам пишите по адресу: vlad@htmlbook.ru

О сайте | Планы на будущее | Использование сайта | Борьба с ошибками | Технологии | Поддержать проект