ChatGPT解决这个技术问题 Extra ChatGPT

如何将我的 div 放在其容器的底部?

给定以下 HTML:

我希望 #copyright 贴在 #container 的底部。我可以在不使用绝对定位的情况下实现这一点吗?

这种情况是布局表还没有消失的原因之一。用一张桌子做这件事非常简单,而且在任何地方都可以使用。在 CSS 中执行此操作非常困难,并且跨浏览器支持也是如此。更不用说不可能记住如何正确地做这件事了。
我不明白这个问题。为什么你需要使用绝对定位?容器是否有固定高度,不管它包含什么内容?

i
isherwood

可能不会。

position:relative 分配给 #container,然后将 position:absolute; bottom:0; 分配给 #copyright

#container { 位置:相对; } #copyright { 位置:绝对;底部:0; }


如果容器上的 position:relative 破坏了您的设计,请记住,您可以在容器内包含一个 100% 高度的包装 div,然后添加 position:relative 代替。
如果它是用于重复元素,否则它们会被放置在彼此之上?
那甚至不接近。它位于最近浏览器可见屏幕的底部,但我不知道有一个位置会位于容器 div 的底部。
一个绝对定位的元素会寻找它最近的绝对或相对位置的父元素,以确定它的位置。如果一切都失败了,它会求助于正文(窗口)。因此,父母需要是相对的。
为#container 添加一个margin-bottom 以防止页面内容的版权
C
Community

实际上,@User 接受的答案仅在窗口高且内容短的情况下才有效。但是如果内容高而窗口短,它会将版权信息放在页面内容上,然后向下滚动查看内容会给你留下一个浮动的版权声明。这使得该解决方案对于大多数页面(实际上就像这个页面)都无用。

最常见的方法是演示的“CSS 粘性页脚”方法,或者稍微更苗条的变体。这种方法效果很好——如果你有一个固定高度的页脚。

如果你需要一个可变高度的页脚,如果内容太短,它会出现在窗口底部,如果窗口太短,它会出现在内容的底部,你会怎么做?

吞下你的骄傲,使用一张桌子。

例如:

{填充:0;边距:0; } html, 身体 { 高度: 100%; } #container { 高度:100%;边框折叠:折叠; }

Lorem ipsum等

试试看。这适用于任何窗口大小、任何数量的内容、任何大小的页脚、每个浏览器……甚至 IE6。

如果您对使用表格进行布局感到畏缩,请花点时间问问自己为什么。 CSS 应该让我们的生活更轻松——总的来说,它确实如此——但事实是,即使经过这么多年,它仍然是一个破碎的、违反直觉的混乱。它不能解决所有问题。它不完整。

表格并不酷,但至少就目前而言,它们有时是解决设计问题的最佳方式。


对我来说似乎是最好的答案。此外,您始终可以使用“css 表格”(显示:table[-row/-cell])而不是 html 表格。这提供了没有语义的相同布局。
如果您有一个 PHP 脚本/其他脚本来生成您的页面,您可以复制您的页脚,使用一个作为隐藏的“间隔”和一个绝对定位。间隔页脚确保无论您的页脚中有多少内容,它都不会出现在页面上。
对于阅读这些评论的其他人:这与“骄傲”或“酷”无关。使用表格进行布局实际上更加痛苦,尤其是对于大量内容。确保你不会错过任何一个 td 并在添加内容时筛选这么多不相关的标记是地狱。这很痛苦,因为我们不仅要创建布局,还要创建 HTML 文档,如果我们文档的大部分内容不是表格数据,那我们为什么要把它放在表格中呢?如果我们不喜欢按原样使用网络技术,那么为什么要使用它们呢?改为使用桌面/移动应用程序发布内容
骄傲无关紧要。由于可访问性原因,表格不应用于布局。如果您曾经使用过屏幕阅读器,您就会知道为什么表格应该只用于表格数据。使用 css 表作为@chiccodoro 状态。
使用表格进行布局并不是 Web 最佳实践。 HTML 用于语义定义,而不是用于样式。表格用于表格数据。布局和样式最好留给 CSS。
T
TylerH

弹性盒方法!

supported browsers 中,您可以使用以下内容:

Example Here

.parent {
  display: flex;
  flex-direction: column;
}
.child {
  margin-top: auto;
}

