CSS, HTML-макет: относительный div внутри абсолютного div-потока вне его контейнера - PullRequest
0 голосов
/ 11 января 2012

(Заранее извиняюсь, если на этот вопрос ответили в другом месте. Я оглянулся и не смог найти ничего подходящего.)

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

http://jsfiddle.net/dex3703/TZzKN/

#centercontainer (красный) предназначен для того, чтобы #mainsection (оранжевый) находился внутри всего другого содержимого. У меня есть абсолютное и относительное позиционирование, которое, как я думал, должно работать, но у меня есть следующие проблемы:

  • # Нижняя часть основного раздела выходит за пределы #centercontainer примерно на 20 пикселей.
  • снизу, слева, справа, сверху не имеют эффекта. Использование bottom: 20px для поднятия дна вверх не работает.
  • Если у меня нет высоты: 100% на # mainsection - что я считаю неправильным - оно и div внутри не имеют высоты! В верхней части # mainsection видна лишь небольшая полоска #contentsection.

Меня интересует только эта работа в Chrome и IE9. Надеюсь, что это облегчает жизнь.

Я уверен, что это какая-то проблема с нубом, поэтому заранее благодарен. Благодарю.

Ответы [ 2 ]

1 голос
/ 11 января 2012

Когда вы устанавливаете ширину и высоту для #mainsection равными 100%, вы указываете, что она имеет ту же ширину и высоту, что и #centercontainer, за исключением заполнения.С каждой стороны по 60px, потому что отступ #centercontainer равен 60px слева и справа.

Причина, по которой раздел #mainsection распространяется ниже #centercontainer, заключается в том, что #breadcrumbcontainer понижает его на 40 пикселей (высота #breadcrumbcontainer).Он расширяется только на 20px, потому что есть также 20px нижнее заполнение для # mainsection.

Если вы установите нижнее заполнение #centercontainer на высоту #breadcrumbcontainer (ВКЛЮЧАЯ # верхние и нижние поля breadcrumbcontainer), это должно исправитьэта проблема.Это, наверное, не самый элегантный способ исправить это.но это должно работать.

0 голосов
/ 11 января 2012

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

@charset "utf-8";

/*
HTML4 layout
using absolute positioning to get layout to work without HTML5/CSS flexbox

colors:
#1E242D - html frame bg
#F3F3F3 - left nav
#FFFFFF - main content, inner menu
#267EB9 - drawer bg

#DBDBDB - nav and left nav border
#4F9DD7 - selected item blue

#FFFFFF - white text
#4A4A4A - darkest text, dividers
#767676 - middle dark text
#C1C1C1 - light text

*/

html {
    font-size: 62.5%;
    height: 100%;
    background: White;
    margin: 0;
}

body
{
    font-size: 1.2em;
    font-family: "Segoe UI";
    height: 100%;
    margin: 0;
}

p
{
    margin: 0;

}

/* from html5boilerplate */
nav ul, nav ol  
{
    list-style: none;
    list-style-image: none;
    margin: 0;
    padding: 0;
}

#layoutdiv
{
    z-index: 100;    
    height: 100%;
    position: relative;

}

#maindiv
{
    margin: 10px 60px;
    position: absolute;
    top: 60px;
}

header
{
    position: absolute; /* change to absolute positioning */
    width: 100%;
    top: 0;

    height: 60px;

}

header p
{
    color: #FFFFFF;
}

header span
{
    vertical-align: middle;
}

#logodiv
{
    width: 300px;
    display: inline-block;
}

#notifypanel
{
    width: 40px;
    position: fixed;
    left: 0;
    top: 110px;
    bottom: 70px;
    background-color: LemonChiffon;
}

#notifypanel img
{
    width: 24px;
    height: 24px;
}

.left
{
    float: left;

}

.right
{
    float: right;

}

