Простое расположение двух столбцов html без использования таблиц

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

<table>
    <tr>
        <td>AAA</td>
        <td>BBB</td>
    </tr>
</table>

Я также открыт для HTML5/CSS3.

Ответ 1

<style type="text/css">
#wrap {
   width:600px;
   margin:0 auto;
}
#left_col {
   float:left;
   width:300px;
}
#right_col {
   float:right;
   width:300px;
}
</style>

<div id="wrap">
    <div id="left_col">
        ...
    </div>
    <div id="right_col">
        ...
    </div>
</div>

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

Для получения дополнительной информации об основных методах компоновки с использованием CSS см. этот учебник

Ответ 2

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

Это, кажется, имеет больше смысла, чем использование плавающих хаков.

<html>
  <head>
    <style>

#content-wrapper{
  display:table;
}

#content{
  display:table-row;
}

#content>div{
  display:table-cell
}

/*adding some extras for demo purposes*/
#content-wrapper{
  width:100%;
  height:100%;
  top:0px;
  left:0px;
  position:absolute;
}
#nav{
  width:100px;
  background:yellow;
}
#body{
  background:blue;
}
</style>

  </head>
  <body>
    <div id="content-wrapper">
      <div id="content">
        <div id="nav">
          Left hand content
        </div>
        <div id="body">
          Right hand content
        </div>
      </div>
    </div>
  </body>
</html>

Ответ 3

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

Здесь вы можете увидеть обновленный пример.

http://jsfiddle.net/Sohnee/EMaDB/1/

Не имеет значения, используете ли вы HTML 4.01 или HTML5 семантические элементы (вам нужно объявить левый и правый контейнеры в качестве отображения: block, если они еще не были).

CSS

.left {
    background-color: Red;
    float: left;
    width: 50%;
}

.right {
    background-color: Aqua;
    margin-left: 50%;
}

HTML

<div class="left">
    <p>I have updated this example to show a great way of getting a two column layout.</p>
</div>
<div class="right">
    <ul>
        <li>The columns are in the right order semantically</li>
        <li>You don't have to float both columns</li>
        <li>You don't get any odd wrapping behaviour</li>
        <li>The columns are fluid to the available page...</li>
        <li>They don't have to be fluid to the available page - but any container!</li>
    </ul>
</div>

Существует также довольно аккуратное (хотя и более новое) дополнение к CSS, которое позволяет размещать контент в столбцах без всякого разговора с div:

column-count: 2;

Ответ 4

Ну, если вы хотите самый простой способ, просто поставьте

<div class="left">left</div>
<div class="right">right</div>

.left {
    float: left;    
}

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

Ответ 5

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

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

Здесь очень простой пример, который создает до трех столбцов, если каждая из них имеет ширину не менее 200 пикселей, в противном случае используются меньше столбцов:

<html>
  <head>
    <title>CSS based columns</title>
  </head>
  <body>
    <h1>CSS based columns</h1>
    <ul style="columns: 3 200px; -moz-columns: 3 200px; -webkit-columns: 3 200px;">
      <li>Item one</li>
      <li>Item two</li>
      <li>Item three</li>
      <li>Item four</li>
      <li>Item five</li>
      <li>Item six</li>
      <li>Item eight</li>
      <li>Item nine</li>
      <li>Item ten</li>
      <li>Item eleven</li>
      <li>Item twelve</li>
      <li>Item thirteen</li>
    </ul>
  </body>
</html>

Ответ 6

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

<div style="display: flex">
    <div>AAA</div>
    <div>BBB</div>
</div>

Одна из приятных вещей в Flexbox заключается в том, что она позволяет вам легко определить, как дочерние элементы должны уменьшаться и расти, чтобы приспособиться к размеру контейнера. В приведенном выше примере я развернусь, чтобы сделать поле полной шириной страницы, сделайте левый столбец шириной не менее 75 пикселей и вырасти правый столбец для захвата оставшегося пространства. Я также потянет стиль в свой собственный блок, присвою некоторые цвета фона, чтобы столбцы были очевидны, и добавьте устаревшую поддержку Flex для некоторых старых браузеров.

