Как вы это сделаете: таблицы или CSS?
(источник: sontag.ca)
Часть I
Этот макет может быть сделан просто с 2 HTML-таблицами, одна вложена в другую, или даже с одной таблицей.
Это также может быть сделано с помощью CSS, хотя это может потребовать немного больше размышлений.
Возможно, это не макет реального мира, но я видел похожие страницы. Считайте это загадкой; упражнение, чтобы улучшить ваши навыки CSS.
Чтобы сделать вещи немного более интересными, я поставил вопрос на маленькой веб-странице из двух частей под названием "Вызов". Мы рассмотрим код и вопрос: макет с таблицами или CSS? бок о бок, удар за ударом, поскольку наши два противника сражаются за превосходство кода.
В первой части рассказывается, как возникла проблема. Я надеюсь, вам понравится.
Часть II - это Решение. Вы можете быть удивлены.
Часть II
Я был поражен тем, как быстро действительно хорошие ответы появились через несколько минут после публикации. Это был унизительный опыт. У меня нет желания соревноваться с вами во временных испытаниях.
НО, после всего вышесказанного, после тщательного изучения предлагаемых решений, я понял, что ни одно из CSS-решений (включая мое собственное в то время) не работало так же хорошо, как ни одно из предлагаемых настольных решений. Проблема заключалась в том, что CSS лучше, чем таблицы для любого решения макета.
Поэтому я добавил 3 новых правила (помните, одно из правил заключается в том, что эти правила могут быть изменены). Это раздражало некоторых людей. Тогда я добавил несколько красочных объяснений того, почему правила были изменены. Я думаю, что это раздражало их еще больше.
- Наш сад должен иметь забор вокруг него; что-то, что могло бы отделить его от того мрачного окружения, в котором оно может оказаться; и не слишком дорого, но легко содержать в чистоте. Итак, я хочу 1 пиксель черной рамкой вокруг сада
- Жители каждого садового участка (персонажи) должны быть либо черными, либо белыми, в зависимости от того, кто из них показывает себя лучше в своем саду. Также они все скорописного происхождения. Там нет курсива среди них. ;-)
- Сад можно перемещать, то есть я могу иметь этот сад где угодно на странице (без абсолютного позиционирования).
Вот как должен выглядеть окончательный результат (цвет фона необязательный):
(источник: sontag.ca)
Приношу свои извинения за капризные и последние изменения правила. Я ошибся. Жители каждого садового участка - ремесленники, специалисты ручной работы. Они являются потомками скорописной семьи и обязаны своим курсом курсивом.
Сад должен быть перемещаемым, потому что оба вида садов (таблицы и CSS) должны сосуществовать на одной странице. Я могу ошибаться, говоря такую position:absolute
правила не допускаются. Если вы можете заставить их работать в этом контексте, тогда у вас будет больше возможностей. Они, безусловно, будут приняты.
Я попросил забор вокруг участка, потому что каждый тип сада будет высажен в сельской местности на оранжевом фоне, очень похожем на цвет некоторых цветов, которые мы выращиваем.
Сейчас я живу в Голландии, и сезон тюльпанов быстро приближается. Если вы пролетите над Голландией в течение следующих нескольких недель, и в ясный день (довольно редкий здесь) пейзаж внизу будет выглядеть довольно похоже на это глупое упражнение.
Я не в восторге от апельсина, но я люблю голландцев и восхищаюсь ими, поэтому у нас оранжевый фон, дань уважения моей принимающей стране. :-)
Часть III
Я разместил ответ таблицы Теда от Вызова ниже вместе с этим изображением
(источник: sontag.ca)
потому что обитатели могут быть легко добавлены к участкам сада, не касаясь правил CSS - все автоматически центрируется.
Можете ли вы сделать это с помощью CSS? Можете ли вы срубить самое сильное дерево в лесу с... сельдью?
Обновление: ответ Чарли здесь.
Ответы
Ответ 1
(источник: sontag.ca)
Впервые я выполнил это упражнение чуть более 2 лет назад, когда впервые изучал HTML и CSS. Мое первое решение было похоже на то, что вы видите здесь, за исключением анонимных контейнеров DIV. Затем я получил эту идею для веб-страницы, которая провела параллельное сравнение CSS с таблицей, чтобы доказать, что CSS лучше. Поэтому я работал над страницей "Вызов", опубликовал ее, а затем разместил этот вопрос.
Сэм Хаслер опубликовал ответ в течение нескольких минут, кажется, это было действительно близко. Я мог видеть, что он был на пути к лучшему решению, чем у меня было. Все его дивы были в порядке, а мои - нет. Jacco опубликовал комментарий, спрашивающий, почему я использовал две вложенные таблицы, когда одна будет делать. Конечно, он тоже был прав.
Таким образом, у меня было два Гомера Симпсона "Doh!" моменты сразу. Я читаю другие вопросы и ответы по таблицам против CSS. Кто-то упомянул, что таблицы центрированы вертикально. Мой ответ также не центрировался вертикально, но я подумал, что это возможно. В конце концов, все дело в том, чтобы делать все, что может делать стол, и лучше. Я уже загнал себя в угол, похожий на дурака, поэтому мне пришлось искать ответ.
В конце концов (стыдно сказать, сколько времени прошло) я нашел решение, приведенное ниже. После этого я смог реализовать свою первоначальную концепцию веб-страницы параллельного сравнения.
Вот объяснение того, как все это работает и почему вы должны использовать CSS
Чарли ответь...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Charlie CSS layout</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<style type="text/css">
#outer {
width:175px; height:175px;
text-align:center;
font: italic 100%/200% 'Comic Sans MS', cursive;
border: 1px solid black;
}
#inner { width: 105px }
#outer>DIV, #inner>DIV { float:left }
#outer>DIV>DIV, #inner>DIV>DIV
{ display: table-cell; vertical-align: middle }
#c2 { clear: right }
#c3, #c6 { clear: left }
#c1>DIV, #c4>DIV, #c7>DIV, #c8>DIV, #c9>DIV { height: 35px }
#c2>DIV, #c3>DIV, #c5>DIV, #c6>DIV, #c7>DIV { width: 35px }
#c2>DIV, #c3>DIV { height: 140px }
#c1>DIV, #c9>DIV { width: 140px }
#c5>DIV, #c6>DIV { height: 70px }
#c4>DIV, #c8>DIV { width: 70px }
#c2, #c6, #c7, #c8, #c9 { position:relative; top:-35px }
#c9 { left: 35px }
#c1 { background-color: silver }
#c2 { background-color: maroon; color: white }
#c3 { background-color: navy; color: white }
#c4 { background-color: red }
#c5 { background-color: blue; color: white }
#c6 { background-color: yellow }
#c7 { background-color: white }
#c8 { background-color: green; color: white }
#c9 { background-color: orange }
/* these rules are a HACK to center vertically in IE7 */
#outer>DIV>DIV, #inner>DIV>DIV { position:relative; }
#c1>DIV, #c4>DIV, #c7>DIV, #c8>DIV, #c9>DIV { top: 10% }
#c5>DIV { top: 0% }
#c6>DIV { top: 30% }
#c2>DIV { top: 0% }
#c3>DIV { top: 15% }
</style>
</head>
<body>
<div id="outer">
<div id="c1"><div> 1 </div></div>
<div id="c3"><div>3<br/>3<br/>3</div></div>
<div id="inner">
<div id="c4"><div> 4 </div></div>
<div id="c5"><div> 5<br/>5 </div></div>
<div id="c6"><div> 6 </div></div>
<div id="c7"><div> 7 </div></div>
<div id="c8"><div> 8 </div></div>
</div>
<div id="c2"><div> 2<br/>2<br/>2<br/>2 </div></div>
<div id="c9"><div> 9 9 9</div></div>
</div>
</body>
</html>
Ответ 2
Обновление: Окончательное редактирование. Переключилось на STRICT DTD, удалено курсивом, чтобы соответствовать изображению в вопросе, и вернулось назад к полному имени цвета для идентификаторов, чтобы показать намерение в соответствии с комментарием OPs по вопросу, и отсортировал главный столбец имен id в css в порядке их появления в html.
Я также отказался от повторного использования внешнего div как белого квадрата 7 (у него не было собственного div в предыдущих изменениях), поскольку это не будет были практичными, если вы хотели использовать макет, и немного походили на обман (хотя с точки зрения краткости/пикселя мне нравилось его нахальство).
Смотрите здесь: http://jsbin.com/efidi
Редактировать здесь: http://jsbin.com/efidi/edit
Проверяет как XHTML строгий
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head><title>The Challenge</title>
<style type="text/css">
div { text-align: center; width:175px; height:175px; line-height: 35px;}
div div { float:left; width: 35px; height: 35px;}
#orange, #maroon,
#blue , #green {float:right;}
#orange, #silver {background-color:silver; width:140px;}
#navy , #maroon {background-color:maroon; height:140px; line-height:140px;}
#navy {background-color:navy ;}
#green , #red {background-color:red ; width: 70px;}
#yellow, #blue {background-color:blue ; height: 70px; line-height: 70px;}
#yellow {background-color:yellow;}
#white {background-color:white ;}
#green {background-color:green ;}
#orange {background-color:orange;}
</style>
</head>
<body>
<div>
<div id="silver">1</div>
<div id="maroon">2</div>
<div id="navy" >3</div>
<div id="red" >4</div>
<div id="blue" >5</div>
<div id="yellow">6</div>
<div id="white" >7</div>
<div id="green" >8</div>
<div id="orange">9</div>
</div>
</body></html>
Кроме того: я мог бы поместить немного больше пробелов, если бы мог, но это на пределе, прежде чем блоки кода здесь на SO начнут получать полосы прокрутки, и я решил, что все это появится на экране.
Примечание. Я заимствовал исправление line-height
из Tyson (кто первым получил правильный ответ).
Ответ 3
Вот три решения.
Разметка:
<div id="outer">
<div id="a1">1</div>
<div id="a2">2</div>
<div id="a3">3</div>
<div id="a4">4</div>
<div id="a5">5</div>
<div id="a6">6</div>
<div id="a7">7</div>
<div id="a8">8</div>
<div id="a9">9</div>
</div>
Основная таблица стилей (размеры и цвет):
#outer {
width: 20em;
height: 20em;
}
#a1 {
background-color: #C0C0C0;
width: 80%;
height: 20%;
}
#a2 {
background-color: #800000;
width: 20%;
height: 80%;
}
#a3 {
background-color: #000080;
width: 20%;
height: 80%;
}
#a4 {
background-color: #FF0000;
width: 40%;
height: 20%;
}
#a5 {
background-color: #0000FF;
width: 20%;
height: 40%;
}
#a6 {
background-color: #FFFF00;
width: 20%;
height: 40%;
}
#a7 {
background-color: #FFFFFF;
width: 20%;
height: 20%;
}
#a8 {
background-color: #008000;
width: 40%;
height: 20%;
}
#a9 {
background-color: #FFA500;
height: 20%;
width: 80%;
}
И теперь позиционирование:
-
Использование float
:
#a1 {
float: left;
}
#a2 {
float: right;
}
#a3 {
float: left;
}
#a4 {
float: left;
}
#a5 {
float: right;
}
#a6 {
float: left;
}
#a7 {
float: left;
}
#a8 {
float: right;
}
#a9 {
float: right;
}
-
Использование position
:
#outer {
position: relative;
}
#outer div {
position: absolute;
}
#a1 {
top: 0;
left: 0;
}
#a2 {
top: 0;
right: 0;
}
#a3 {
top: 20%;
left: 0;
}
#a4 {
top: 20%;
left: 20%;
}
#a5 {
top: 20%;
right: 20%;
}
#a6 {
top: 40%;
left: 20%;
}
#a7 {
top: 40%;
left: 40%;
}
#a8 {
bottom: 20%;
right: 20%;
}
#a9 {
bottom: 0;
right: 0;
}
-
Использование margin
:
#a1 {
}
#a2 {
margin: -20% -80% 0 80%;
}
#a3 {
margin: -60% 0 0 0;
}
#a4 {
margin: -80% -20% 0 20%;
}
#a5 {
margin: -20% -60% 0 60%;
}
#a6 {
margin: -20% -20% 0 20%;
}
#a7 {
margin: -40% -40% 0 40%;
}
#a8 {
margin: 0 -40% 0 40%;
}
#a9 {
margin: 0 -20% 0 20%;
}
Ответ 4
Здесь вы идете - меньше строк, чем любое злоупотребление табличными тегами, может обеспечить:
<img
src="http://sontag.ca/TheChallenge/tiles.gif"
alt="nine assorted coloured rectangles"
/>
: р
Ответ 5
Это точно соответствует вашему примеру в таблице, включая текст с вертикальной и горизонтальной ориентацией (который никто еще не делал до сих пор).
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Boxy Boxes in a Box</title>
<style type="text/css" media="screen">
#container {position: relative; margin: 100px auto; height: 175px; width: 175px; font-style: italic; }
.box {width: 35px; height: 35px; position: absolute; text-align: center; line-height: 35px;}
#box_1 {top: 0; left: 0; width: 140px; background-color: silver;}
#box_2 {top: 0; right: 0; height: 140px; background-color: maroon; line-height: 140px;}
#box_3 {top: 35px; left: 0; height: 140px; background-color: navy; line-height: 140px;}
#box_4 {top: 35px; left: 35px; width: 70px; background-color: red;}
#box_5 {top: 35px; right: 35px; height: 70px; background-color: blue; line-height: 70px;}
#box_6 {top: 70px; left: 35px; height: 70px; background-color: yellow; line-height: 70px;}
#box_7 {top: 70px; left: 70px; background-color: white;}
#box_8 {bottom: 35px; right: 35px; width: 70px; background-color: green;}
#box_9 {bottom: 0; right: 0; width: 140px; background-color: orange;}
</style>
</head>
<body>
<div id="container">
<div id="box_1" class="box">1</div>
<div id="box_2" class="box">2</div>
<div id="box_3" class="box">3</div>
<div id="box_4" class="box">4</div>
<div id="box_5" class="box">5</div>
<div id="box_6" class="box">6</div>
<div id="box_7" class="box">7</div>
<div id="box_8" class="box">8</div>
<div id="box_9" class="box">9</div>
</div>
</body>
</html>
Ответ 6
Пока ширина и высота являются постоянными, всегда можно использовать абсолютное позиционирование, чтобы получить тот же эффект. Это должно быть достаточно очевидным, так что мне не нужно вводить его (это поздно и я ленив: P)
Ответ 7
Я использовал несколько иной подход, чем решения "id all", которые я видел до сих пор. Это меньше, чем на 100 символов больше, чем на основе таблицы.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>The Challenge</title>
<style type="text/css">
div {
position:absolute;
width:35px;
height:35px;
text-align:center;
line-height:35px
}
.spiral { width:175px; height:175px }
.t { top:0 }
.l { left:0 }
.r { right:0 }
.b { bottom:0 }
.w { width:140px }
.h { height:140px; line-height:140px }
.c {
top:35px;
left:35px;
width:105px;
height:105px
}
.c .w { width:70px }
.c .h { height:70px; line-height: 70px }
.c .c { width:35px; height: 35px }
</style>
</head>
<body>
<div class="spiral">
<div class="t l w" style="background-color:silver">1</div>
<div class="t r h" style="background-color:maroon">2</div>
<div class="b l h" style="background-color:navy">3</div>
<div class="c">
<div class="t l w" style="background-color:red">4</div>
<div class="t r h" style="background-color:blue">5</div>
<div class="b l h" style="background-color:yellow">6</div>
<div class="c">7</div>
<div class="b r w" style="background-color:green">8</div>
</div>
<div class="b r w" style="background-color:orange">9</div>
</div>
</body>
</html>
Изменить: Основываясь на ваших изменениях, я отправляю несколько более подробное, но, надеюсь, более четкое решение, которое добавляет черную границу, устанавливает текст в белый цвет и не устанавливает положение "сада".
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>The Challenge</title>
<style type="text/css">
div {
position:absolute;
width:35px;
height:35px;
text-align:center;
line-height:35px
}
div.spiral {
position:relative;
width:175px;
height:175px;
border: 1px solid #000
}
.top { top:0 }
.left { left:0 }
.right { right:0 }
.bottom { bottom:0 }
.wide { width:140px }
.tall { height:140px; line-height:140px }
.center {
top:35px;
left:35px;
width:105px;
height:105px
}
.center .wide { width:70px }
.center .tall { height:70px; line-height: 70px }
.center .center { width:35px; height: 35px }
</style>
</head>
<body>
<div class="spiral">
<div class="top left wide" style="background-color:silver">1</div>
<div class="top right tall" style="background-color:maroon">2</div>
<div class="bottom left tall" style="background-color:navy;color:#fff">3</div>
<div class="center">
<div class="top left wide" style="background-color:red">4</div>
<div class="top right tall" style="background-color:blue">5</div>
<div class="bottom left tall" style="background-color:yellow">6</div>
<div class="center">7</div>
<div class="bottom right wide" style="background-color:green">8</div>
</div>
<div class="bottom right wide" style="background-color:orange">9</div>
</div>
</body>
</html>
Ответ 8
Решение с одной таблицей.
Теперь не пропустите меня.
Я знаю, что это не ответ на исходный вопрос.
Я отправил этот ответ, потому что ОП запросил его в комментарии к исходному вопросу.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-language" content="en" />
<title>The Challenge</title>
</head>
<body>
<table cellspacing="0" cellpadding="0" border="0" summary="">
<tr>
<td colspan="4" height="35" align="center" bgcolor="silver"><i>1</i></td>
<td rowspan="4" width="35" align="center" bgcolor="maroon"><i>2</i></td>
<td rowspan="5" valign="bottom"><img src="http://sontag.ca/gif/grinch.gif" width="41" height="122" alt="Dr. Suess Grinch"/></td>
</tr><tr>
<td rowspan="4" width="35" align="center" bgcolor="navy"><i>3</i></td>
<td colspan="2" height="35" align="center" bgcolor="red"><i>4</i></td>
<td rowspan="2" width="35" align="center" bgcolor="blue"><i>5</i></td>
</tr><tr>
<td rowspan="2" width="35" align="center" bgcolor="yellow"><i>6</i></td>
<td width="35" height="35" align="center"><i>7</i></td>
</tr><tr>
<td colspan="2" height="35" align="center" bgcolor="green"><i>8</i></td>
</tr><tr>
<td colspan="4" height="35" align="center" bgcolor="orange"><i>9</i></td>
</tr>
</table>
</body>
</html>
Действителен XHTML 1.0 Transitional, и я включил персонажа доктора Суесса:)
Разделив Dr. Suess character
, объявление <?xml
, атрибут meta-tags
и summary
, вы можете сократить его до 929 символов и по-прежнему быть действительным XHTML 1.0 Transitional.
Edit
В соответствии с запросом XHTML 1.0 Strict
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>The Challenge</title>
<style type="text/css">
BODY {background: orange}
#garden {border: 1px solid black; color: black}
#garden TD {
font: italic 100% 'Comic Sans MS', cursive;
height: 35px;
padding: 0;
text-align: center;
width: 35px
}
#c1 {background: silver}
#c2 {background: maroon; color: white}
#c3 {background: navy; color: white}
#c4 {background: red}
#c5 {background: blue; color: white}
#c6 {background: yellow}
#c7 {background: white}
#c8 {background: green; color: white}
#c9 {background: orange}
</style>
</head>
<body>
<table id="garden" cellspacing="0">
<tr>
<td id="c1" colspan="4">1</td>
<td id="c2" rowspan="4">2</td>
</tr><tr>
<td id="c3" rowspan="4">3</td>
<td id="c4" colspan="2">4</td>
<td id="c5" rowspan="2">5</td>
</tr><tr>
<td id="c6" rowspan="2">6</td>
<td id="c7">7</td>
</tr><tr>
<td id="c8" colspan="2">8</td>
</tr><tr>
<td id="c9" colspan="4">9</td>
</tr>
</table>
</body>
</html>
970 символов без пробелов, оранжевый фон, д-р Суесс Гринч удален.
Ответ 9
Никто здесь еще не дал решения для таблиц, и задача состоит в том, чтобы сравнить макеты CSS с макетами на основе таблиц в управляемом (и сильно предвзятом) сценарии.
Итак, вот решение Ted Table Layout и его задача...
"С помощью моего решения на основе таблиц очень легко добавлять новых жителей в садовые участки путем очень простых добавлений только к разметке HTML! Все жители автоматически центрируются и располагаются в приятном стиле. Например:"
(источник: sontag.ca)
(источник: sontag.ca)
"Насколько я могу судить, никакие решения на основе CSS здесь не могут вместить новых жителей без значительного обновления правил CSS".
"Лучше принести много денег, мальчики, теперь я чувствую себя очень голодным и жаждущим".
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Terrible Ted Table Layout</title>
<style type="text/css">
#master TD { text-align: center }
#master {
border: 1px solid black;
font: italic 100%/200% 'Comic Sans MS', cursive;
}
#silver { background-color:silver }
#maroon { background-color: maroon; color:white }
#navy { background-color:navy; color:white }
#red { background-color: red }
#blue { background-color:blue; color:white }
#yellow { background-color: yellow }
#green { background-color:green; color:white }
#orange { background-color:orange }
#white { background-color:white }
#silver, #red, #green, #orange, #white { height: 35px }
#maroon, #navy, #blue, #yellow, #white { width: 35px }
</style>
</head>
<body style="background-color:#ffb600">
<table id="master" border="0" cellpadding="0" cellspacing="0"
summary="layoutByTable"><tr>
<td id="silver" colspan="2" > 1 </td>
<td id="maroon" rowspan="2" > 2 </td>
</tr><tr>
<td id="navy" rowspan="2" > 3 </td>
<td>
<table border="0" cellpadding="0" cellspacing="0"
summary="inner"><tr>
<td id="red" colspan="2" > 4 </td>
<td id="blue" rowspan="2" > 5 </td>
</tr><tr>
<td id="yellow" rowspan="2" > 6 </td>
<td id="white"> 7 </td>
</tr><tr>
<td id="green" colspan="2" > 8 </td>
</tr>
</table>
</td>
</tr><tr>
<td id="orange" colspan="2"> 9 </td>
</tr>
</table>
</body>
</html>
Ответ 10
Краткость разметки....
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>The Challenge</title>
<style type="text/css">
.garden {
position: relative;
width: 175px;
height: 175px;
font-family: 'Comic Sans MS', cursive;
border: 1px solid;
color: #000;
}
.garden div {
position: absolute;
width: 35px;
height: 35px;
line-height: 35px;
text-align: center;
}
.garden div:first-child {
width: 140px;
background: silver;
}
.garden div:first-child + div {
right: 0;
height: 140px;
line-height: 140px;
color: #fff;
background: maroon;
}
.garden div:first-child + div + div {
top: 35px;
height: 140px;
line-height: 140px;
color: #fff;
background: navy;
}
.garden div:first-child + div + div + div {
top: 35px;
left: 35px;
width: 70px;
background: red;
}
.garden div:first-child + div + div + div + div {
top: 35px;
right: 35px;
height: 70px;
line-height: 70px;
background: blue;
}
.garden div:first-child + div + div + div + div + div {
top: 70px;
left: 35px;
height: 70px;
line-height: 70px;
background: yellow;
}
.garden div:first-child + div + div + div + div + div + div {
top: 70px;
left: 70px;
background: white;
}
.garden div:first-child + div + div + div + div + div + div + div {
top: 105px;
left: 70px;
width: 70px;
background: green;
}
.garden div:first-child + div + div + div + div + div + div + div + div{
bottom: 0;
right: 0;
width: 140px;
background: orange;
}
</style>
</head>
<body>
<div class="garden">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
</div>
</body>
</html>
ссылка
Ответ 11
Я думаю, мы доказали, что есть более чем один способ сделать это. Тег table
и CSS являются жизнеспособными вариантами.
Вместо того, чтобы добавить еще один способ завершить задачу, я просто хотел бы сказать, что это проще или сложнее, проще или сложнее: таблицы в HTML должны использоваться для отображения табличных данных.
- Табличные данные сделаны для табличных данных.
- CSS создан для стилизации/презентации.
Ответ 12
Вот пример, который не использует абсолютное позиционирование, не использует table-cell и действителен в IE6-8, FF и т.д.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Terrible Ted Table Layout</title>
<style type="text/css">
#box{border:1px solid #000; width:175px; height:175px; color:navy; font-family:"Comic Sans MS"; font-size:13px; font-style:italic; text-align:center;}
div {float:left}
#c1, #c3, #c4, #c7, #c8, #c9{height:35px; line-height:35px}
#c2, #c3{height:140px;line-height:140px}
#c5, #c6{height:70px; line-height:70px}
#c1, #c9{width:140px}
#c2, #c3, #c5, #c6, #c7{width:35px}
#c4, #c8{width:70px}
#c6, #c7 {margin-top:-35px}
#c1{background-color:silver}
#c2{background-color:maroon; float:right}
#c3{background-color:navy}
#c4{background-color:red}
#c5{background-color:blue}
#c6{background-color:yellow}
#c7{background-color:white}
#c8{background-color:green}
#c9{background-color:orange}
</style>
</head>
<body>
<div id="box">
<div id="c1">1</div>
<div id="c2">2</div>
<div id="c3">3</div>
<div id="c4">4</div>
<div id="c5">5</div>
<div id="c6">6</div>
<div id="c7">7</div>
<div id="c8">8</div>
<div id="c9">9</div>
</div>
</body>
</html>