Может ли div действительно переопределить таблицу для всего на макетах? - PullRequest
3 голосов
/ 06 января 2010

Возможно, уже есть вопрос на эту тему, но я не смог его найти.

Мой вопрос прост,
Могу ли я использовать только div на макете страницы?

Я попал в беду, например, создать div с углами.

A_____B______C  
|            |
D     E      F
|            |
G_____H______I

принимает все буквы как div с некоторым фоном, в то время как буква E - это место, где размещается содержимое, и оно динамическое, поэтому оно может получить любую высоту, в то время как ширина будет равна 100% для всего окна (есть другой div как меню всплыло слева от этого div, но я не учел это здесь.
в таблице я сделал это очень быстро, без взлома, но с divs я просто не мог.
Я не мог заставить высоту div D и F правильно расширяться с помощью div, остальное было в порядке

так
1. может ли div действительно заменить таблицы для макета?
2. может ли div заменить таблицы без css-совместимости?

(кстати, это была не единственная моя проблема с div и css для макетов, где таблица делала это легко)

Ответы [ 6 ]

4 голосов
/ 06 января 2010

Ваш пример полностью выполним в базовом CSS с использованием абсолютного позиционирования внутри относительно позиционированного элемента. Взгляните на это:

http://www.ulmanen.fi/stuff/box.php

Итак, в ответ на ваш вопрос, div действительно заменяет таблицы для макета.

А что касается вопроса номер два; Таблицы должны использоваться там, где нужны таблицы: в табличных данных. Если вам нужно представить что-то в таблице, используйте таблицу. Только не используйте их для разметки.

3 голосов
/ 06 января 2010
  1. Да.
  2. К сожалению, нет. Ваш пример почти наверняка потребует некоторого "взлома" для работы во всех браузерах. Некоторые вещи, которые было легко сделать с помощью таблиц макета, очень и очень сложно реализовать с использованием чистого CSS.

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

1 голос
/ 06 января 2010
  1. может ли div действительно заменить таблицы для макета?

Как правило, к этому стоит стремиться. Но для всего ? Нет. Существуют распространенные конструкции таблиц, которые невозможно воспроизвести с помощью CSS, особенно если вы смешиваете измерения с фиксированным пикселем, относительно шрифта и относительно области просмотра в одной таблице. Сложные макеты жидкой формы являются обычным случаем для этого.

Теоретически вы можете заменить <table>, <tr> и <td> на div, стилизованные под display: table-cell et al. Однако это не сработает в IE и представляет сомнительную полезность: вы по-прежнему просачиваете проблемы компоновки в разметку так же, как если бы это была таблица. (Кроме того, вы не можете использовать такие составные столбцы / строки.)

Я попал в беду, например, для создания div с углами.

Вы имеете ввиду с углами изображения? Это действительно легко. Но хитрость заключается не в том, чтобы попытаться сделать это путем расположения элементов. Вместо этого используйте вложенные div, каждый со своим фоном. Например:

<div id="foo"><div class="left"><div class="right">
    Content.
</div></div></div>

#foo { background: url(mainbackground.gif); }
#foo .left { background: url(leftborder.gif) top left repeat-y; }
#foo .right { background: url(rightborder.gif) top right repeat-y; padding: 32px; }

Это дает вам левую и правую границу изображения, наложенного на основной фон. Вы можете сделать то же самое три раза, чтобы получить полную таблицу, как с 8 обрамлением изображений, или просто вложить делители глубиной девять. Вы можете уменьшить количество необходимых делений с 3 до 2, если можете включить основное фоновое изображение в одно из изображений границы (для этого могут потребоваться очень широкие изображения, если элемент может увеличиться). Вы можете использовать отступы для некоторых элементов, если необходимо, чтобы изображения границ были прозрачными (т. Е. Основное фоновое изображение не должно отображаться по краям).

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

1 голос
/ 06 января 2010

Не совсем отвечаю на ваш вопрос, но у Yahoo есть несколько хороших инструментов CSS для сетки, которые действительно помогают в создании макетов на основе div. Они могут быть полезны для справки.

http://developer.yahoo.com/yui/grids/

0 голосов
/ 06 января 2010

Вы должны создавать строки с помощью div, как и в случае с таблицами.

  • Поместите abc в div | давайте назовем это div 1
  • Поместите def в div | давайте назовем это div 2
  • Поместите ghi в div | давайте назовем это div 3

Пусть e определяет высоту div 2 , и пусть 2 определяет высоты d и f . Используя правильную позицию, такую ​​как position: относительная и display: table-cell, вы должны быть в состоянии управлять.

Не собираюсь создавать целое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...