css 难以在带有缩略图的响应网格中显示未知尺寸的方形图像

hfwmuf9z  于 2022-12-24  发布在  其他
关注(0)|答案(2)|浏览(129)

我想创建一个响应图像网格3*N
我可以将图像调整为缩略图,并缩小到1缩略图时,每行看到的移动。
只是有几个问题:
1.难以居中并将图像裁剪为300 px X 300 px,垂直图像大小未知,如垂直图像x1c 0d1x和水平图像

1.当我的浏览器屏幕缩小到600 px-900 px时,我的图像行不会从每行3个缩略图变为每行2个缩略图
你能给我提供指导方针的布局显示图片在方形缩略图和响应网格?
下面是我用css编写codepen的工作,你可以把我的工作分叉然后继续
如有任何意见,请随时发表
https://codepen.io/burkaslarry/pen/abjovGz

body {
  width: 80%;
  margin: 30px auto;
  font-family: sans-serif;
}

h3 {
  text-align: center;
  font-size: 1.65em;
  margin: 0 0 30px;
}

div {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  /* or space-around */
}

a {
  display: inline-block;
  margin-bottom: 8px;
  width: calc(50% - 4px);
  text-decoration: none;
  color: black;
}

@media screen and (min-width: 50em) {
  a {
    width: calc(25% - 6px);
  }
}

a:hover img {
  transform: scale(1.15);
}

figure {
  margin: 0;
  overflow: hidden;
}

img {
  border: none;
  width: 300px;
  height: 300px;
  object-fit: cover;
  display: block;
  background: #ccc;
  transition: transform .2s ease-in-out;
}

.p a {
  display: inline;
  font-size: 13px;
  margin: 0;
  text-decoration: underline;
  color: blue;
}

.p {
  text-align: center;
  font-size: 13px;
  padding-top: 100px;
}
<div>
  <a href="https://i.imgur.com/uBlbQr5.png">
    <figure>
      <img src="https://i.imgur.com/uBlbQr5.png" alt="">
    </figure>
  </a>

  <a href="https://i.imgur.com/5OBlxo1.png">
    <figure>
      <img src="https://i.imgur.com/5OBlxo1.png" alt="">
    </figure>
  </a>

  <a href="https://i.imgur.com/HM3UavW.png">
    <figure>
      <img src="https://i.imgur.com/HM3UavW.png" alt="">
    </figure>
  </a>

  <a href="https://i.imgur.com/XRabiFI.png">
    <figure>
      <img src="https://i.imgur.com/XRabiFI.png" alt="">
    </figure>
  </a>

  <a href="https://i.imgur.com/Np615iB.png">
    <figure>
      <img src="https://i.imgur.com/Np615iB.png" alt="">
    </figure>
  </a>

</div>

<p class="p">Demo by Larry Lo. <a href="http://www.sitepoint.com/using-modern-css-to-build-a-responsive-image-grid/" target="_blank">See article</a>.</p>
lf5gs5x2

lf5gs5x21#

在css样式中有一个覆盖,所以你只需要在一个站点中设置图像宽度,然后你的flex将工作https://codepen.io/elvengador/pen/abjbPjm
还有其他可能的解决方案:

  • 如果你想显示所有的高度和宽度在框你需要显示图像作为背景与这个属性:
background-size: contain;
background-repeat: no-repeat;
background-position: center;
vc6uscn9

vc6uscn92#

  • 在您的代码中,<figure>是Flexbox父代的直接后代,但它不允许增长,也不能填满整个行高。
  • <figure>必须强制形成正方形。
  • <figure>内的<img>必须能够水平和垂直增长以填充父<figure>
  • 显示2个与4个图像的断点应为900 / 16 = 56.25,而不是50
  • 更改断点定义,以反映OP图像要求:
  • 大小100%和1个图像,最大600px(默认)。我猜这是需要的,因为特定的600px-900px断点要求。如:* 当设备小于600px时会怎样?*
  • 50%大小和2张600px(37.5em)及以上的图像(媒体查询)
  • 大小为25%,4张图像为900px(56.25em)及以上(媒体查询)
    • 代码段**带注解:
body {
  width: 80%;
  margin: 30px auto;
  font-family: sans-serif;
}

h3 {
  text-align: center;
  font-size: 1.65em;
  margin: 0 0 30px;
}

div {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  /* or space-around */
}

a {
  display: inline-block;
  margin-bottom: 8px;
  width: calc(100% - 4px); /* MOD from 50% */
  text-decoration: none;
  color: black;
}

/* ADD to break at 600px */
@media screen and (min-width: 37.5em) {
  a {
    width: calc(50% - 4px);
  }
}

/* MOD from 50em to break at 900px */
@media screen and (min-width: 56.25em) {
  a {
    width: calc(25% - 6px);
  }
}

a:hover img {
  transform: scale(1.15);
}

figure {
  /* ADD */
  flex: 1;             /* Stretch to fill width */
  height: 100%;        /* dito height */
  aspect-ratio: 1 / 1; /* force to be a square */
  /**/

  margin: 0;
  overflow: hidden;
}

img {
  border: none;
  width: 100%;         /* MOD: from 300px */
  height: 100%;        /* dito, stretch to fill */
  object-fit: cover;
  display: block;
  background: #ccc;
  transition: transform .2s ease-in-out;
}

.p a {
  display: inline;
  font-size: 13px;
  margin: 0;
  text-decoration: underline;
  color: blue;
}

.p {
  text-align: center;
  font-size: 13px;
  padding-top: 100px;
}
<div>
  <a href="https://i.imgur.com/uBlbQr5.png">
    <figure>
      <img src="https://i.imgur.com/uBlbQr5.png" alt="">
    </figure>
  </a>

  <a href="https://i.imgur.com/5OBlxo1.png">
    <figure>
      <img src="https://i.imgur.com/5OBlxo1.png" alt="">
    </figure>
  </a>

  <a href="https://i.imgur.com/HM3UavW.png">
    <figure>
      <img src="https://i.imgur.com/HM3UavW.png" alt="">
    </figure>
  </a>

  <a href="https://i.imgur.com/XRabiFI.png">
    <figure>
      <img src="https://i.imgur.com/XRabiFI.png" alt="">
    </figure>
  </a>

  <a href="https://i.imgur.com/Np615iB.png">
    <figure>
      <img src="https://i.imgur.com/Np615iB.png" alt="">
    </figure>
  </a>

</div>

<p class="p">Demo by Larry Lo. <a href="http://www.sitepoint.com/using-modern-css-to-build-a-responsive-image-grid/" target="_blank">See article</a>.</p>

相关问题