Я довольно давно работаю веб-разработчиком, но я никогда этим не занималась, и в моем прогрессе использовались очень сложные методы. Ниже приведен макет, который мне нужен, хотя в этом макете есть правила , как я сейчас объясню.
----------------------------------------------------
| HEADER |
----------------------------------------------------
________ _______________________________________
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
|________| | |
| |
| |
| |
| |
| |
|_______________________________________|
Боковая панель и заголовок статические , как и тело, однако вы можете прокрутить тело. Использование переполнения свойства CSS: прокрутка контейнера для раздела body недоступна. Причина заключается в том, что это приложение ASP.NET, которое использует keeppositiononscrollback, а это означает, что полоса прокрутки browser , а не полоса прокрутки содержимого, - это то, что используется для записи позиций x и y. Я добился этого, но использовал несколько сложных техник компоновки, которые просто не очень красивы.
Итак, мой HTML выглядит следующим образом:
<div id="header">
<ul>
<li><a href="/">Home</a></li>
<li><a href="#">Telephone</a></li>
<li><a href="#">My Department</a></li>
<li><a href="#">My Profile</a></li>
</ul>
</div>
<div id="sidebar-container">
<div id="sidebar">
<!-- sidebar code using ul's and li's -->
</div>
</div>
<div id="content-top-border"></div>
<div id="content-left-border"></div>
<div id="content-wrap">
<div id="content">
<asp:ContentPlaceHolder ID="MainContent" runat="server" />
</div>
</div>
<div id="content-right-border"></div>
<div id="content-bottom-border"></div>
<div id="bottom-block"></div>
Так что я использую все эти div по определенной причине, чтобы я мог абсолютно точно позиционировать границы в области содержимого. Остальные элементы div на самом деле блокируют контент, изменяя их цвет фона, чтобы вы не могли видеть контент при прокрутке.
Мой CSS-файл слишком велик, чтобы публиковать здесь, но вот общая идея:
div#header {
height:30px;
background-color:#d7d7d7;
position:fixed;
top:0;
left:0;
right:0;
}
div#sidebar {
position:fixed;
top:30px;
left:0;
overflow:auto;
bottom:4px;
width:148px;
background-color:#d7d7d7;
}
div#sidebar ul {
border:1px solid #9a9a9a;
border-bottom:0;
font-family:Tahoma;
margin:0 0 0 4px;
padding:0;
list-style-type:none;
font-size:0.75em;
width:137px;
clear:both;
background-color:white;
}
Итак, как вы можете видеть из боковой панели, я установил фиксированную ширину, сделал ее position:fixed
, а затем установил фон. Содержащая <ul>
имеет фиксированную ширину, таким образом вызывая блок. При горизонтальной прокрутке страницы содержимое будет скрыто, когда оно попадет на боковую панель. Это создает эффект, очень похожий на любое клиентское приложение.
#content-wrap {
position: absolute;
top: 30px;
bottom: 15px;
left: 147px;
right:0;
background-color:#d7d7d7;
z-index:-998;
}
#content {
z-index:-995;
position:absolute;
top:0;
bottom:0;
right:0;
left:0;
padding:10px 10px 20px 10px;
background-color:#FFF;
color:#292929;
}
Таким образом, вы можете видеть, что #content имеет абсолютное позиционирование, сохраняя его в этом окне содержимого. Все, что находится за пределами поля содержимого, не отображается никогда , даже если вы прокручиваете по горизонтали или по вертикали.
Есть ли лучшие способы сделать это? Кажется, что HTML / CSS чертовски много делает для чего-то очень простого.
РЕДАКТИРОВАТЬ : Этот макет не проблема вообще. Эта часть даже не сложная. Трудно поддерживать простой HTML / CSS со сложным макетом, и под сложным я не имею в виду то, чего не могу достичь. Я уже достиг желаемого эффекта, я просто ищу лучший способ сделать это.
РЕДАКТИРОВАТЬ : Это основано на бизнес-требованиях, у меня нет выбора:)