.parent { 高度:100px;边框:5px 实心#000;显示:弯曲;弹性方向:列; } .child { 高度:40px;宽度:100%;背景:#f00;边距顶部:自动; }

底部对齐

上面的解决方案可能更灵活,但是,这里有一个替代解决方案:

Example Here

.parent {
  display: flex;
}
.child {
  align-self: flex-end;
}

.parent { 高度:100px;边框:5px 实心#000;显示:弯曲; } .child { 高度:40px;宽度:100%;背景:#f00;对齐自我:flex-end; }

底部对齐

作为旁注,您可能需要添加供应商前缀以获得额外支持。


父母的column-reverse怎么样,所以您根本不需要向孩子添加任何东西?
有没有办法覆盖子容器?如果您想显示一个在搜索过程中不应更改页面布局的搜索结果框。
H
Hashbrown

是的您可以在不使用 absolute 定位和不使用 table 的情况下执行此操作(与标记等有关)。

DEMO
经测试可在 IE>7、chrome、FF 和添加到现有布局中是一件非常容易的事情。

<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 的回答中指出的问题!


好的!请注意,IIRC 您需要设置 <!DOCTYPE> 才能使其在 IE 上运行(至少 <= 8);那些旧版本仅在“标准”模式下支持 display:table-XXX。但是标准模式也会破坏很多为 IE6 设计的页面。
您也可以使用 flexbox - stackoverflow.com/questions/526035/…
我发现 .foot{display: table-footer-group} 更幸运。我不需要 vertical-alignheightborder-collapse
如果 #container 仅包含 #foot 而没有其他内容,这会起作用吗?
看来至少需要一个non-breaking space,@Solace
T
TylerH

纯CSS,无绝对定位,无固定高度,跨浏览器(IE9+)

看看Working Fiddle

因为正常流程是“从上到下”,我们不能简单地要求 #copyright div 坚持到他的父母的底部,而没有某种绝对定位,但是如果我们希望 #copyright div 坚持到顶他的父母,这会很简单——因为这是正常的流程方式。

因此,我们将利用这一点作为我们的优势。我们将更改 HTML 中 div 的顺序,现在 #copyright div 位于顶部,内容紧随其后。我们还让内容 div 一直拉伸(使用伪元素和清除技术)

现在只需在视图中反转该顺序即可。这可以通过 CSS 转换轻松完成。

我们将容器旋转 180 度,现在:向上是向下。 (然后我们将内容反转为看起来正常)

如果我们想在内容区域中有一个滚动条,我们需要应用更多的 CSS 魔法。如Here所示[在该示例中,内容位于标题下方-但其想法相同]

{边距:0;填充:0; } html, body, #Container { 高度: 100%;白颜色; } #Container:before { 内容:'';高度:100%;向左飘浮; } #版权所有 { 背景颜色:绿色; } #Stretch { 背景颜色:蓝色; } #Stretch:after { content: '';显示:块;明确:两者; } #Container, #Container>div { -moz-transform: rotateX(180deg); -ms-变换:旋转X(180度); -o-变换:旋转(180度); -webkit-transform: rotateX(180deg);变换:旋转X(180度); }

Element 1
div>
元素 2


请不要,看看现在的渲染有多糟糕i.stack.imgur.com/ZP9Hw.png
m
m4n0

CSS 网格

由于 CSS Grid 的使用越来越多,我想向网格容器内的元素建议 align-self

align-self 可以包含以下任何值:endself-endflex-end,用于以下示例。

#parent { 显示:网格; } #child1 { 对齐自我:结束; } /* 片段的额外样式 */ #parent { height: 150px;背景:#5548B0;颜色:#fff;填充:10px;字体系列:无衬线; } #child1 { 高度:50px;宽度:50px;背景:#6A67CE;文本对齐:居中;垂直对齐:中间;行高:50px; }

1


a
atiquratik

为上述 #copyright 的元素创建另一个容器 div。在版权上方添加一个新的 div<div style="clear:both;"></div> 它将强制 页脚 位于其他所有内容之下,就像使用相对定位 (bottom:0px;) 的情况一样。


T
TylerH

尝试这个;

<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>


@Feelsbadman 请不要在这样的答案中更改其他人的代码。如果您打算将 CSS 从 HTML 中分离出来,请注意您无意中将代码更改为其他内容,这可能会使答案无效并且肯定会改变发布者的意图。
S
Skippy le Grand Gourou

尽管此处提供的答案似乎都不适用于我的特定情况或在我的特定情况下有效,但我遇到了提供此简洁解决方案的 this article :

#container {
  display: table;
}

#copyright {
  display: table-footer-group;
}

