Ответ 1
Вы ищете печально известную технику "faux-columns". Здесь учебник.
В принципе, вы не можете сделать это с помощью простого цвета фона, вам нужно использовать повторяющееся фоновое изображение.
Я нашел много дискуссий и вопросов, связанных с этим вопросом в Интернете, однако ни один из них, похоже, не соответствует моему делу, и решения очень специфичны для определенной ситуации.
У меня есть элемент header
с высотой 100px
в верхней части страницы. У меня есть элемент div#sidebar
, положенный слева с шириной 250px
, и, наконец, элемент div#main
также оставил слева.
Высота html
, body
и div#sidebar
равна 100%
.
Моя цель состоит в том, чтобы получить div#sidebar
до конца вплоть до нижней части страницы независимо от размера браузера или размера содержимого. Очевидно, что если контент длиннее высоты видимой страницы, он должен действовать нормально и проталкиваться за конец страницы, вводя полосы прокрутки.
Однако, поскольку он стоит сейчас, кажется, что высота страницы была рассчитана как 100% + 100px
, вводя полосы прокрутки, даже если нет контента, который бы нажал div#sidebar
вниз. До сих пор я не нашел решений, которые работают, или, возможно, я пропустил это или испортил решение; независимо от того, я был у него уже более часа, и я собираюсь вырвать мои волосы.
Есть ли метод, не поддерживающий JavaScript, чтобы он работал правильно, чтобы остановить добавление высоты header
к 100%
?
Вот мой HTML/CSS - хотя я включил все соответствующие подробности выше, это должно помочь.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>My Awesome Template!</title>
<link href="./stylesheet.css" rel="stylesheet" />
</head>
<body>
<header id="primary">
<h1>My Awesome Template!</h1>
</header>
<div id="sidebar">
<h1>Sidebar</h1>
</div>
<div id="main">
<h1>Main</h1>
</div>
</body>
</html>
CSS
html, body
{
margin: 0;
padding: 0;
height: 100%;
}
body
{
background: #fff;
font: 14px/1.333 sans-serif;
color: #080000;
}
header#primary
{
width: 100%;
height: 100px;
background: #313131;
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#4d4d4d), to(#313131));
background-image: -moz-linear-gradient(#4d4d4d, #313131);
background-image: -o-linear-gradient(#4d4d4d, #313131);
background-image: linear-gradient(#4d4d4d, #313131);
}
header#primary h1
{
margin: 0px 0px 0px 20px;
padding: 0px;
line-height: 100px;
color: #ffffff;
}
#sidebar
{
float: left;
width: 250px;
background: #ccc;
min-height: 100%;
}
#main
{
float: left;
}
Вы ищете печально известную технику "faux-columns". Здесь учебник.
В принципе, вы не можете сделать это с помощью простого цвета фона, вам нужно использовать повторяющееся фоновое изображение.
Я обнаружил, что метод, описанный в этой статье, был очень простым методом решения проблемы.
Вам нужно окружить свои #sidebar и #main divs другим div, поэтому ваш html-код будет выглядеть следующим образом:
...
<div id="content">
<div id="sidebar">
<h1>Sidebar</h1>
</div>
<div id="main">
<h1>Main</h1>
</div>
</div>
...
а затем следующий css сделает что-то близкое к тому, что вы хотите:
#content {
position: relative;
width: 100%;
}
#sidebar {
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 240px;
}
#main {
position: relative;
margin-left: 250px;
}
(с небольшим количеством настроек, например, я обнаружил, что край h1 в #main, казалось, игнорируется... но поле h1 на #sidebar не было!).
Если вам не нужен более низкий IE, используйте display: table
для родителя и display: table-cell
для элементов. Это должно исправить их высоты вместе. Что касается пробела, используйте margin-top: -100 px; padding-top: 100px;
Не уверен, что вы пробовали это, или если это сработает для вас (я новичок в кодировании), но попробуйте поместить боковую панель влево, поместить содержимое вправо, как выравнивание по тексту влево, так и использовать проценты для ширины.
#sidebar
{
float: left;
width: 25%;
background: #ccc;
min-height: 100%;
text-align: left;
}
#main
{
float: right;
text-align: left;
width: 70%;
}
Если у вас есть другие настройки, вам придется подойти к ним по-другому, но это может сработать.
$(".sidebar").height(Math.max($(".content").height(),$(".sidebar").height()));
Вы можете сделать это с помощью этого кода jquery. Вызов основной высоты содержимого.
jQuery элегантно справляется с этим с легкостью, поэтому я не уверен, почему вы не захотите использовать js. Большинство разработчиков, которые кодировали более чем пару сайтов, потратили значительное время на поиск магического ответа, как и у меня, и ничего не сравнивает с использованием js.