<style type="text/css">
.flexbox {
    display: -ms-flex;
    display: -webkit-flex;
    display: flex;
    width: 100%;
}

.left {
    background: #a0ffa0;
    min-width: 75px;
    flex-grow: 0;
}

.right {
    background: #a0a0ff;
    flex-grow: 1;
}
</style>

...

<div class="flexbox">
    <div class="left">AAA</div>
    <div class="right">BBB</div>
</div>

Flex является относительно новым, и поэтому, если вы застряли в поддержке IE 8 и IE 9, вы не можете его использовать. Однако на момент написания этой статьи http://caniuse.com/#feat=flexbox указывает, по крайней мере, частичную поддержку браузерами, используемыми 94.04% рынка.

Ответ 7

Если вы хотите сделать это способом HTML5 (этот конкретный код работает лучше для таких вещей, как блоги, где <article> используется несколько раз, один раз для каждого тизера в блоге, в конечном счете, сами элементы не имеют большого значения, это стилизация и размещение элементов, которые дадут вам желаемые результаты):

<style type="text/css">
article {
  float: left;
  width: 500px;
}

aside {
  float: right;
  width: 200px;
}

#wrap {
  width: 700px;
  margin: 0 auto;
}
</style>

<div id="wrap">
  <article>
     Main content here
  </article>
  <aside>
     Sidebar stuff here
  </aside>
</div>

Ответ 8

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

<dl>
<dt></dt><dd></dd>
<dt></dt><dd></dd>
<dt></dt><dd></dd>
</dl>

взгляните на этот пример http://codepen.io/butlerps/pen/wGmXPL

Ответ 9

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

Ссылка на Fiddle: http://jsfiddle.net/eguFN/

<div class="menu">
                <ul class="menuUl">
                    <li class="menuli"><a href="#">Cadastro</a></li>
                    <li class="menuli"><a href="#">Funcionamento</a></li>
                    <li class="menuli"><a href="#">Regulamento</a></li>
                    <li class="menuli"><a href="#">Contato</a></li>
                </ul>
</div>

Css выглядит следующим образом

.menu {
font-family:arial;
color:#000000;
font-size:12px;
text-align: left;
margin-top:35px;
}

.menu a{
color:#000000
}

.menuUl {
  list-style: none outside none;
  height: 34px;
}

.menuUl > li {
  display:inline-block;
  line-height: 33px;
  margin-right: 45px;

}

Ответ 10

<div id"content">
<div id"contentLeft"></div>
<div id"contentRight"></div>
</div> 

#content {
clear: both;
width: 950px;
padding-bottom: 10px;
background:#fff;
overflow:hidden;
}
#contentLeft {
float: left;
display:inline;
width: 630px;
margin: 10px;
background:#fff;
}
#contentRight {
float: right;
width: 270px;
margin-top:25px;
margin-right:15px;
background:#d7e5f7;
} 

Очевидно, вам нужно будет отрегулировать размер столбцов в соответствии с вашим сайтом, а также цвета и т.д., но это должно сделать это. Также необходимо убедиться, что ширина ContentLeft и ContentRight не превышает ширину содержимого (включая поля).

Ответ 11

несколько небольших изменений, чтобы сделать его отзывчивым

<style type="text/css">
#wrap {
    width: 100%;
    margin: 0 auto;
    display: table;
}
#left_col {
   float:left;
   width:50%;
}
#right_col {
   float:right;
   width:50%;
}
@media only screen and (max-width: 480px){
    #left_col {
       width:100%;
    }
    #right_col {
       width:100%;
    }
}
</style>

<div id="wrap">
    <div id="left_col">
        ...
    </div>
    <div id="right_col">
        ...
    </div>
</div>