2010-01-05 3 views
2

Для всех моих сайтов до сих пор я использовал раскладки таблиц, но теперь я хочу попробовать использовать чистую CSS-макет. Но я действительно борется!Моделирование таблицы Layout в CSS

Как я могу эмулировать следующее CSS:

<table> 
    <tr> 
    <td>Some Content 1</td> 
    <td>Some Content 2</td> 
    </tr> 
</table> 

Теперь давайте предположим, что "Некоторые Содержание 1" и "Некоторые Content 2" вместо <img> метки. Затем результирующий вывод представляет собой два изображения бок о бок с центрированным вертикальным выравниванием. Размер двух ячеек в таблице - это размер изображений плюс несколько дополнений.

Таким образом, таблица автоматически подбирается под размер изображений или любого содержимого внутри ячеек.

Но как это сделать в CSS, это сводит меня с ума! Я почти готов отказаться и просто использовать макет таблицы, и почему бы и нет, это так просто.

Любые предложения с благодарностью получены.

Спасибо,

AJ

+5

Просто хотел сказать удачу, вам это нужно. –

+2

Я не вижу смысла использовать «чистый CSS». Что не так с использованием таблиц здесь? вам просто нужно поместить макет таблиц в css (margin, padding, границы и т. д.). –

+0

Я пытаюсь сделать именно то, что вы хотите сделать, в течение последних двух лет. И никогда не удалось имитировать поведение таблицы. Если бы кто-то мог ответить на этот вопрос, это был бы «большой вопрос, решаемый тайной»! – Nirmal

ответ

0

Единственный способ, которым я вижу, что вы можете сделать это в противном случае использует <div> теги и установки их свойств, таких как поплавок в CSS.

Я не думаю, что вы можете создать таблицу в CSS, поскольку CSS определяет стиль страницы и ее элементы, а не сами элементы.

1

Подобный макет может быть сгенерирован с использованием тегов CSS и div.

В настоящее время существует множество инструментов для построения такого макета с использованием CSS. Все современные средства разработки веб-страниц имеют эти особенности.

Помимо этих инструментов, таких как Yahoo Grid Builder (link to Yahoo Grid builder), также может быть удобно для них.

1

Это работает в Firefox (не тестировалось в других браузерах). Границы просто для иллюстрации.

<div> 

<div style="float:left; width:49%;border:1px solid black;"> 
    <img style="float:right; width:343px" src="http://www.virginia.edu/german/images/Berlin-City2.jpg"/> 
</div> 

<div style="float:right; width:49%;border:1px solid black;"> 
    <img src="http://www.virginia.edu/german/images/Berlin-City2.jpg"/> 
</div> 

</div> 

Ваш вопрос немного неоднозначный (может быть, это я), но вы также можете означать следующее:

<div> 

<div style="float:left; width:49%; border:1px solid black;"> 
    <div style="margin:auto; width:343px; border:2px solid red;" > 
     <img src="http://www.virginia.edu/german/images/Berlin-City2.jpg"/> 
    </div> 

</div> 

    <div style="float:left; width:49%; border:1px solid black;"> 
    <div style="margin:auto; width:343px; border:2px solid red;" > 
     <img src="http://www.virginia.edu/german/images/Berlin-City2.jpg"/> 
    </div> 
    </div> 
</div> 

Это не удовлетворяет все ваши требования, но близко.

+1

Я не думаю, что два DIVs будут вертикально выровняться по середине, как если бы они были столбцами таблицы. – Nirmal

+0

Спасибо за ответ, но у меня сложилось впечатление, что плавающий div должен иметь фиксированную ширину. Хотя браузеры поддерживают float без ширины, я не думаю, что это часть стандарта CSS. –

+0

Я исправил свой ответ, чтобы отразить это. Попробуйте еще раз и сообщите мне, если это сработает для вас. –

3

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

Вы имеете в виду что-то вроде этого?

<!doctype html> 
<html lang="en"> 
    <head> 
     <title>SO question 2005928</title> 
     <style> 
      #images img { 
       padding: 10px; 
       vertical-align: middle; 
      } 
     </style> 
    </head> 
    <body> 
     <div id="images"> 
      <img src="http://sstatic.net/so/img/logo.png" width="100" height="50"> 
      <img src="http://sstatic.net/so/img/logo.png" width="50" height="100"> 
     </div> 
    </body> 
</html> 
+0

И как добавить еще одну строку, которая выравнивает и ведет себя как таблица? – Nirmal

+4

Это другой вопрос. Задайте новый вопрос. – BalusC

1

Меняйте table, tr и td теги для div-х и сделать 'TD-дивы' float:left. Или используйте display:inline-block (со всеми связанными проблемами) или используйте display:table-cell (со всеми связанными проблемами).

4

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

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

0

Для того, чтобы элемент вести себя, как таблицы с использованием чистого CSS, используйте display свойства и значения table, table-row, table-cell, inline-table и т.д.

Это не поддерживается IE, и несколько поражений цели не использовать таблицы для раскладки столбцов, поскольку разметка все еще основана на строках.

1

Забудьте о концепции «или» с помощью CSS и таблиц. У обоих есть плюсы и минусы, которые приведут вас к стене.

Я говорю, создаю столько, сколько вы можете с помощью CSS, другие макеты, которые у вас есть, используйте таблицу.

Кроме того, между сетчатыми системами и модулем TABLE-LAYOUT и модулем шаблона CSS3 CSS действительно продвигается в сторону «табличного» макета.