【问题标题】:how to get 2 images on top of each other centered inside a div如何让 2 个图像在 div 中居中
【发布时间】:2020-11-11 00:41:44
【问题描述】:

我有一个要填充浏览器窗口宽度的 div。

在 div 中,我想要 2 张图像,它们彼此重叠,并且每个图像都在 div 中居中。图像可以是任何大小。两个图像都需要保持它们的纵横比,我不希望它们中的任何一个作为 div 的背景。

  .parent {
    position: relative;
    border: 1px solid blue;
    width: 100%;
  }
  .child {
    border: 1px solid red;
    margin-left: auto;
      margin-right: auto;
      display: block;
    max-width: 100%;
  }
  .ontop{
    z-index:1;
  }
  <div class="parent">
    <img class='child ontop' src="https://i.postimg.cc/yNh7V4v1/spaceship.png">
    <img class='child' src="https://i.postimg.cc/mgB04zzn/universe.jpg">
  </div>

fiddle

这里的问题是它们不在彼此之上。我可以让它们彼此重叠,并且至少水平居中

  .parent {
    position: relative;
    border: 1px solid blue;
    width: 100%;
  }
  .child {
    position: absolute;
    border: 1px solid red;
    margin-left: auto;
      margin-right: auto;
      display: block;
    max-width: 100%;
    left: 50%;
    transform: translate(-50%);
  }
  .ontop{
    z-index:1;
  }
  <div class="parent">
    <img class='child ontop' src="https://i.postimg.cc/yNh7V4v1/spaceship.png">
    <img class='child' src="https://i.postimg.cc/mgB04zzn/universe.jpg">
  </div>

fiddle

但现在的问题是由于我使用了绝对定位,图像不再包含在 div 中。

谁能告诉我这是什么技术?

【问题讨论】:

    标签: html css


    【解决方案1】:

    我建议您将图像(空格)移动到 CSS 背景图像。当您想将图像作为背景时,这是正确的方法。

    将 flex 应用于父级,一切顺利。

    .parent {
     background-image: url(https://i.postimg.cc/mgB04zzn/universe.jpg);
        background-repeat: no-repeat;
        background-size: cover;
        height: 100vh;
        display: flex;
        align-items: center;
        justify-content: center;
    }
    
    .child{
          height: 100px;
        width: 100px;
    }
     <div class="parent">
      <img class='child' src="https://i.postimg.cc/yNh7V4v1/spaceship.png">
     </div>

    【讨论】:

    • 谢谢德鲁维。尽管我在回复 Liam 时使用了“背景”一词,但我并不是要暗示我实际上想要 CSS 意义上的背景图像。也许我选择的星星图像是不幸的,因为它可能暗示了这一点。图像也都保持其纵横比。我稍微扩展了我的问题以澄清这一点。
    【解决方案2】:

    使用position:absolute; 将宇宙飞船放置在父级的中间中心。这要求父级与图像的宽度相同。我在示例中使用width: fit-content;

    使用此方法,您可以通过将这三个 HTML 元素放入一个容器中来移动图像集。

    .parent {
      width: fit-content;
      border: 1px solid blue;
      position: relative;
    }
    
    .parent img {
      border: 1px solid red;
    }
    
    .center {
      position: absolute;
      left: 50%;
      top: 50%;
      transform: translate(-50%, -50%);
    }
    <div class="parent">
      <img class="center" src="https://i.postimg.cc/yNh7V4v1/spaceship.png">
      <img src="https://i.postimg.cc/mgB04zzn/universe.jpg">
    </div>

    想要更大的背景图片,只需更改其大小?在此示例中,我将其宽度设置为 width: 100vw; 100 视图宽度

    (我为这个例子设置了一个内联样式,尽管你可能应该为你想要的大小制定一个 CSS 规则)

    .parent {
      width: fit-content;
      border: 1px solid blue;
      position: relative;
    }
    
    .parent img {
      border: 1px solid red;
    }
    
    .center {
      position: absolute;
      left: 50%;
      top: 50%;
      transform: translate(-50%, -50%);
    }
    <div class="parent">
      <img class="center" src="https://i.postimg.cc/yNh7V4v1/spaceship.png">
      <img style="width:100vw;" src="https://i.postimg.cc/mgB04zzn/universe.jpg">
    </div>

    【讨论】:

    • 谢谢利亚姆,但这不起作用。运行你的第一个 sn-p 并使浏览器更宽。宇宙背景不在 div 中。我需要在 div 中居中的两个图像。另外,我不能拉伸背景。
    • @rgh 如果您希望它们居中,则将它们放在居中的容器中。
    • @rgh 忘了说你不能只重复img 标签。此功能仅适用于原版 CSS/HTML 中的背景。
    • '将它们放在一个居中的容器中'。你的意思是添加'text-align:center;'到父 div?那是行不通的。还是引入一些中间div?你能演示一下吗?
    • @rgh 这是我用你的小提琴制作的一个叉子来演示:jsfiddle.net/YeloPartyHat/z19ewyso/3 元素的父容器有 display:flex;justify-content:center; 以在页面上水平居中子 div。
    猜你喜欢
    • 1970-01-01
    • 2015-08-19
    • 2015-08-16
    • 2012-05-06
    • 2013-10-02
    • 2019-07-20
    • 1970-01-01
    • 2013-06-26
    相关资源
    最近更新 更多