Альтернатива компоновке <table> в HTML

Прямо сейчас у меня есть веб-страница, настроенная на размер окна браузера с overflow:scroll пары overflow:scroll ее.

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

Моя страница (в двух словах):

<table>
<tr>
    <td>
        <div style="overflow:scroll;">
            <div>
                stuff1
            </div>
            <div>
                stuff1A
            </div>
        </div>
    </td>
    <td>
        <div style="overflow:scroll;">
            <div>
                stuff2
            </div>
            <div>
                stuff2A
            </div>
        </div>
    </td>
</tr>
<tr>
    <td>
           <input type="submit"><input type="submit"><input type=    "submit">
    </td>
    <td>
           <input type="submit"><input type="submit"><input type="submit">
    </td>
</tr>
<tr>
    <td>
    <textarea>stuff3</textarea></td>
    <td><select multiple>
        </select></td>
</tr>

По сути, проблема в том, что я хочу вложить <div> не помещая второй вложенный <div> в новую строку:

<div style="overflow:scroll;"> <div>stuff4</div><div>stuff4A</div> </div>
<div style="overflow:scroll;"> <div>stuff5</div><div>stuff5A</div> </div>

Я хочу, чтобы вышеуказанное отображало две прокручиваемые области на одной строке, и я не могу использовать <textarea> потому что текст должен быть нескольких цветов (см. Ссылку, предоставленную).

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

Ответы

Ответ 1

Ну, основной способ сделать это - сломать свою страницу на шесть <div> s:

<div class="left" id="l1">1</div>
<div class="right" id="r1">2</div>
<div class="left" id="l2">3</div>
<div class="right" id="r2">4</div>
<div class="left" id="l3">5</div>
<div class="right" id="r3">6</div>

Затем вы пишете CSS:

div.left {
    float: left;
    clear: both;
}

И вы должны получить что-то вроде:

1   2

3   4

5   6

Не требуется вложенный <div>.

Ответ 2

Обычно вы должны разделить содержимое на семантику, а затем стилизовать его.

Похоже, у вас есть пять основных областей:

  • сообщения
  • список пользователей
  • элементы управления
  • вход
  • чатов

Сделайте некоторую разметку:

<div class="left">
    <div id="messages">
        messages
    </div>
    <div id="user-list">
        user-list
    </div>
</div>
<div id="controls">
    controls
</div>
<div class="left">
    <div id="input">
        input
    </div>
    <div id="chatrooms">
        chatrooms
    </div>
</div>

И немного стиля:

.left{
    clear:both;
}
    .left div{
        float: left;
    }
#controls{
    clear: both;
}

И вы должны быть в состоянии завершить его здесь. Самая важная часть большинства макетов CSS - это правильное плавание.

Ответ 3

Новая опция сетки CSS:

<style>
#grid {
    display: grid;
    grid-template-columns: 20% 20% 20%;
}
</style>

<div id="grid">
    <div>first</div>
    <div>second</div>
    <div>thrid</div>
    <div>fourth</div>
    <div>fifth</div>
    <div>sixth</div>
    <div>seventh</div>
    <div>eighth</div>
    <div>nineth</div>
</div>

Ответ 4

Спасибо за ссылку, что объясняет многое. Звучит знакомо, я делал это раньше, но это может быть довольно сложно.

Прежде чем объяснять этот вопрос, мне нужно знать, хотите ли вы поддерживать IE6 с этим. Если это так, вам, вероятно, придется вернуться к режиму IE quirks, так как вам понадобится модель box-box box (которая не может быть выбрана другим способом в IE, и невозможно использовать как top, так и bottom свойства). Если это так, я рекомендую поместить все другие браузеры в эту модель окна, так что вам не нужно создавать две отдельные таблицы стилей для IE и остальных (да, конечно, вам все равно понадобятся некоторые обходные пути). Короче говоря, после использования этой другой модели коробки вы можете иметь свойства quasi top и bottom, используя стиль, используя граничные и нижние границы. Они будут действовать как сверху и снизу, потому что теперь они находятся на заданной высоте (например, 100% окна просмотра). Надеюсь, это хотя бы немного понятно.

Если нет, то это немного проще, и вы можете использовать стиль с фиксированным позиционированием и <div> получать свойства top и bottom. IIRC, это также должно работать в IE7 +.

Но сначала скажите мне, нужна ли вам поддержка для багги или нет...

Ответ 5

Проблема с ответами Эли и Майка Д. заключается в том, что, если я правильно понял этот вопрос, puddingfox хочет, чтобы три div над eachother были распределены по общему размеру окна просмотра. В этом случае у вас возникнут проблемы с кодированием IE6, потому что тогда вы не можете использовать как верхний, так и нижний свойства одного и того же элемента (который необходим для средних div).