Простая блочная структура html css, не можете использовать нижнее поле -headerHeight для содержимого div, чтобы избежать полосы прокрутки? - PullRequest
2 голосов
/ 27 ноября 2009

Вот моя простая структура html / css:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>de titel</title>
        <style type="text/css">
            * {
                color: #FFFFFF;
                margin: 0;
                padding: 0;
            }
            html, body {
                height: 100%;
                background-color: #000000;
            }
            #wrapper {
                width: 800px;
                height: 100%;
                margin-left: auto;
                margin-right: auto;
            }
            #header {
                background-color: lightblue;
                position: absolute;
                top: 0;
                width: 800px;
                border: 1px solid red;
                height: 60px;
            }
            #content {
                height: 100%;
                margin-top: 60px;
                margin-bottom: -60px;
            }
            #menu {
                width: 200px;
                height: 100%;
                border: 1px solid red;
                background-color: gray;
                float: left;
                padding: 5px 0 0 5px;
            }
            #text {
                background-color: orange;
                height: 100%;
                margin-left: 200px;
                padding-top: 5px;
                padding-left: 15px;
                margin-right: -2px;
                border: 1px solid red;
            }
        </style>
    </head>
    <body>
        <div id="wrapper">
            <div id="header">
                <br><center>[ hier moet een header image worden toegevoegd ]</center>
            </div>
            <div id="content">
                <div id="menu">
                    Link 1
                </div>
                <div id="text">
                    <h1>Titel</h1>
                    <p>Dit is de tekst van je pagina.</p>
                </div>
            </div>
        </div>
    </body>
</html>

У меня есть вопрос: «почему не нижнее поле: -60px; что заставляет слой содержимого уменьшаться на 60 пикселей в высоту, так что полоса прокрутки не отображается из-за заголовка? Как решить эту проблему в Самый чистый способ? "

Заранее спасибо.

Ответы [ 8 ]

1 голос
/ 03 декабря 2009

В CSS2.1 отступы, границы и поля находятся за пределами высоты и ширины элемента. Это то, что заставляет ваш дизайн быть слишком высоким, потому что вы используете все эти элементы вместе со 100% высотой. Это означает, что ваши элементы составляют 100% высоты окна плюс отступы плюс поля плюс границы.

Я настроил ваш HTML и CSS следующим образом. Основная идея состоит в том, чтобы заставить два столбца заполнить экран, оставляя место для заголовка, который имеет фиксированный размер. Примечание: я удалил красные границы. Если вы хотите установить границы на этой странице, вам нужно использовать другой подход. Некоторые обходные пути, о которых я могу подумать, - это установить границы для неочевидных элементов. Например, если вам нужна рамка для #menu или #header, вы можете легко сделать это, потому что они являются элементами фиксированного размера. Для границы вокруг #text вы можете установить border-bottom на #header, border-right на #text, border-right на #menu и т. Д.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <title>de titel</title>
  <style type="text/css">
    * {
      color: #FFFFFF;
      margin: 0;
      padding: 0;
    }
    html, body {
      height: 100%;
      background-color: #000000;
    }
    #wrapper {
      width: 800px;
      height: 100%;
      margin: 0 auto;
    }
    #header {
      background-color: lightblue;
      position: relative;
      height: 60px;
      z-index: 1;
    }
    #content {
      height: 100%;
      margin: -60px 0 0 0;
    }
    #menu {
      width: 200px;
      height: 100%;
      background-color: gray;
      float: left;
    }
    #text {
      background-color: orange;
      height: 100%;
      margin-left: 200px;
    }
    #text_inner, #menu_inner {
      position: relative; 
      top: 65px;
      margin: 0 5px; 
    }
  </style>
</head>
<body>
  <div id="wrapper">
    <div id="header">
      <br><center>[ hier moet een header image worden toegevoegd ]</center>
    </div>
    <div id="content">
      <div id="menu">
        <div id="menu_inner">
          Link 1
        </div>
      </div>
      <div id="text">
        <div id="text_inner">
          <h1>Titel</h1>
          <p>Dit is de tekst van je pagina.</p>
        </div>
      </div>
    </div>
  </div>
