Как вы это сделаете: таблицы или CSS?

Puzzle Grinch
(источник: sontag.ca)

Часть I

Этот макет может быть сделан просто с 2 HTML-таблицами, одна вложена в другую, или даже с одной таблицей.

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

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

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

В первой части рассказывается, как возникла проблема. Я надеюсь, вам понравится.

Часть II - это Решение. Вы можете быть удивлены.


Часть II

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

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

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

  1. Наш сад должен иметь забор вокруг него; что-то, что могло бы отделить его от того мрачного окружения, в котором оно может оказаться; и не слишком дорого, но легко содержать в чистоте. Итак, я хочу 1 пиксель черной рамкой вокруг сада
  2. Жители каждого садового участка (персонажи) должны быть либо черными, либо белыми, в зависимости от того, кто из них показывает себя лучше в своем саду. Также они все скорописного происхождения. Там нет курсива среди них. ;-)
  3. Сад можно перемещать, то есть я могу иметь этот сад где угодно на странице (без абсолютного позиционирования).

Вот как должен выглядеть окончательный результат (цвет фона необязательный):

alt text
(источник: sontag.ca)

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

Сад должен быть перемещаемым, потому что оба вида садов (таблицы и CSS) должны сосуществовать на одной странице. Я могу ошибаться, говоря такую position:absolute правила не допускаются. Если вы можете заставить их работать в этом контексте, тогда у вас будет больше возможностей. Они, безусловно, будут приняты.

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

Сейчас я живу в Голландии, и сезон тюльпанов быстро приближается. Если вы пролетите над Голландией в течение следующих нескольких недель, и в ясный день (довольно редкий здесь) пейзаж внизу будет выглядеть довольно похоже на это глупое упражнение.

Я не в восторге от апельсина, но я люблю голландцев и восхищаюсь ими, поэтому у нас оранжевый фон, дань уважения моей принимающей стране. :-)


Часть III

Я разместил ответ таблицы Теда от Вызова ниже вместе с этим изображением

alt text
(источник: sontag.ca)

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

Можете ли вы сделать это с помощью CSS? Можете ли вы срубить самое сильное дерево в лесу с... сельдью?


Обновление: ответ Чарли здесь.

Ответы

Ответ 1

alt text
(источник: 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! Все жители автоматически центрируются и располагаются в приятном стиле. Например:"

alt text
(источник: sontag.ca)
alt text
(источник: 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>