Чистый CSS3 3-столбцовый макет, с чего начать?
В настоящее время я обновляю довольно старый сайт (последнее обновление было около 2001 года) и согласились использовать HTML5 и CSS3.
Для общего дизайна я работаю над очень чистым стилем белого и серого тонов, со множеством прокладок и полей. Моя проблема находится на домашней странице: я хотел бы иметь макет с 3 колонками по центру. Но с чего начать? Я пробовал плавать, но тщетно.
Я делаю это правильно?
HTML:
<div class="colwrapper">
<div class="ltcol"></div>
<div class="ctcol"></div>
<div class="rtcol"></div>
</div>
CSS
.colwrapper { width:1020px; }
.ltcol, .ctcol, .rtcol { width:300px; margin:0 10px; padding:10px; }
.ltcol { float:left; }
.ctcol { margin-left:340px; }
.rtcol { float:right; }
Ответы
Ответ 1
ваш css должен выглядеть следующим образом:
.ltcol, .ctcol { float:left; }
.rtcol { float:right; }
Целью свойства float CSS является, вообще говоря, толкание элемента уровня блока влево или вправо, выведение его из потока по отношению к другим элементам блока. Это позволяет естественному потоку обтекать плавающий элемент. Эта концепция похожа на то, что вы видите каждый день в печатной литературе, где фотографии и другие графические элементы выровнены с одной стороны, в то время как другой контент (обычно текст) естественно вытекает вокруг элемента слева или справа.
Для получения дополнительной информации вы должны прочитать эту интересную статью .
См. этот демонстрационный пример: http://jsfiddle.net/akhurshid/YRWLV/
Ответ 2
Ваш HTML очень чистый - это отличный шаг вперед.
Вам нужно добавить float: left
ко всем столбцам. Чтобы гарантировать, что поплавок будет отменен после ваших столбцов, лучше добавить div clear
после плавающих столбцов.
HTML:
<div class="colwrapper">
<div class="ltcol">Column 1</div>
<div class="ctcol">Column 2</div>
<div class="rtcol">Column 3</div>
<div class="clear"></div>
</div>
CSS
.colwrapper { width:1020px; }
.ltcol, .ctcol, .rtcol { width:300px; margin:0 10px; padding:10px; background-color: #efefef }
.ltcol { float:left; }
.ctcol { float:left; }
.rtcol { float:left; }
.clear { clear: left; }
Ответ 3
Итак, вы добавляете тег css3
для этого квеста, поэтому я предлагаю вам сделать это с помощью раскладки столбца css3:
Дополнительная информация
например
HTML
<div class="colwrapper">
<div>text</div>
</div>
CSS
.colwrapper div
{
-moz-column-count:3; /* Firefox */
-webkit-column-count:3; /* Safari and Chrome */
column-count:3;
}
Это не работает на IE.
Ответ 4
Используйте одну из этих проверенных и проверенных реализаций вместо того, чтобы запускать свои собственные. В дополнение к тому, что вы получите тестовый и рабочий код, вы добавите отзывчивость к своему сайту с почти нулевым усилием.
и многое другое, если вы google..
Ответ 5
также может использовать свойство Flexbox для этого теперь, так что вам не нужно беспокоиться о поплавках или clearfix.
main{
/* .colwrapper{ */
display: flex;
flex-flow: row;
justify-content: center;
}
main > section{
/* .ltcol,.ctcol,.rtcol{ */
display:flex;
flex-flow:column;
align-items:center;
padding:10px; padding:.625rem;
}
main > section:nth-child(2){
/* .ctcol{ */
margin:0 20px; margin:0 1.25rem;
}
http://caniuse.com/flexbox показывает, что поддержка этого не так далеко, как вам бы хотелось, однако есть способы улучшить поддержка путем смешивания старых версий синтаксиса с новым http://css-tricks.com/using-flexbox/ имеет отличную запись на нем от Криса Койера, если вы хотите играть с этим для следующего проекта (этот пост довольно старый). Вы также можете получить более подробную информацию по адресу http://html5please.com/#flexbox
Кроме того, если вы используете HTML5, я бы, вероятно, пошел с разделами над div для более семантической структуры, поэтому сравнение выглядело бы примерно так:
<main>
<section></section><!-- or <nav></nav> -->
<section></section><!-- or <article></article> -->
<section></section><!-- or <aside></aside> -->
</main>
instead of...
<div class="colwrapper">
<div class="ltcol"></div>
<div class="ctcol"></div>
<div class="rtcol"></div>
</div>
Ответ 6
Просто попробуйте поставить rtcol div beofre le ltcol div.
<div class="colwrapper">
<div class="rtcol">X</div>
<div class="ltcol">X</div>
<div class="ctcol">X</div>
</div>
http://jsfiddle.net/EDjpy/