Хорошо, у меня была простая проблема макета неделю или две назад. А именно разделам страницы нужен заголовок:
+---------------------------------------------------------+
| Title Button |
+---------------------------------------------------------+
Довольно простые вещи. Дело в том, что ненависть к таблицам, похоже, перешла в мир Интернета, о чем мне напомнили, когда я спросил, зачем использовать теги списков определений (DL, DD, DT) для форм HTML вместо таблиц? Теперь общая тема таблиц против divs/CSS уже обсуждалась, например:
- DIV против таблицы; а также
- Таблицы вместо DIV.
Так что это не предназначено для общего обсуждения CSS и таблиц для разметки. Это просто решение одной проблемы. Я пробовал различные решения выше с использованием CSS, в том числе:
- Плавающее право для кнопки или div, содержащего кнопку;
- Относительное положение для кнопки; а также
- Положение относительное + абсолютное.
Ни одно из этих решений не было удовлетворительным по разным причинам. Например, относительное позиционирование привело к проблеме z-index, когда мое содержимое появилось под содержимым.
Итак, я вернулся к:
<style type="text/css">
.group-header { background-color: yellow; width: 100%; }
.group-header td { padding: 8px; }
.group-title { text-align: left; font-weight: bold; }
.group-buttons { text-align: right; }
</style>
<table class="group-header">
<tr>
<td class="group-title">Title</td>
<td class="group-buttons"><input type="button" name="Button"></td>
</tr>
</table>
И это работает отлично. Это просто, настолько, насколько это возможно, с обратной совместимостью (это будет работать даже в IE5), и это просто работает. Не возиться с позиционированием или поплавками.
Так может кто-нибудь сделать эквивалент без таблиц?
Требования следующие:
- Обратная совместимость: с FF2 и IE6;
- Достаточно последовательный: в разных браузерах;
- По центру: кнопка и заголовок имеют разную высоту; а также
- Гибкость: позволяет достаточно точно контролировать позиционирование (отступы и/или поля) и стилизацию.
Кстати, сегодня я наткнулся на пару интересных статей:
РЕДАКТИРОВАТЬ: Позвольте мне подробнее остановиться на проблеме с плавающей точкой. Этот вид работ:
<html>
<head>
<title>Layout</title>
<style type="text/css">
.group-header, .group-content { width: 500px; margin: 0 auto; }
.group-header { border: 1px solid red; background: yellow; overflow: hidden; }
.group-content { border: 1px solid black; background: #DDD; }
.group-title { float: left; padding: 8px; }
.group-buttons { float: right; padding: 8px; }
</style>
</head>
<body>
<div class="group-header">
<div class="group-title">This is my title</div>
<div class="group-buttons"><input type="button" value="Collapse"></div>
</div>
<div class="group-content">
<p>And it works perfectly. It simple, as backward compatibile as it gets (that'll work probably even on IE5) and it just works. No messing about with positioning or floats.</p>
<p>So can anyone do the equivalent without tables that is backwards compatible to at least FF2 and IE6?</p>
<p>On a side note, I came across a couple of interesting articles today:</p>
</div>
</body>
</html>
Спасибо Ant P за overflow: hidden
часть (все еще не понимаю, почему). Здесь возникает проблема. Скажем, я хочу, чтобы заголовок и кнопка располагались вертикально по центру. Это проблематично, потому что элементы имеют разную высоту. Сравните это с:
<html>
<head>
<title>Layout</title>
<style type="text/css">
.group-header, .group-content { width: 500px; margin: 0 auto; }
.group-header { border: 1px solid red; background: yellow; overflow: hidden; }
.group-content { border: 1px solid black; background: #DDD; }
.group-header td { vertical-align: middle; }
.group-title { padding: 8px; }
.group-buttons { text-align: right; }
</style>
</head>
<body>
<table class="group-header">
<tr>
<td class="group-title">This is my title</td>
<td class="group-buttons"><input type="button" value="Collapse"></td>
</tr>
</table>
<div class="group-content">
<p>And it works perfectly. It simple, as backward compatibile as it gets (that'll work probably even on IE5) and it just works. No messing about with positioning or floats.</p>
<p>So can anyone do the equivalent without tables that is backwards compatible to at least FF2 and IE6?</p>
<p>On a side note, I came across a couple of interesting articles today:</p>
</div>
</body>
</html>
который работает отлично.