我发现它对于将响应式设计应用于移动显示非常有用,而无需重新排序网站的所有 html 代码,将 body 本身设置为表格。

请注意,只有第一个 table-footer-grouptable-header-group 会这样呈现 :如果有多个,其他将呈现为 table-row-group


a
atiquratik

如果您使用 inline-block 元素的 文本对齐 功能知道 #containerheight,那么您确实可以在不使用 position:absolute 的情况下将框alignbottom

Here 您可以看到它的实际效果。

这是代码:

#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;
}

S
Samuell

使用 translateY 和 top 属性

只需将元素子元素设置为位置:相对,然后将其移动到顶部:100%(这是父元素的 100% 高度)并通过变换坚持到父元素的底部:translateY(-100%)(即 -100% 的高度孩子)。

好处

您不会从页面流中获取元素

它是动态的

但仍然只是解决方法:(

.copyright{
   position: relative;
   top: 100%;
   transform: translateY(-100%);
}

不要忘记旧浏览器的前缀。


T
TylerH

CodePen link here

html,正文 { 宽度:100%;高度:100%; } .overlay { 最小高度:100%;位置:相对; } .container { 宽度:900px;位置:相对;底部填充:50px; } .height { 宽度:900px;高度:50px; } .footer { 宽度:900px;高度:50px;位置:绝对;底部:0; }

内容


J
Jack Sleight

如果你想让它“粘”在底部,不管容器的高度如何,那么绝对定位就是要走的路。当然,如果版权元素是容器中的最后一个元素,它总是在底部。

你能扩展你的问题吗?准确解释你想要做什么(以及为什么你不想使用绝对定位)?


T
TylerH

如果您不知道子块的高度:

#parent { 背景:绿色;宽度:200px;高度:200px;显示:表格单元格;垂直对齐:底部; } .child { 背景:红色;垂直对齐:底部; }

child

http://jsbin.com/ULUXIFon/3/edit

如果您知道子块的高度,请添加子块,然后添加 padding-top/margin-top:

#parent { 背景:绿色;宽度:200px;高度:130px;填充顶部:70px; } .child { 背景:红色;垂直对齐:底部;高度:130px; }

child


a
atiquratik

此外,如果有使用 position:absolute;position:relative; 的规定,您可以随时尝试 padding parent div 或放置 margin-top:x;。在大多数情况下不是一个很好的方法,但在某些情况下它可能会派上用场。


m
m4n0

#container{宽度:100%;向左飘浮;位置:相对;} #版权{位置:绝对;底部:0px;左:0px;背景:#F00;宽度:100%;} #container{背景:灰色; height:100px;}


n
nilesh pawar

不想在底部使用“位置:绝对”作为粘性页脚。然后你可以这样做:

html, 身体 { 高度:100%;边距:0; } .wrapper { 最小高度:100%; /* 等于页脚的高度 */ /* 但也考虑了最后一个孩子的潜在 margin-bottom */ margin-bottom: -50px; } .footer{ 背景:#000;文本对齐:居中;颜色:#fff; } .footer, .push { 高度:50px; }

content
< /div>
测试


嗨,尼莱什;该解决方案已在多个答案中提供。请务必在提供新问题之前阅读问题的所有现有答案,以确保内容没有重复!
Z
Zyox

这是一种方法,旨在使具有已知高度和宽度(至少近似)的元素浮动到右侧并停留在底部,同时作为其他元素的内联元素。它集中在右下角,因为您可以通过其他方法轻松地将其放置在任何其他角落。

我需要制作一个导航栏,它在右下角有实际的链接和随机的兄弟元素,同时确保栏本身可以正确拉伸,而不会破坏布局。我使用了一个“阴影”元素来占据导航栏链接的空间,并将其添加到容器子节点的末尾。

<!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>

D
DesignConsult

也许这对某人有帮助:您始终可以将 div 放在另一个 div 之外,然后使用负边距将其向上推:

<div id="container" style="background-color: #ccc; padding-bottom: 30px;">
  Hello!
</div>
<div id="copyright" style="margin-top: -20px;">
  Copyright Foo web designs
</div>

j
j.xavier.atero

此特定场景的解决方案:

将 inner 放在 parent 的底部。父级的高度由其“最高”兄弟级的高度设置

设置:

我有一排有多个

这些

在另一个
中彼此相邻

每个

有 3 个相互重叠的内部 div: