CSS 用于复杂的两列布局(文本和图像)

CSS for sophisticated two columns layout (text and images)

我一直在尝试为响应式两列布局(文本和图像)编写 CSS,但我很难做到这一点。布局如下所示: two column layout

要求:

我已经玩了一段时间了,但它似乎不能正常工作。我试过玩绝对位置和相对位置。不幸的是,问题总是出在图像上。当我更改屏幕大小时,两个较小的图像不保持原始位置(它们向左或向右移动)。我不确定我的方法是否好,我什至不知道在 CSS 中是否可能有这样的事情(好吧,我可以为不同的屏幕尺寸写很多媒体规则,但我正在寻找更好的解决方案),我以前从未见过这种图像布局。我很想知道最好的方法是什么。

我创建了一些代码片段来演示这个问题:

.section {
  margin: 0;
  display: block;
  width: 100%;
  height: auto;
  padding: 0;
  text-align: center;
}

.content-left {
  position: relative;
  display: inline-block;
  width: 45%;
  vertical-align: middle;
  text-align: center;
  float: left;
}

.content-right {
  position: relative;
  display: inline-block;
  width: 45%;
  vertical-align: middle;
  text-align: center;
  float: right;
}

.first-image-wrapper {
  position: relative;
  z-index: 1;
  height: 10rem;
  width: 10rem;
  text-align: center;
  margin: auto;
  vertical-align: middle;
  right: -2rem;
  top: 7rem;
}

.content-image-1 {
  vertical-align: middle;
  border-radius: 0.2rem;
  width: inherit;
  height: inherit;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
}

.second-image-wrapper {
  position: relative;
  right: -1rem;
  bottom: 7rem;
  border-radius: 0.2rem;
  height: 8.4rem;
  width: 8.4rem;
  z-index: 4;
}

.content-image-2 {
  max-width: 100%;
  height: auto;
  display: inline-block;
  vertical-align: middle;
}

.third-image-wrapper {
  position: relative;
  bottom: 18rem;
  right: -10rem;
  border-radius: 0.2rem;
  height: 5rem;
  width: 5rem;
  background-size: cover;
  z-index: 5;
}

.content-image-3 {
  max-width: 100%;
  height: auto;
  display: inline-block;
  vertical-align: middle;
}

@media (max-width: 500px) {
  .content-left, .content-right {
    width: 100%;
    display: block;
  }
}
<div class="section">
  <div class="content-left">
    <div class="content-text">
      <p>
     Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Praesent sapien massa. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Praesent sapien massa
     </p>
    </div>
  </div>
  <div class="content-right">
    <div class="first-image-wrapper">
      <img class="content-image-1" src="https://i.postimg.cc/BtB3G5dz/P1000003.jpg" alt="Image 1">
    </div>
    <div class="second-image-wrapper">
      <img class="content-image-2 "  src="https://i.postimg.cc/SnJb8BJ0/P1000064.jpg" alt="Image 2">
    </div>
    <div class="third-image-wrapper">
      <img class="content-image-3" src="https://i.postimg.cc/ykfzD16X/P1000071.jpg" alt="Image 3">
    </div>
  </div>
</div>

如有任何帮助,我们将不胜感激。

display:flex 适用于正版 IE11(我 运行 一个):

你可以这样做:

.section {
  align-items: center;
  display: flex;
  width: 100%;
}

.section>div {
  width: 50%;
}

.content-right {
  margin: auto;
}

img {
  display: block;
  margin: auto;
}

img:nth-child(1) {
  width: 20%;
  margin-left: 70%;
  margin-bottom: -2rem;
}

img:nth-child(2) {
  width: 45%;
  margin-left: 10%;
  position:relative;
}

img:nth-child(3) {
  width: 50%;
  margin: -2rem 0 0 40%;
  ;
}

@media (max-width: 500px) {
  .section {
    display: block;
  }
  .section>div {
    width: auto;
  }
}
<div class="section">
  <div class="content-left">
    <div class="content-text">
      <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus.
        Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Praesent sapien massa. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Curabitur arcu erat, accumsan id
        imperdiet et, porttitor at sem. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Praesent sapien massa
      </p>
    </div>
  </div>
  <div class="content-right">

    <img class="content-image-1" src="https://i.postimg.cc/BtB3G5dz/P1000003.jpg" alt="Image 1">


    <img class="content-image-2 " src="https://i.postimg.cc/SnJb8BJ0/P1000064.jpg" alt="Image 2">

    <img class="content-image-3" src="https://i.postimg.cc/ykfzD16X/P1000071.jpg" alt="Image 3">

  </div>
</div>

这是一个可以工作的 jsbin,它是在 IE11 中制作的 https://jsbin.com/lemonopica/1/edit?html,css,output

如果你不能用 flex 填充,你可以使用 display:table 和 display:table-cell,它也允许垂直居中,每个浏览器都理解。这是一个 table/table-cell 演示 https://jsbin.com/gecokurebe/1/edit?html,css,output