Okay guys I have a challenge, can't seem to figure it out. I have 3 images with text that have to show next to eachother, but when at screen (max-width: 768px) the images have to show under eachother with the 1st and 3rd image the text has to be to the right with image to the next and for the 2nd image the text to the left and image to the right. So like this: enter image description here

另外:图片和文字必须有背景色,所以我不能把它们放在一个段落中,它们都必须是单独的方框!!

我以为flexbox是最好的解决方案,但我就是不想加入.

.fish{
  grid-column: span 13;
  display: flex;
}

.fishpics{
  max-width: 100%;
  height: 200px;
}

figure{
  background-color: darkred;
  margin: 5px;
  flex-wrap: 1;
}
            <div class="fish">
                <figure>
                <img class="fishpics" src="img/fish1.jpg">
                <h3>tekst</h3>
                <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Aperiam itaque saepe molestias at iusto iure illo voluptate? Veniam, doloribus mollitia. Nihil, repellendus aut? Accusantium dolorum tempora, sunt minus itaque id?</p>
                </figure>
                <figure>
                <img class="fishpics" src="img/fish2.jpg">
                <h3>tekst</h3>
                <p class="pright">Lorem, ipsum dolor sit amet consectetur adipisicing elit. Aperiam itaque saepe molestias at iusto iure illo voluptate? Veniam, doloribus mollitia. Nihil, repellendus aut? Accusantium dolorum tempora, sunt minus itaque id?</p>
            </figure>
            <figure>
                <img class="fishpics" src="img/fish3.jpg">
                <h3>tekst</h3>
                <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Aperiam itaque saepe molestias at iusto iure illo voluptate? Veniam, doloribus mollitia. Nihil, repellendus aut? Accusantium dolorum tempora, sunt minus itaque id?</p>
            </figure>
            </div>

正如你所看到的,看起来我还没有try 过,但我刚刚删除了我无助的try .

推荐答案

有了网格,这很容易做到.在3列布局中,可以将每个容器/列的宽度设置为33.33%.您还可以使用grid-auto-rows: 1fr使每个容器共享相同的高度:

.fish {
  display: grid;
  grid-template-columns: repeat(3, 33.33%);
  grid-auto-rows: 1fr;
}

我还建议将所有文本包装到一个新的容器中,以便更好地控制布局.通过这样做,您可以使用display: flex,然后将figure容器中的每个元素设置为max-width: 50%,使它们的宽度相等.根据图像大小,这可能会导致图像拉伸.您可以使用object-fit: cover来解决这一问题,但这会导致裁剪一点图像.

.fishpics {
  max-width: 50%;
  height: auto;
  object-fit: cover;
}

.text-container {
  max-width: 50%;
}

对于您的media-query,只需将grid-template-columns更改为1fr,这样figure个容器就可以堆叠在一起,因为它们现在位于一个大的列中.要反转图像之间的布局(&T);文本和文本(>);如图所示,只需使用(even)(odd) Select 器来控制flex-direction: row-reverse即可.

@media only screen and (max-width: 768px) {
  .fish {
    grid-template-columns: 1fr;
  }
  /* Makes every even number figure container reversed */
  figure:nth-of-type(even) {
    flex-direction: row-reverse;
  }
}

编辑:

要使文本位于图像下方,只需在figure元素上使用flex-direction: column即可.您还可以 Select 使用``

完整代码段(请确保选中完整页):

.fish {
  display: grid;
  grid-template-columns: repeat(3, 33.33%);
  grid-auto-rows: 1fr;
}

figure {
  background-color: darkred;
  margin: 5px;
  display: flex;
  flex-direction: column;
}


@media only screen and (max-width: 768px) {
  .fish {
    grid-template-columns: 1fr;
  }
  figure {
    flex-direction: row;
  }
  /* Makes every even number figure container reversed */
  figure:nth-of-type(even) {
    flex-direction: row-reverse;
  }
  /* Max width 50% and height: auto for responsive image that takes up 50% of width */
  .fishpics {
    max-width: 50%;
    height: auto;
    object-fit: cover;
  }
  .text-container {
    max-width: 50%;
  }
}
<div class="fish">
  <figure>
    <img class="fishpics" src="http://via.placeholder.com/640x360">
    <div class="text-container">
      <h3>tekst</h3>
      <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Aperiam itaque saepe molestias at iusto iure illo voluptate? Veniam, doloribus mollitia. Nihil, repellendus aut? Accusantium dolorum tempora, sunt minus itaque id?</p>
    </div>
  </figure>
  <figure>
    <img class="fishpics" src="http://via.placeholder.com/640x360">
    <div class="text-container">
      <h3>tekst</h3>
      <p class="pright">Lorem, ipsum dolor sit amet consectetur adipisicing elit. Aperiam itaque saepe molestias at iusto iure illo voluptate? Veniam, doloribus mollitia. Nihil, repellendus aut? Accusantium dolorum tempora, sunt minus itaque id?</p>
    </div>
  </figure>
  <figure>
    <img class="fishpics" src="http://via.placeholder.com/640x360">
    <div class="text-container">
      <h3>tekst</h3>
      <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Aperiam itaque saepe molestias at iusto iure illo voluptate? Veniam, doloribus mollitia. Nihil, repellendus aut? Accusantium dolorum tempora, sunt minus itaque id?</p>
    </div>
  </figure>
</div>

Html相关问答推荐

为什么在Vuettify 3中使用Flex时会忽略宽度?

使用网格时图像溢出容器高度

如何删除在小屏幕上单击按钮时出现的蓝色方块?

背景可点击,而不是文本

Div中的图像问题-(TailWind CSS中的网格)

如果DIV没有特定的sibling 姐妹,则以CSS为目标

禁用的文本区域会丢失换行符

使用CSS Flexbox时,我的图像未对齐

如何显示自定义按钮以将产品添加到WooCommerce购物车?

如何使链接组件内的内容不重新路由Next.js13

网格项未在同一行上对齐

使用 Thymeleaf 将图像水平居中

使用 popover api 和 `

您如何动态更改 Vue 中更高级别的标签的 CSS

使用 R markdown 在 html 中包含图像

高度大于页面高度和页面大于覆盖的 CSS 覆盖

图像比预期宽的网格列

根据百分比用多种 colored颜色 填充SVG路径

如何使列表的第一个元素比 css 中的其他元素大?

更改包含图标高度的 div