2015-02-28 3 views
0

Я пытаюсь найти правильный способ выложить эту страницу с помощью css, но с некоторыми проблемами. HTML выглядит следующим образом:CSS Макет страницы - divs move on resize

body { 
 
\t background-color: orange; 
 
} 
 

 
header { 
 
\t display: block; 
 
\t text-align: right; 
 
\t width: 100%; 
 
\t height: 50px; 
 
} 
 

 
.mainWrapper { 
 
\t width: 100%; 
 
} 
 

 
nav { 
 
\t border: 1px solid black; 
 
\t float: left; 
 
\t padding-top: 20px; 
 
\t width: 20%; 
 
} 
 

 
nav ul li { 
 
\t width: 100%; 
 
\t text-align: center; 
 
\t margin-bottom: 10px; 
 
\t list-style-type: none; 
 
\t height: 75px; 
 
\t border: 1px solid black; 
 
} 
 

 
content { 
 
\t float: right; 
 
\t width: 65%; 
 
\t padding: 100px; 
 
\t background-color: white; 
 
\t border-radius: 10px; 
 
\t border: 1px solid black; 
 
}
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
\t <link rel="stylesheet" type="text/css" href="style.css"> 
 
</style> 
 
</head> 
 
<body> 
 
<header>Title</header> 
 
<div class="mainWrapper"> 
 
\t <nav> 
 
\t \t <ul> 
 
\t \t \t <li>Link 1</li> 
 
\t \t \t <li>Link 2</li> 
 
\t \t \t <li>Link 3</li> 
 
\t \t \t <li>Link 4</li> 
 
\t \t </ul> 
 
\t </nav> 
 
\t <content>blah blah blah</content> 
 
</div> 
 
</body> 
 
</html>

Что я и добиваюсь является 100% ширины заголовка сверху. Под ним слева расположено навигационное меню шириной 20%. Тогда сразу справа от этого навигатора находится основная область содержимого, которая занимает оставшуюся ширину страницы.

Проблема заключается в том, что основная область содержимого смещается под навигационное меню, когда окно браузера становится меньше. Странно, что он делает это, потому что я думал, что область содержимого просто изменит размер, потому что она установлена ​​в% ширины.

Также, как наилучшим образом гарантировать, что и навигационное меню, и область содержимого занимают остальную часть пространства браузера по вертикали? Я попытался установить высоту: 100% на них (после установки высоты тела на 100%), но она простирается чуть чуть ниже нижней части страницы и заставляет полосу прокрутки отображаться вверх

ответ

1

Проблема заключается в том, что ваш padding:100px на content. Это добавляет фиксированный 200px-компонент к ширине элемента. Если вы хотите сохранить заполнение, измените ширину элемента на width: calc(65% - 200px);. Лучше настраивать прописку с помощью медиа-запросов.

body { 
 
\t background-color: orange; 
 
} 
 

 
header { 
 
\t display: block; 
 
\t text-align: right; 
 
\t width: 100%; 
 
\t height: 50px; 
 
} 
 

 
.mainWrapper { 
 
\t width: 100%; 
 
} 
 

 
nav { 
 
\t border: 1px solid black; 
 
\t float: left; 
 
\t padding-top: 20px; 
 
\t width: 20%; 
 
} 
 

 
nav ul li { 
 
\t width: 100%; 
 
\t text-align: center; 
 
\t margin-bottom: 10px; 
 
\t list-style-type: none; 
 
\t height: 75px; 
 
\t border: 1px solid black; 
 
} 
 

 
content { 
 
\t float: right; 
 
\t width: calc(65% - 200px); 
 
\t padding: 100px; 
 
\t background-color: white; 
 
\t border-radius: 10px; 
 
\t border: 1px solid black; 
 
}
<body> 
 
<header>Title</header> 
 
<div class="mainWrapper"> 
 
\t <nav> 
 
\t \t <ul> 
 
\t \t \t <li>Link 1</li> 
 
\t \t \t <li>Link 2</li> 
 
\t \t \t <li>Link 3</li> 
 
\t \t \t <li>Link 4</li> 
 
\t \t </ul> 
 
\t </nav> 
 
\t <content>blah blah blah</content> 
 
</div>

+0

это работает. не знал, что вы можете делать вычисления в css. благодаря – Simon

0

Во-первых, статические padding вызывают проблему. Когда ваш браузер становится меньше, вы устанавливаете на контенте 100px, поэтому он делает ваш контент под навигационным меню.

У меня есть две идеи:

  1. Вы можете установить надлежащий padding и задать min-width к вашему телу.
  2. Попробуйте медиа-запрос, чтобы изменить свой стиль в соответствии с шириной.
0

Я думаю, что вам нужно для вашего контента, чтобы появиться на правой части экрана. Если это так, вам нужно добавить position:absolute; в ваш content блок в вашем css.

Заменить CSS с этим:

body { 
    background-color: orange; 
} 

header { 
    display: block; 
    text-align: right; 
    width: 100%; 
    height: 50px; 
} 

.mainWrapper { 
    width: 100%; 
} 

nav { 
    border: 1px solid black; 
    float: left; 
    padding-top: 20px; 
    width: 20%; 
} 

nav ul li { 
    width: 100%; 
    text-align: center; 
    margin-bottom: 10px; 
    list-style-type: none; 
    height: 75px; 
    border: 1px solid black; 
} 

content { 
    float: right; 
    width: 65%; 
    padding: 100px; 
    background-color: white; 
    border-radius: 10px; 
    border: 1px solid black; 
    position: absolute; 
}