鉴于以下HTML:
<div id="container">
<!-- Other elements here -->
<div id="copyright">
Copyright Foo web designs
</div>
</div>
我想#copyright
坚持到底#container
。
不使用绝对定位就可以实现吗?如果float属性支持'bottom'的值,那似乎可以解决问题,但不幸的是,事实并非如此。
鉴于以下HTML:
<div id="container">
<!-- Other elements here -->
<div id="copyright">
Copyright Foo web designs
</div>
</div>
我想#copyright
坚持到底#container
。
不使用绝对定位就可以实现吗?如果float属性支持'bottom'的值,那似乎可以解决问题,但不幸的是,事实并非如此。
Answers:
可能不会。
分配position:relative
给#container
,然后分配position:absolute; bottom:0;
给#copyright
。
#container {
position: relative;
}
#copyright {
position: absolute;
bottom: 0;
}
<div id="container">
<!-- Other elements here -->
<div id="copyright">
Copyright Foo web designs
</div>
</div>
实际上,@ User接受的答案仅在窗口高且内容短时才起作用。但是,如果内容很高而窗口很短,则会将版权信息放在页面内容上,然后向下滚动以查看内容将给您留下浮动的版权声明。这使得该解决方案对大多数页面(实际上是该页面)无用。
最常见的方法是演示的“ CSS粘性页脚”方法,或者稍微更苗条的变体。如果您的页脚高度固定,则此方法效果很好。
如果您需要一个可变高度的页脚,如果内容太短,它将显示在窗口的底部;如果内容太短,将显示在内容的底部,该怎么办?
吞下自己的骄傲并使用桌子。
例如:
* {
padding: 0;
margin: 0;
}
html, body {
height: 100%;
}
#container {
height: 100%;
border-collapse: collapse;
}
<!DOCTYPE html>
<html>
<body>
<table id="container">
<tr>
<td valign="top">
<div id="main">Lorem ipsum, etc.</div>
</td>
</tr>
<tr>
<td valign="bottom">
<div id="footer">Copyright some evil company...</div>
</td>
</tr>
</table>
</body>
</html>
试试看。在任何浏览器甚至IE6上,它都适用于任何窗口大小,任何内容量,任何页脚。
如果您不愿意使用表格进行布局,请花一秒钟时间问自己为什么。CSS本来可以使我们的生活更轻松-并且总体上来说-但事实是,即使这些年来,它仍然是残破的,违反直觉的混乱。它不能解决所有问题。还不完整
表格不是很酷,但是至少就目前而言,它们有时是解决设计问题的最佳方法。
在受支持的浏览器中,可以使用以下各项:
.parent {
display: flex;
flex-direction: column;
}
.child {
margin-top: auto;
}
上面的解决方案可能更灵活,但是,这是一个替代解决方案:
.parent {
display: flex;
}
.child {
align-self: flex-end;
}
附带说明,您可能需要添加供应商前缀以提供其他支持。
column-reverse
的父母,所以你不需要任何东西都加了孩子?
是的,您可以在不absolute
定位且不使用table
s(带有标记等的螺钉)的情况下执行此操作。
演示
这经测试可在IE> 7,chrome,FF和IE> 7上工作,并且非常容易添加到现有布局中。
<div id="container">
Some content you don't want affected by the "bottom floating" div
<div>supports not just text</div>
<div class="foot">
Some other content you want kept to the bottom
<div>this is in a div</div>
</div>
</div>
#container {
height:100%;
border-collapse:collapse;
display : table;
}
.foot {
display : table-row;
vertical-align : bottom;
height : 1px;
}
它有效地做了什么float:bottom
,甚至解决了@Rick Reilly的答案中指出的问题!
<!DOCTYPE>
设置才能在IE上运行(至少<= 8);那些旧版本仅display:table-XXX
在“标准”模式下支持。但是标准模式也将破坏很多为IE6设计的页面。
.foot{display: table-footer-group}
。我并不需要vertical-align
,height
或者border-collapse
。
#container
仅包含#foot
这些内容而不包含其他内容,是否可以使用?
这是一个古老的问题,但这是一种可以在某些情况下提供帮助的独特方法。
查看工作小提琴
由于正常流程是“自上而下”的,我们不能简单地要求#copyright
div在没有绝对定位的情况下坚持其父辈的底部,但是,如果我们希望#copyright
div坚持其父辈的顶部,那会非常简单-因为这是正常的流程。
因此,我们将利用这一优势。我们将更改div
HTML中s 的顺序,现在#copyright
div在顶部,并且内容立即跟随它。我们还使内容div一直延伸(使用伪元素和清除技术)
现在只需要在视图中反转顺序即可。使用CSS转换可以轻松完成。
我们将容器旋转180度,然后:向上-向下。(然后我们将内容取反以再次看起来正常)
如果我们希望在内容区域内有一个scroolbar,则需要应用更多CSS魔术。作为可呈这里 [在该示例中,内容是标题下方-但其同样的想法]
* {
margin: 0;
padding: 0;
}
html,
body,
#Container {
height: 100%;
color: white;
}
#Container:before {
content: '';
height: 100%;
float: left;
}
#Copyright {
background-color: green;
}
#Stretch {
background-color: blue;
}
#Stretch:after {
content: '';
display: block;
clear: both;
}
#Container,
#Container>div {
-moz-transform: rotateX(180deg);
-ms-transform: rotateX(180deg);
-o-transform: rotate(180deg);
-webkit-transform: rotateX(180deg);
transform: rotateX(180deg);
}
<div id="Container">
<div id="Copyright">
Copyright Foo web designs
</div>
<div id="Stretch">
<!-- Other elements here -->
<div>Element 1</div>
<div>Element 2</div>
</div>
</div>
div
为上述元素创建另一个容器#copyright
。在版权的正上方添加一个新内容div
:
<div style="clear:both;"></div>
它将迫使页脚位于其他所有内容的下方,就像使用相对定位(bottom:0px;
)一样。
尝试这个;
<div id="container">
<div style="height: 100%; border:1px solid #ff0000;">
<!-- Other elements here -->
</div>
</div>
<div id="copyright" style="position:relative;border:1px solid #00ff00;top:-25px">
Copyright Foo web designs
</div>
尽管此处提供的答案似乎都不适用于我的特定情况,但我遇到了提供此整洁解决方案的这篇文章:
#container {
display: table;
}
#copyright {
display: table-footer-group;
}
我发现这对于将响应式设计应用于移动显示非常有用,而无需重新排序网站的所有html代码, body
而是自身为表格。
请注意,只有第一个table-footer-group
或table-header-group
会这样渲染:如果有多个,则其他将被渲染为table-row-group
。
由于CSS Grid的使用在增加,因此我建议align-self
网格容器中的元素。
align-self
可以包含任何值:end
,self-end
,flex-end
对于下面的例子。
#parent {
display: grid;
}
#child1 {
align-self: end;
}
/* Extra Styling for Snippet */
#parent {
height: 150px;
background: #5548B0;
color: #fff;
padding: 10px;
font-family: sans-serif;
}
#child1 {
height: 50px;
width: 50px;
background: #6A67CE;
text-align: center;
vertical-align: middle;
line-height: 50px;
}
<div id="parent">
<!-- Other elements here -->
<div id="child1">
1
</div>
</div>
你可以确实align
的方框bottom
不使用position:absolute
,如果你知道height
的#container
使用文本对齐方式的特点inline-block
元素。
在这里您可以看到它的实际效果。
这是代码:
#container {
/* So the #container most have a fixed height */
height: 300px;
line-height: 300px;
background:Red;
}
#container > * {
/* Restore Line height to Normal */
line-height: 1.2em;
}
#copyright {
display:inline-block;
vertical-align:bottom;
width:100%; /* Let it be a block */
background:green;
}
html, body {
width: 100%;
height: 100%;
}
.overlay {
min-height: 100%;
position: relative;
}
.container {
width: 900px;
position: relative;
padding-bottom: 50px;
}
.height {
width: 900px;
height: 50px;
}
.footer {
width: 900px;
height: 50px;
position: absolute;
bottom: 0;
}
<div class="overlay">
<div class="container">
<div class="height">
content
</div>
</div>
<div class="footer">
footer
</div>
</div>
#container{width:100%; float:left; position:relative;}
#copyright{position:absolute; bottom:0px; left:0px; background:#F00; width:100%;}
#container{background:gray; height:100px;}
<div id="container">
<!-- Other elements here -->
<div id="copyright">
Copyright Foo web designs
</div>
</div>
<div id="container">
<!-- Other elements here -->
<div id="copyright">
Copyright Foo web designs
</div>
</div>
不想在底部使用“ position:absolute”作为粘性页脚。然后,您可以这样做:
html,
body {
height: 100%;
margin: 0;
}
.wrapper {
min-height: 100%;
/* Equal to height of footer */
/* But also accounting for potential margin-bottom of last child */
margin-bottom: -50px;
}
.footer{
background: #000;
text-align: center;
color: #fff;
}
.footer,
.push {
height: 50px;
}
<html>
<body>
<!--HTML Code-->
<div class="wrapper">
<div class="content">content</div>
<div class="push"></div>
</div>
<footer class="footer">test</footer>
</body>
</html>
如果您不知道子块的高度:
#parent {
background:green;
width:200px;
height:200px;
display:table-cell;
vertical-align:bottom;
}
.child {
background:red;
vertical-align:bottom;
}
<div id="parent">
<div class="child">child
</div>
</div>
http://jsbin.com/ULUXIFon/3/edit
如果知道子块的高度,请添加子块,然后添加padding-top / margin-top:
#parent {
background:green;
width:200px;
height:130px;
padding-top:70px;
}
.child {
background:red;
vertical-align:
bottom;
height:130px;
}
<div id="parent">
<div class="child">child
</div>
</div>
只是因为根本没有提到它,所以在像您这样的情况下通常效果很好:
在容器div 之后放置版权div
您只需要以与其他容器类似的方式来格式化copyright-div(相同的整体宽度,居中等),一切都很好。
CSS:
#container, #copyright {
width: 1000px;
margin:0 auto;
}
HTML:
<div id="container">
<!-- Other elements here -->
</div>
<div id="copyright">
Copyright Foo web designs
</div>
唯一可能不是理想的情况是在您的container-div用声明时height:100%
,用户需要向下滚动以查看版权。但是,即使您仍然可以解决问题(例如margin-top:-20px
-当版权元素的高度为20px时)。
旁白:我知道OP要求一种解决方案“ ...坚持'container'div的底部...”,而不是解决方案,但继续吧,人们正在这里寻找良好的解决方案,而这是一个!
margin-top: -{element height}
。
这是一种方法,旨在使高度和宽度已知(至少近似)的元素向右浮动并停留在底部,同时作为其他元素的内联元素。它集中在右下角,因为您可以通过其他方法轻松地将其放置在其他任何角落。
我需要制作一个导航栏,该导航栏的右下角将有实际的链接,并包含随机的同级元素,同时确保导航栏本身可以正确拉伸,而不会破坏布局。我使用了一个“阴影”元素来占据导航栏链接的空间,并将其添加到容器的子节点的末尾。
<!DOCTYPE html>
<div id="container">
<!-- Other elements here -->
<div id="copyright">
Copyright Foo web designs
</div>
<span id="copyright-s">filler</span>
</div>
<style>
#copyright {
display:inline-block;
position:absolute;
bottom:0;
right:0;
}
#copyright-s {
float:right;
visibility:hidden;
width:20em; /* ~ #copyright.style.width */
height:3em; /* ~ #copyright.style.height */
}
</style>
对于那些只有一个孩子的容器,您可以使用table-cell
and vertical-align
方法,该方法可靠地将单个div放置在其父对象的底部。
请注意,将其table-footer-group
用作其他答案将破坏parent的高度计算table
。
#container {
display: table;
width: 100%;
height: 200px;
}
#item {
display: table-cell;
vertical-align: bottom;
}
<div id="container">
<div id="item">Single bottom item</div>
</div>
位置为:绝对的元素;相对于最近定位的祖先定位(而不是相对于视口定位,如固定)。
因此,您需要将父元素放置在相对或绝对位置等位置,并将所需元素放置在绝对位置,然后将底部设置为0。