与此Demo Template开始,我想创建这样的布局:固定的页眉,页脚和侧边栏与滚动内容区域中心
但我有以下问题:
- 这两个侧边栏不包含在可滚动内容div内。
- 内容DIV并不需要一个固定大小
- 滚动内容溢出时将其
- 如果浏览器的主要滚动条用于
有人可以帮我最好不出现滚动条解决这些问题?
与此Demo Template开始,我想创建这样的布局:固定的页眉,页脚和侧边栏与滚动内容区域中心
但我有以下问题:
有人可以帮我最好不出现滚动条解决这些问题?
display:grid
这使用可能会或可能不会在您选择的浏览器支持CSS的几个新功能。这些包括Grid Layout,CSS Variables和position:sticky
。 CSS变量可以用静态值解决,Grid/position:sticky
可以使用@supports
优雅地降级。
/* Remove unnecessary margins/padding */
html, body { margin: 0; padding: 0 }
.wrapper {
display: grid;
/* Header and footer span the entire width, sidebars and content are fixed, with empty space on sides */
grid-template-areas:
"header header header header header"
"empty_left sidebar_1 content sidebar_2 empty_right"
"footer footer footer footer footer";
/* Only expand middle section vertically (content and sidebars) */
grid-template-rows: 0fr 1fr 0fr;
/* 100% width, but static widths for content and sidebars */
grid-template-columns: 1fr 100px 400px 100px 1fr;
/* Force grid to be at least the height of the screen */
min-height: 100vh;
}
.header {
grid-area: header;
/* Stick header to top of grid */
position: sticky;
top: 0;
/* Ensure header appears on top of content/sidebars */
z-index: 1;
/* General appearance */
background-color: #FCFF34;
text-align: center;
font-size: 1rem;
line-height: 1.5;
padding: 1rem;
}
/* Save header height to properly set `padding-top` and `margin-top` for sticky content */
:root {
--header-height: calc(1rem * 1.5 + 1rem * 2);
}
.sidebar-1 {
grid-area: sidebar_1;
}
.sidebar-2 {
grid-area: sidebar_2;
}
.sidebar-1,
.sidebar-2 {
display: flex;
flex-direction: column;
position: sticky;
top: 0;
/* Styling to match reference */
background-color: #BC514F;
}
.content {
grid-area: content;
/* General appearance */
background-color: #99BB5E;
}
.footer {
grid-area: footer;
/* Stick footer to bottom of grid */
position: sticky;
bottom: 0;
/* General appearance */
background-color: #FCFF34;
text-align: center;
font-size: .8rem;
line-height: 1.5;
padding: .5rem;
}
/* Save footer height to properly set `bottom` and `min-height` for sticky content */
:root {
--footer-height: calc(.8rem * 1.5 + .5rem * 2);
}
.sticky-spacer {
flex-grow: 1;
}
.sticky-content {
position: sticky;
bottom: var(--footer-height);
min-height: calc(100vh - var(--footer-height));
box-sizing: border-box;
--padding: 10px;
padding:
calc(var(--header-height) + var(--padding))
var(--padding)
var(--padding);
margin-top: calc(0px - var(--header-height));
}
<div class="wrapper">
<div class="header">Header (Absolute)</div>
<div class="sidebar-1">
<div class="sticky-spacer"></div>
<div class="sticky-content">Sidebar 1 Absolute position, Fixed width</div>
</div>
<div class="content">
<div class="sticky-spacer"></div>
<div class="sticky-content">
Scrollable content<br><br>
line 1<br><br>
line 2<br><br>
line 3<br><br>
line 4<br><br>
line 5<br><br>
line 6<br><br>
line 7<br><br>
line 8<br><br>
line 9<br><br>
line 10<br><br>
line 11<br><br>
line 12<br><br>
line 13<br><br>
line 14<br><br>
line 15<br><br>
line 16<br><br>
line 17<br><br>
line 18<br><br>
line 19<br><br>
line 20
</div>
</div>
<div class="sidebar-2">
<div class="sticky-spacer"></div>
<div class="sticky-content">
Sidebar 2 Absolute position, Fixed width<br><br>
line 1<br><br>
line 2<br><br>
line 3<br><br>
line 4<br><br>
line 5<br><br>
line 6<br><br>
line 7<br><br>
line 8<br><br>
line 9<br><br>
line 10
</div>
</div>
<div class="footer">Footer (Absolute)</div>
</div>
内容框(包括边栏)可以被设置为任何类型的宽度(百分比,像素等)的。只有可滚动的内容区域会滚动(侧边栏/页脚/标题只会溢出框)。我建议添加一些媒体查询以突破侧边栏,以便内容不会隐藏在较小的设备上,或者在内容框中设置min-height
,在body
上设置min-width
。
html, body {
height:100%;
margin:0;
padding:0;
}
header{
width: 100%;
background: yellow;
position: fixed;
top: 0;
height: 60px !important;
opacity:.8;
}
.content {
position:relative;
height: 100%;
width:600px; /* Sizing - any length */
padding:60px 0 30px 0; /* Header height and footer height */
margin:0 auto 0 auto; /* Center content */
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
-o-box-sizing:border-box;
-ms-box-sizing:border-box;
box-sizing:border-box;
}
.sidebar1, .sidebar2 {
background: red;
top:60px;
bottom:30px;
width: 100px;
position:absolute;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
-o-box-sizing:border-box;
-ms-box-sizing:border-box;
box-sizing:border-box;
}
.sidebar1 {
left:0;
}
.sidebar2 {
right: 0;
}
#scrollable2 {
background:green;
height: 100%;
min-width: 300px;
margin-left: 100px;
margin-right: 100px;
overflow:auto;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
-o-box-sizing:border-box;
-ms-box-sizing:border-box;
box-sizing:border-box;
}
footer {
width: 100%;
background: yellow;
position: fixed;
bottom: 0;
height: 30px;
}
<!-- Always on top: Position Fixed-->
<header>
header
</header>
<!-- Fixed size after header-->
<div class="content">
<!-- Always on top. Fixed position, fixed width, relative to content width-->
<div class="sidebar1">
sidebar-left
</div>
<!-- Scrollable div with main content -->
<div id="scrollable2">
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
</div>
<!-- Always on top. Fixed position, fixed width, relative to content width -->
<div class="sidebar2">
sidebar-right
</div>
</div>
<!-- Always at the end of the page -->
<footer>
footer
</footer>
在使用浏览器的主要滚动条是可能的,这也导致了侧边栏与页面滚动。
html, body {
height:100%;
margin:0;
padding:0;
}
header{
width: 100%;
background: yellow;
position: fixed;
top: 0;
height: 60px !important;
z-index:100;
}
.content {
position:relative;
min-height: 100%;
width:600px; /* Sizing - any length */
padding:60px 0 30px 0; /* Header height and footer height */
margin:0 auto 0 auto; /* Center content */
}
.sidebar1, .sidebar2 {
background: red;
height:100%;
width: 100px;
top:0;
padding-top:60px;
position:absolute;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
-o-box-sizing:border-box;
-ms-box-sizing:border-box;
box-sizing:border-box;
}
.sidebar1 {
left:0;
}
.sidebar2 {
right: 0;
}
#scrollable2 {
height:100%;
background:green;
min-width: 300px;
margin-left: 100px;
margin-right: 100px;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
-o-box-sizing:border-box;
-ms-box-sizing:border-box;
box-sizing:border-box;
}
footer {
width: 100%;
background: yellow;
position: fixed;
bottom: 0;
height: 30px;
}
<!-- Always on top: Position Fixed-->
<header>
header
</header>
<!-- Fixed size after header-->
<div class="content">
<!-- Always on top. Fixed position, fixed width, relative to content width-->
<div class="sidebar1">
sidebar-left
</div>
<!-- Scrollable div with main content -->
<div id="scrollable2">
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
content-main<br>
</div>
<!-- Always on top. Fixed position, fixed width, relative to content width -->
<div class="sidebar2">
sidebar-right
</div>
</div>
<!-- Always at the end of the page -->
<footer>
footer
</footer>
编辑
1.增加position
财产absolute
您要修复的股利。
2.保持身体overflow
财产auto
。
注意:将body的z-index设置为-1会使body的其余部分不可访问。
参考:http://limpid.nl/lab/css/fixed/
感谢您发布您的答案!请注意,你应该在这里发布一个答案的有用点,在这个网站上,或者你的帖子风险被删除[参见常见问题解答,它提到的答案几乎不超过链接](http://stackoverflow.com/FAQ#删除)。如果您愿意,您可能仍然包含链接,但仅作为“参考”。答案应该独立,不需要链接。 – 2013-03-05 10:13:15
谢谢,我今后会记住。 – Sorter 2013-03-05 10:24:32
非常感谢。一个问题。是否有可能从div外滚动滚动div?我的意思是无论你在页面内滚动,我都希望它滚动滚动div。那可能吗? – glarkou 2012-04-07 18:06:24
是和不是(好吧,不是我有的时间)。使用浏览器的主滚动条可以让侧边栏滚动。这可能对你很好,我不确定。我已将jsFiddle示例添加到我的答案中。 – 0b10011 2012-04-07 18:17:53
再次感谢队友。 – glarkou 2012-04-07 18:29:04