</body>
</html>
1 голос
/ 17 декабря 2009

Следующий код прекрасно работает в совместимых со стандартами браузерах, хотя может быть и намного лучше. Я просто немного изменил ваш код, но не думаю, что вы действительно понимаете блочную модель CSS. Все ваши границы и отступы добавляются к 100%, которые вы объявили, что делает, конечно, больше , чем 100%. Пожалуйста, прочитайте и поймите блочную модель CSS . Также я рекомендую использовать Строгий DOCTYPE. Я использовал XHTML, но вы могли бы также использовать HTML 4.01. И вы использовали <center>, что устарело.

Удачи.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
    <head>
        <title>de titel</title>
        <style type="text/css">
                * {
                        color: #FFFFFF;
                        margin: 0;
                        padding: 0;
                }
                html, body {
                        height: 100%;
                        background-color: #000000;
                }
                #wrapper {
                        width: 800px;
                        height: 100%;
                        margin-left: auto;
                        margin-right: auto;
                        margin-bottom: -60px;
                }
                #header {
                        background-color: lightblue;
                        position: absolute;
                        top: 0;
                        width: 800px;
                        height: 60px;
                }
                #content {
                        height: 100%;
                }
                #menu {
                        width: 200px;
                        height: 100%;
                        background-color: gray;
                        float: left;
                        padding: 0 0 0 5px;
                }
                #text {
                        background-color: orange;
                        height: 100%;
                        margin-left: 200px;
                        padding-left: 15px;
                        margin-right: -2px;
                }
        </style>
    </head>
    <body>
        <div id="wrapper">
                <div id="header">
                    <p>image</p>
                </div>
                <div id="content">
                        <div id="menu">
                                Link 1
                        </div>
                        <div id="text">
                                <h1>Titel</h1>
                                <p>Dit is de tekst van je pagina.</p>
                        </div>
                </div>
        </div>
    </body>
</html>

Кстати, 100% означает 100%. Это не динамично. Если вы хотите, чтобы эти столбцы были на 100% при небольшом содержании, но при этом увеличивались при большом количестве содержимого, тогда ваша проблема носит только визуальный характер, и вы можете добиться желаемого эффекта, добавив вертикально повторяющееся фоновое изображение в оболочку, которая содержит цвета из двух столбцов. Затем вы удалили бы цвета bg из меню и текстовых элементов. Таким образом, оба столбца растут вместе с текстом. См. Также очень старую искусственную колонну технику.

1 голос
/ 02 декабря 2009

Если вы хотите скрыть полосу прокрутки, чтобы компоновка «дрожала» между страницами, у которых есть полоса прокрутки, но у которой нет полосы прокрутки, то более безопасный способ сделать это - убедиться, что на всех страницах есть полоса прокрутки.

Я использовал этот JavaScript в прошлом, но вы попадете в ад, если будете его использовать:

<script type='text/javascript'>
    window.document.write( '<style>body { height: '+(window.innerHeight+1)+'px; }</style>' );
</script>
1 голос
/ 30 ноября 2009

Ну, вот мое мнение.

Обратите внимание на изменение в doctype (здесь для простоты я использовал HTML5 doctype, так как он запускает режим стандартов во всех браузерах). ВСЕГДА используйте ВСЕГДА в режиме стандартов в режиме, если только вы не собираетесь работать с режимом адских странностей.

    <!DOCTYPE html>