ul
{
    list-style-type:none;
    list-style: none;
    margin: 0;
    -webkit-padding-start: 0;    
    -webkit-margin-before: 0;
    -webkit-margin-after: 0;

}

li
{
    display: inline-block; /*need inline-block or height==0! */    
    cursor: pointer;
    vertical-align: middle;
    text-align:center;

}

#topnav
{

    /* position: absolute;*/
    /*width: 100%;*/
    /* top: 55px; with absolute positioning, move its top to the header's bottom */
    display: inline-block;
    vertical-align: top;
}

#topnav ul
{

    /*margin-left: 15px;*/
    /*height: 100%;*/
}

#topnav li
{
    margin-left: 15px;
    padding: 5px 10px;
    font-weight: bold;
    color: #767676;
    height: 100%;
    /*line-height: 5em;  for vertical alignment */

}

#topnav li:hover
{
    color: #1E242D;
    background-color: #F3F3F3;
}

#topnav .selected
{
    background-color: #4F9DD7;
    color: White;
}

#centercontainer
{
    position: absolute;
    overflow:hidden;
    top: 60px;
    bottom: 60px;
    padding: 0 60px 20px 60px;
    left: 0;
    right: 0;

    border: 1px solid red;

}

#breadcrumbcontainer
{

    top: 0;
    height: 40px;
    width: 100%;
    margin: 0 0 10px 0;
    font-family: Segoe UI Light;
    font-size: 3.6em;
    line-height: 0.8em;

}

#breadcrumb
{
    display: inline-block;
}

#viewcontrols
{
    display: inline-block;
    width: 320px;
    text-align: right;
}

#mainsection
{

    width: 100%;
    height: auto; /* mainseciton won't display unless 100%, but height is off, doesn't quite sit in containing div */
    position: relative;
    top:30px;
    background-color: Aqua;

    border: 2px solid orange;

}

#contentsection
{

    position: absolute;
    left: 220px;
    bottom: 0;
    top: 0;
    padding: 5px;
    box-sizing: border-box; /* makes padding, margins behave like XAML */
    overflow-x: auto;
    overflow-y: auto;

    background-color: AliceBlue; /* remove later */
    display: inline-block;

}

#leftnav
{
    width: 200px;
    /*position: absolute;*/
    left: 0;
    bottom: 0;
    top: 0;
    background: #F3F3F3;
    overflow-y: auto;
    display: inline-block;
}

#leftnav li
{
    display: block;
    text-align: left;
    padding: 7px 0 7px 20px;
    border-bottom: 1px solid #DBDBDB;


}

#leftnav img
{
    display: inline-block;
    vertical-align: middle;
    width: 24px;
    height: 22px;
}

#leftnav p
{
    display: inline-block;
    vertical-align: middle;
    margin: 0 0 0 10px;
}

#leftnav .selected
{
    background-color: #4F9DD7;
}

#leftnav .selected:hover
{
    background-color: #4387B7;
}

#leftnav li:hover
{
    background-color: #FdFdFd;
}


footer
{
    background: #267EB9;
    height: 60px;
    position: absolute;
    bottom: 0;
    width: 100%;
    line-height: 1em;  /* vertically centers header content .. see http://phrogz.net/CSS/vertical-align/index.html */
    text-align: center; /* centers the center button div */
}

footer img
{
    margin-right: 15px;
    height: 24px;
    width: 24px;
}

footer p
{
    display: inline-block;
    margin: 0;
    vertical-align: super;
    color: #FFFFFF;
    font-size: 0.8em;
}

.footerleft
{
    margin-left: 20px;
    position: relative;
    top: 17px;
}

.footerright
{
    margin-right: 10px;
    position: relative;
    top: 17px;
}

.footercenter
{
    display: inline-block;
    position: relative;
    top: 13px;
}

.footercenter div
{
    display: inline-block;
    margin-right: 20px;
}

.footercenter p
{
    display: block;
}

.footercenter img
{
    margin: 0;
}
...