Разделить Div на 2 столбца с помощью CSS



Я пытался разделить div на два столбца с помощью CSS, но мне еще не удалось заставить его работать. Моя основная структура выглядит следующим образом:



<div id="content">
<div id="left">
<div id="object1"></div>
<div id="object2"></div>
</div>

<div id="right">
<div id="object3"></div>
<div id="object4"></div>
</div>
</div>


если я попытаюсь переместить правый и левый дивы в их соответствующие позиции (справа и слева), он, похоже, игнорирует цвет фона содержимого div. И другой код, который я пробовал с разных сайтов, похоже, не может быть переведен на мою структуру.



Спасибо за любую помощь!

777   13  

13 ответов:

когда вы плаваете эти два дива, содержимое div рушится до нулевой высоты. Просто добавьте

<br style="clear:both;"/>

после # right div, но внутри содержимого div. Это заставит содержимое div окружить два внутренних плавающих дива.

это работает хорошо для меня. Я разделил экран на две половины: 20% и 80%:

<div style="width: 20%; float:left">
   #left content in here
</div>

<div style="width: 80%; float:right">
   #right content in there
</div>

другой способ сделать это, чтобы добавить overflow:hidden; к родительскому элементу плавающих элементов.

overflow: hidden заставит элемент расти, чтобы вписаться в плавающие элементы.

таким образом, все это можно сделать в css, а не добавлять другой элемент html.

самый гибкий способ сделать это:

#content::after {
  display:block;
  content:"";
  clear:both;
}

Это действует точно так же, как добавление элемента к #content:

<br style="clear:both;"/>

но без добавления элементов. :: after называется псевдо-элементом. Единственная причина, по которой это лучше, чем добавление overflow:hidden; to #content - это то, что вы можете иметь абсолютное переполнение дочерних элементов и все еще быть видимым. Также это позволит box-shadow по-прежнему быть видимым.

по какой-то причине мне никогда не нравились подходы к очистке, я полагаюсь на поплавки и процентные ширины для таких вещей.

вот что работает в простых случаях:

#content { 
  overflow:auto; 
  width: 600px; 
  background: gray; 
} 

#left, #right { 
  width: 40%; 
  margin:5px; 
  padding: 1em; 
  background: white; 
} 

#left  { float:left;  }
#right { float:right; } 

Если вы поместите некоторый контент, вы увидите, что он работает:

<div id="content">
  <div id="left">
     <div id="object1">some stuff</div>
     <div id="object2">some more stuff</div>
  </div>

  <div id="right">
     <div id="object3">unas cosas</div>
     <div id="object4">mas cosas para ti</div>
  </div>
</div>

вы можете увидеть его здесь:http://cssdesk.com/d64uy

дети ДИВС inline-block и они будут располагаться бок о бок:

#content {
   width: 500px;
   height: 500px;
}

#left, #right {
    display: inline-block;
    width: 45%;
    height: 100%;
}

посмотреть демо

лучший способ разделить div по вертикали --

#parent {
    margin: 0;
    width: 100%;
}
.left {
    float: left;
    width: 60%;
}
.right {
    overflow: hidden;
    width: 40%;
}

на это лучше всего ответить здесь вопрос 211383

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

поплавки не влияют на поток. То, что я обычно делаю, это добавить

<p class="extro" style="clear: both">possibly some content</p>

в конце 'wrapping div' (в данном случае содержимое). Я могу обосновать это на семантической основе, сказав, что такой абзац может потребоваться. Другой подход заключается в использовании clearfix CSS:

#content:after {
  content: ".";
  display: block;
  height: 0;
  clear: both;
  visibility: hidden;
}

#content {
  display: inline-block;
}
/*  \*/
* html #content {
  height: 1%;
}

#content {
  display: block;
}
/*  */

обман с комментариями для кросс-браузерной совместимости.

  1. сделать размер шрифта равным нулю в Родительском DIV.
  2. установите ширину % для каждого из дочерних Дивов.

    #content {
        font-size: 0;
    }
    
    #content > div {
        font-size: 16px;
        width: 50%;
    }
    

*в Safari вам может потребоваться установить 49%, чтобы он работал.

разделить деление на два столбца очень легко, просто укажите ширину вашего столбца лучше, если вы поместите это (например, ширина:50%) и установите float:left для левого столбца и float:right для правого столбца.

ни один из приведенных ответов не отвечает на исходный вопрос.

вопрос в том, как разделить div на 2 столбца с помощью css.

все вышеперечисленные ответы фактически вставляют 2 divs в один div для имитации 2 столбцов. Это плохая идея, потому что вы не сможете передавать содержимое в 2 столбца любым динамическим способом.

Итак, вместо вышеизложенного используйте один div, который определен как содержащий 2 столбца с использованием CSS в качестве следует...

.two-column-div {
 column-count: 2;
}

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

Я знаю, что этот пост старый, но если вы все еще ищете простое решение.

#container .left,
#container .right {
    display: inline-block;
}

#container .left {
    width: 20%;
    float: left;
}
#container .right {
    width: 80%;
    float: right;
}

Comments

    Ничего не найдено.