How can I position my div at the bottom of its container?
给出以下HTML:
1 2 3 | <!-- Other elements here --> Copyright Foo web designs |
我想让
我能在不使用绝对定位的情况下实现这一点吗?如果float属性支持"bottom"的值,这似乎可以解决问题,但不幸的是,它没有。
可能不会。
将
1 2 3 4 5 6 7 | #container { position: relative; } #copyright { position: absolute; bottom: 0; } |
1 2 3 | <!-- Other elements here --> Copyright Foo web designs |
实际上,@user接受的答案只有在窗口高且内容短的情况下才有效。但是,如果内容很高,窗口很短,它会将版权信息放在页面内容上,然后向下滚动查看内容,会留下一个浮动的版权通知。这使得这个解决方案对大多数页面(实际上像这个页面)都是无用的。
最常见的方法是演示的"css Sticky Footer"方法,或者稍微精简一些。这种方法非常有效——如果您有固定高度的页脚。
如果您需要一个可变高度的页脚,如果内容太短,它将出现在窗口底部;如果窗口太短,它将出现在内容底部,您会怎么做?
放下你的骄傲,用一张桌子。
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 | * { padding: 0; margin: 0; } html, body { height: 100%; } #container { height: 100%; border-collapse: collapse; } |
4
试试看。这将适用于任何窗口大小、任何内容量、任何大小的页脚、每个浏览器…甚至IE6。
如果你一想到要用一张桌子来排版就畏缩不前,花点时间问问自己为什么。CSS本来是为了让我们的生活更容易——总体上来说,它已经——但事实是,即使经过这么多年,它仍然是一个破碎的,反直觉的混乱。它不能解决所有的问题。它是不完整的。
表并不酷,但至少现在,它们有时是解决设计问题的最佳方法。
flexbox方法!
在支持的浏览器中,您可以使用以下内容:
这里例子
1 2 3 4 5 6 7 | .parent { display: flex; flex-direction: column; } .child { margin-top: auto; } |
1 2 3 4 5 6 7 8 9 10 11 12 | .parent { height: 100px; border: 5px solid #000; display: flex; flex-direction: column; } .child { height: 40px; width: 100%; background: #f00; margin-top: auto; } |
1 | Align to the bottom |
上面的解决方案可能更灵活,但是,这里有一个替代方案:
这里例子
1 2 3 4 5 6 | .parent { display: flex; } .child { align-self: flex-end; } |
1 2 3 4 5 6 7 8 9 10 11 | .parent { height: 100px; border: 5px solid #000; display: flex; } .child { height: 40px; width: 100%; background: #f00; align-self: flex-end; } |
1 | Align to the bottom |
作为补充说明,您可能希望添加供应商前缀以获得更多支持。
是的,您可以在不使用
演示文稿
这是测试工作在IE>7,铬,FF&;是一个非常容易添加到您的现有布局。
1 2 3 4 5 6 | Some content you don't want affected by the"bottom floating" div supports not just text Some other content you want kept to the bottom this is in a div |
1 2 3 4 5 6 7 8 9 10 11 | #container { height:100%; border-collapse:collapse; display : table; } .foot { display : table-row; vertical-align : bottom; height : 1px; } |
它有效地实现了
这是一个古老的问题,但这是一种独特的方法,在某些情况下可以有所帮助。
纯CSS,无绝对定位,无固定高度,跨浏览器(IE9+)看看那个工作的小提琴
因为正态流是"自上而下"的,我们不能简单地要求
所以我们会利用这个优势。我们将更改HTML中
现在,这只是在视图中颠倒顺序的问题。这可以用CSS转换轻松完成。
我们将容器旋转180度,现在:向上是向下的。(我们将内容倒过来,使其看起来再次正常)
如果我们想要在内容区域内有一个Scroolbar,我们需要应用更多的CSS魔力。如这里所示[在该示例中,内容位于标题下方-但其想法相同]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | * { 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); } |
4
试试这个;
1 2 3 4 5 | <!-- Other elements here --> Copyright Foo web designs |
为
虽然这里提供的所有答案似乎都不适用于我的特定案例,但我看到了这篇文章,它提供了一个简洁的解决方案:
1 2 3 4 5 6 7 | #container { display: table; } #copyright { display: table-footer-group; } |
我发现它非常有助于在移动显示器上应用响应式设计,而无需重新排序网站的所有HTML代码,将
请注意,只有第一个
如果您知道
在这里你可以看到它的作用。
这是代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #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; } |
这里是代码笔链接。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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; } |
1 2 3 4 5 6 | content footer |
使用translatey和top属性
只需将element child设置为position:relative,然后将其向上移动:100%(即父元素的100%高度),然后通过transform:translatey(即子元素高度的-100%)将其固定在父元素的底部。
效益
- 不从页面流中提取元素
- 它是动态的
但仍需解决:(
1 2 3 4 5 | .copyright{ position: relative; top: 100%; transform: translateY(-100%); } |
不要忘记旧浏览器的前缀。
如果你想让它"粘"到底,不管容器的高度如何,那么绝对定位就是你要走的路。当然,如果copyright元素是容器中的最后一个元素,那么它始终位于底部。
你能详细讨论一下你的问题吗?准确地解释你想做什么(以及为什么你不想使用绝对定位)?
另外,如果有关于使用
如果您不知道子块的高度:
1 2 3 4 5 6 7 8 9 | #parent{background:green;width:200px;height:200px;display:table-cell;vertical-align:bottom;} .child{background:red;vertical-align:bottom;} </style> </head> <body> child |
http://jsbin.com/uluxifon/3/edit/编辑
如果知道子块的高度,请添加子块,然后添加填充顶部/边距顶部:
1 2 3 4 5 | #parent{background:green;width:200px;height:130px;padding-top:70px;} .child{background:red;vertical-align:bottom;height:130px;} child |
也许这对某些人有帮助:您可以将DIV放在另一个DIV之外,然后使用负边距将其向上推:
1 2 3 4 | Hello! Copyright Foo web designs |
对于容器中只有一个子级的对象,可以使用
注意,使用
1 2 3 4 5 6 7 8 9 | #container { display: table; width: 100%; height: 200px; } #item { display: table-cell; vertical-align: bottom; } |
1 | Single bottom item |
仅仅因为这一点没有被提及,在像你这样的情况下通常会很好地工作:
将copyright div放在container div之后
您只需要以与另一个容器类似的方式(相同的总宽度、居中等)格式化版权DIV,一切都很好。
CSS:
1 2 3 4 | #container, #copyright { width: 1000px; margin:0 auto; } |
HTML:
1 2 3 4 5 | <!-- Other elements here --> Copyright Foo web designs |
唯一可能不理想的时间是,当您的container div使用
- 无绝对定位
- 无表格布局
- 没有疯狂的CSS,在其他浏览器中看起来都不一样(至少,你知道)
- 简单明了的格式
旁白:我知道手术室要求的解决方案是"…贴在"容器"分区的底部……,而不是它下面的东西,但拜托,人们正在寻找好的解决方案,这就是一个!
CSS中没有所谓的
1 2 | position:absolute; bottom:0; |
1 2 3 | #container{width:100%; float:left; position:relative;} #copyright{position:absolute; bottom:0px; left:0px; background:#F00; width:100%;} #container{background:gray; height:100px;} |
1 2 3 | <!-- Other elements here --> Copyright Foo web designs |
1 2 3 | <!-- Other elements here --> Copyright Foo web designs |
这里有一种方法,目标是使具有已知高度和宽度(至少大约)的元素向右浮动并保持在底部,同时作为其他元素的内联元素。它集中在右下角,因为您可以通过其他方法轻松地将其放置在任何其他角落。
我需要制作一个导航栏,它的右下角将有实际的链接,以及随机的兄弟元素,同时确保导航栏本身能够正确拉伸,而不会破坏布局。我使用了一个"shadow"元素来占据导航栏的链接空间,并将其添加到容器子节点的末尾。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <!DOCTYPE html> <!-- Other elements here --> Copyright Foo web designs <span id="copyright-s">filler</span> <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> |
样式分区,
1 2 3 4 5 | window.onscroll = function() { var v = document.getElementById("copyright"); v.style.position ="fixed"; v.style.bottom ="5px"; } |