【问题标题】:Making an image stay at the bottom of the page but not go over content使图像停留在页面底部但不越过内容
【发布时间】:2022-02-08 04:11:52
【问题描述】:

我有一个应该保留在导航抽屉底部的徽标图像。我知道让它位于底部的唯一方法是使用 absolute 和 bottom 属性,但这会导致它与短设备上的列表项重叠(缩小浏览器窗口的高度,直到出现滚动条)。滚动条一出现,徽标就会出现在列表项的顶部。

这是我的带有抽屉和随机假图片的沙箱:https://codesandbox.io/s/drawer-with-image-at-bottom-xpuhp

有没有办法在不使用绝对值的情况下从底部开始?和/或一种方法将其保持在底部,直到窗口高度需要滚动条,然后让它成为可滚动内容行为的一部分?如果这是有道理的。我玩过各种 flex 属性,但我并不真正理解它。如果我删除 absolute ,它会在抽屉中的最后一个列表项下开始,我需要它在底部直到滚动条。

我的 img 的 css:

logo: {
      width: "220px",
      height: "150px",
      marginLeft: "50px",
      marginRight: "50px",
      bottom: "24px",
      position: "absolute"
    }

谢谢

【问题讨论】:

    标签: css reactjs flexbox material-ui


    【解决方案1】:

    我将使用显示为flex 的包装器(在此示例中为container 类)。子项(列表和您的图像)应位于垂直轴,因此请使用flex-direction: column;,以便您的主轴是垂直的。因为你希望你的第一个孩子(你的列表)在开头,最后一个孩子(你的图片)你可以使用justify-content: space-between;。这将平均分配您的项目,您的第一个项目在开始,最后一个项目在最后。 Flex 一开始可能很难理解,但它非常强大。一些可能有帮助的信息:

    https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox 和https://css-tricks.com/snippets/css/a-guide-to-flexbox/。

    这是我写的一个例子(在整页中打开并调整大小以查看效果):

    html,
    body {
      height: 100%;
      margin: 0;
    }
    
    .container {
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      height: 100%;
      /* You can leave this out or change it to 100% depending on your situation*/
      width: 300px;
    }
    <div class="container">
      <ul>
        <li>List item</li>
        <li>List item</li>
        <li>List item</li>
        <li>List item</li>
        <li>List item</li>
        <li>List item</li>
        <li>List item</li>
        <li>List item</li>
        <li>List item</li>
      </ul>
      <img src="https://www.placecage.com/300/200" alt="">
    </div>

    【讨论】:

    • 谢谢,让我稍微调整一下,看看我能学到什么。
    • 这完全符合我的要求!在我第一次尝试使用 camelCase 作为样式 obj 中 space-between 的值时,我犯了一个愚蠢的错误。不过,有趣的是,当我去掉列方向时,它仍然有效。无论如何,非常感谢。
    • 它可能在没有列方向的情况下工作的原因是当您的内容被包装时,这意味着当它不“适合”一行时,它将在下面换行。如果容器的宽度更大,您会看到它将保留在一行中,您将无法获得所需的效果。很高兴我能帮忙;)
    【解决方案2】:

    尝试将位置更改为相对,底部更改为 -24px:

    logo: {
          width: "220px",
          height: "150px",
          marginLeft: "50px",
          marginRight: "50px",
          bottom: "-24px",
          position: "realtive"
        }
    

    查看code sandbox link 的这些更改。有了这个,您可以将底部属性调整到您认为合适的任何位置,将其放置到您喜欢的底部多远。

    【讨论】:

    • 谢谢,但该链接只是指向看起来像我的沙盒的精确副本。它有绝对值和 24 像素。
    • 射击,非常抱歉。在链接之前我忘了保存我的更改。请立即尝试!不管怎样,你也可以自己试试!
    • 所以在沙箱上,我必须将其设置为类似 -550px 的相对值。不过这对我来说有点令人困惑,因为对于底部:24px,我知道它总是会在底部上方一点点,所以它不会跑到底部边缘,无论什么屏幕正在查看它。但是使用-550px,这不会根据用户屏幕的高度而大幅改变底部的空间吗?如果他们有 4K 屏幕(2180)怎么办。也许我只是不清楚它是如何工作的。
    • 好的,是的,图像仍然出现在最后一个列表项的正下方。不在底部。所以相对而言,它只是说“在最后一个列表项下移动 24px”,对吗?
    猜你喜欢
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 2022-08-24
    • 2014-03-07
    • 2013-06-07
    • 2015-08-30
    相关资源
    最近更新 更多