<html>
    <head>
        <title>de titel</title>
        <style type="text/css">
                * {
                        color: #FFFFFF;
                        margin: 0;
                        padding: 0;
                }
                html, body {
                        height: 100%;
                        background-color: #000000;
                }
                #wrapper {
                        width: 800px;
                        height: 100%;
                        margin-left: auto;
                        margin-right: auto;
                        position:relative; /* added this */                        
                }
                #header {
                        background-color: lightblue;
                        position: absolute;
                        top: 0;
                        width: 800px;
                        border: 1px solid red;
                        height: 60px;
                }
                #content {
                        /*removed these*/
                        /*height: 100%;
                        margin-top: 60px;   
                        margin-bottom: -60px;*/
                        /* added these */
                        width:100%;
                        position:absolute;
                        top:60px;
                        bottom:7px;                        
                }
                #menu {
                        width: 200px;
                        height: 100%;
                        border: 1px solid red;
                        background-color: gray;
                        float: left;
                        padding: 5px 0 0 5px;
                }
                #text {
                        background-color: orange;
                        height: 100%;
                        margin-left: 200px;
                        padding-top: 5px;
                        padding-left: 15px;
                        margin-right: -2px;
                        border: 1px solid red;
                }
        </style>
    </head>
    <body>
        <div id="wrapper">
                <div id="header">
                        <br><center>[ hier moet een header image worden toegevoegd ]</center>
                </div>
                <div id="content">
                        <div id="menu">
                                Link 1
                        </div>
                        <div id="text">
                                <h1>Titel</h1>
                                <p>Dit is de tekst van je pagina.</p>
                        </div>
                </div>
        </div>
    </body>
</html>
0 голосов
/ 16 мая 2012
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <title>de titel</title> 
    <style type="text/css"> 
            * { 
                    color: #FFFFFF; 
                    margin: 0; 
                    padding: 0; 
            } 
            html, body { 
                    height: 100%; 
                    background-color: #000000; 
            } 

            #wrapper{
                    width: 800px; 
                    height: 100%; 
                    margin-left: auto; 
                    margin-right: auto;
        position:relative;
        border-bottom:1px solid red;
        bottom:1px;
            } 
            #header {
        border: 1px solid red;
                    background-color: lightblue; 
                    position: absolute; 
                    top: 0px; 
                    width: 800px;
                    height: 60px;
        z-index: 50;
            } 
            #content{
                    height: 100%; 
            } 
            #menu { border-left: 1px solid red;
        border-right: 1px solid red;
                    width: 199px; 
                    height: 100%; 
                    background-color: gray; 
                    float: left; 
            } 
            #text{border-right: 1px solid red;
        float: left;
                    background-color: orange; 
                    height: 100%;  
                    margin-right: -2px;
        width: 600px;
            } 

    div{
        display: block;
        margin: 0px;
        padding: 0px;}

    #menu div.Content,
    #text div.Content{
        border-top: 1px solid red !important;
        margin-top: 60px;
        padding-top: 5px;
        padding-bottom: 5px;}

    #menu div.Content{padding-left: 5px;}
    #text div.Content{padding-left: 15px;}
    </style> 
</head> 
<body> 
    <div id="wrapper"> 
            <div id="header"> 
                    <br><center>[ hier moet een header image worden toegevoegd ]</center> 
            </div> 
            <div id="content"> 
                    <div id="menu">
            <div class = 'Content'>
                                Link 1<!-- <br />
                                Link 1 <br />
                                Link 1 <br />
                                Link 1 <br />
                                Link 1 <br />
                                Link 1 <br />
                                Link 1 <br />
                                Link 1 <br />
                                Link 1 <br />
                                Link 1 <br />
                                Link 1 <br />
                                Link 1 <br />
                                Link 1 <br />
                                Link 1 <br />
                                Link 1 <br />
                                Link 1 <br />
                                Link 1 <br />
                                Link 1 <br />
                                Link 1 <br />
                                Link 1 <br />
                                Link 1 <br />-->
            </div>
                    </div> 
                    <div id="text"> 
            <div class = 'Content'>
                                <h1>Titel</h1> 
                                <!--<p>Dit is de tekst van je pagina.</p> 
                                <h1>Titel</h1> 
                                <p>Dit is de tekst van je pagina.</p> 
                                <h1>Titel</h1> 
                                <p>Dit is de tekst van je pagina.</p> 
                                <h1>Titel</h1> 
                                <p>Dit is de tekst van je pagina.</p> 
                                <h1>Titel</h1> 
                                <p>Dit is de tekst van je pagina.</p> 
                                <h1>Titel</h1> 
                                <p>Dit is de tekst van je pagina.</p> 
                                <h1>Titel</h1> 
                                <p>Dit is de tekst van je pagina.</p>-->
            </div>
                    </div>
            </div> 
    </div> 
</body> 
</html> 
0 голосов
/ 17 декабря 2009

Протестировано во всех основных браузерах.

            * {
                    color: #FFFFFF;
                    margin: 0;
                    padding: 0;
            }
            html, body {
                    height: 100%;
                    width:100%;
                    background-color: #000000;
                    position:absolute;
            }
            #wrapper {
                    width: 800px;
                    height: 100%;
                    margin-left: auto;
                    margin-right: auto;
                    position:relative;
            }
            #header {
                    background-color: lightblue;
                    position: absolute;
                    top: 0;
                    left:0;
                    right:0;
                    height: 60px;
                    border: 1px solid red;
            }
            #content {
                    position:absolute;
                    background-color:#999;
                    top:60px;
                    bottom:0;
                    left:0;
                    right:0;
            }
            #menu {
                position:absolute;
                top:0;
                    bottom:0;
                left:0;
                width: 200px;
                border: 1px solid red;
                background-color: gray;
                padding: 5px 0 0 5px;
            }
            #text {
                    background-color: orange;
                    position:absolute;
                    top:0;
                    bottom:0;
                    left:200px;
                    right:0px;
                    padding-top: 5px;
                    padding-left: 15px;
                    border: 1px solid red;
            }
0 голосов
/ 05 декабря 2009

Вы хотите, чтобы div меню увеличивался вместе с текстом div? Если нет, у меня это сработало в IE, Chrome и FF:

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

Удачи! :)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>de titel</title>
        <style type="text/css">
                *
                {
                    color: #FFFFFF;
                    margin: 0;
                    padding: 0;
                }
                html, body
                {
                    height: 100%;
                    background-color: #000000;
                }
                #wrapper
                {
                    width: 800px;
                    height: 100%;
                    margin-left: auto;
                    margin-right: auto;
                }
                #header
                {
                    background-color: lightblue;
                    position: absolute;
                    top: 0;
                    width: 800px;
                    border: 1px solid red;
                    height: 60px;
                }
                #menuContent
                {
                    height:100%;
                    width: 200px;
                    min-height: 100%;
                    border: 1px solid red;
                    background-color: gray;
                    float: left;
                    padding: 5px 0 0 5px;
                }
                #content
                {
                    height: 99%;
                }
                #menu
                {
                    padding-top:60px;
                }
                #textContent
                {
                    background-color: orange;
                    min-height: 100%;
                    margin-left: 206px;
                    padding-top: 5px;
                    padding-left: 15px;
                    margin-right: -2px;
                    border: 1px solid red;
                }
                #text
                {
                    padding-top: 60px;
                }
        </style>
    </head>
    <body>
        <div id="wrapper">
                <div id="header">
                        <br><center>[ hier moet een header image worden toegevoegd ]</center>
                </div>
                <div id="content">
                        <div id="menuContent">
                            <div id="menu">
                                    Link 1
                            </div>
                        </div>

                        <div id="textContent">
                            <div id="text">
                                    <h1>Titel</h1>
                                    <p>Dit is de tekst van je pagina.</p>
                            </div>
                        </div>
                </div>
        </div>
    </body>
</html>
0 голосов
/ 27 ноября 2009

Я думаю, это из-за твоих границ. Вы должны добавить их общую высоту к значению margin-bottom.

Редактировать И, на второй взгляд, я думаю, что это из-за вашего text Div. Вы назначаете высоту 100%, а затем добавляете еще 5-пиксельный отступ к вершине. Это может быть решено добавлением внутреннего div (например, the-content) внутри вашего text div. И стиль the-content div будет иметь padding-top:5px; padding-left:15px;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...