Как выровнять 3 DIV рядом друг с другом?
Мне нужно создать 3 DIV в DIV контейнера нижнего колонтитула, которые выровнены по левому, среднему и правому краям. Все примеры CSS, которые я видел, используют float, как и я. Однако по какой-то причине DotNetNuke неправильно анализирует CSS. Я обнаружил, что левая панель перемещается правильно, но правая и средняя панели расположены сразу под ней, а не рядом с ней. Вот фрагмент из моего файла ascx:
<div id="footer">
<div id="footerleftpane" runat="server">
<dnn:LOGO id="dnnLogo" runat="server" />
<h3>Driving business performance.</h3>
<h3>Practical Sales and Operations Planning</h3>
<h3>for medium sized businesses.</h3>
</div>
<div id="footerRightPane" runat="server">
<dnn:COPYRIGHT id="dnnCopyright" runat="server" /><br />
<dnn:PRIVACY id="dnnPrivacy" runat="server" />
<dnn:TERMS id="dnnTerms" runat="server" />
</div>
<div id="footerMidPane" runat="server">
</div>
</div>
Вот соответствующая часть моего файла CSS:
#footer
{
width: 960px;
border: 1px;
}
#footerleftpane
{
width: 300px;
float: left;
}
#footerRightPane
{
width: 300px;
float: right;
}
#footerMidPane
{
padding:10px;
}
Какие изменения я должен сделать, чтобы достичь желаемого макета?
Обновление: я попытался предложить изменения, но макет все еще не работает, как видно на этой странице salesandoperationsplanning.net, которая демонстрирует то, что я хочу.
3 ответа
Прежде всего, вы должны нацелить имена элементов, которые появляются в вашем HTML. Похоже, ваша CMS добавляет какой-то префикс, а ваши идентификаторы не совпадают. (У вас есть #footerleftpane, но он отображается как #dnn_footerleftpane)
Кроме того, поскольку вы используете контейнер с фиксированной шириной, бесполезно создавать проблемы, не передавая ширину среднему контейнеру. Дайте ему ширину и посмотрите, работает ли он. Если этого не произойдет, вы можете попробовать еще два метода, если ваши блоки в правильном порядке источника (слева, в центре, справа).
Вы можете перемещать их все влево, убедившись, что его ширина и отступы помещаются на контейнере.
#dnn_footerleftpane, #dnn_footerMidPane, #dnn_footerRightPane { width: 300px; float: left; .... }
Вы можете использовать display: inline-block, также удостоверившись, что он соответствует ширине и отступам контейнера
#dnn_footerleftpane, #dnn_footerMidPane, #dnn_footerRightPane { .... display: inline-block; ... }
Это вопрос позиций, размеров и неправильных деклараций CSS.
1) позиция У вас есть средняя панель после правой в вашей странице источника!
2) размеры Я сделал быстрый тест, и вы можете исследовать дальше, но 300 пикселей это слишком много для ширины боковых панелей. Что-то в содержании, вероятно, изменяет ширину.
3) объявления css DotNetNuke (фактически все элементы управления ASP.Net делают) отображает элементы управления на стороне сервера (объявленные как runat="server"), присваивая им уникальный идентификатор, таким образом, то, что вы ожидаете, чтобы быть #footerleftpane в вашем css, будет #dnn_footerleftpane,
После изменения положения средней панели просто... в середине двух других, измените ваш CSS следующим образом:
#footer
{
width: 960px;
height: auto;
margin:0;
padding:0;
border: 0;
}
#dnn_footerleftpane, #dnn_footerRightPane{
width: 290px;
float: left;
}
#dnn_footerMidPane
{
width: auto;
float: left;
}
Ваш контейнер нижнего колонтитула составляет 960 пикселей. Ваш левый и правый элемент имеет размер 300 пикселей, но вы не указали ширину для своего среднего элемента, поэтому по умолчанию он равен полной ширине родительского элемента, что само по себе приводит к новой строке.
Вычтите отступ, и средний элемент не может быть шире, чем 340 пикселей.
http://jsfiddle.net/y8e4T/show
#footerMidPane{
width: 340px;
float: left;
padding: 10px;
}