Why does padding-top + object-fit not work on images?

xhf*_*015 1 html css twitter-bootstrap bootstrap-4

I want to make the image a responsive square. Therefore, we decided to absolutely arrange the image by specifying padding-top: 100% as the pseudo element of the parent element of the image. We thought that if we applied object-fit: cover to the image, the image would be square.

However, in fact, images that do not have enough width and height are not magnified, and it seems that object-fit is not working.

How can I create a responsive square with CSS and apply object-fit?

.theme-color-text {
  position: relative;
}

.theme-color-text::before {
  margin-top: 10px;
  display: block;
  content: "";
  padding-top: 100%;
}

.image {
  width: 100%;
  border-radius: 10px;
  margin-top: 10px;
  object-fit: cover; /* If the image is small, it will not be enlarged to a square. */
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}
Run Code Online (Sandbox Code Playgroud)
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.7.2/css/all.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.min.js"></script>
<div class="container">
  <div class="row">
    <div class="col-6 col-md-4 col-lg-3">
      <div class="row post">
        <a href="#" class="theme-color-text w-100">
          <img src="https://placeimg.com/600/500/animals" class="image">
          <!-- correct -->
        </a>
      </div>
      <div class="row post-detail">
        <div class="col-auto">
          <i class="fas fa-heart"></i>
        </div>
        <div class="col-auto">
          <i class="fas fa-eye"></i>
        </div>
        <div class="col-12 comment-area">
          text
        </div>
      </div>
    </div>
    <div class="col-6 col-md-4 col-lg-3">
      <div class="row post">
        <a href="#" class="theme-color-text w-100">
          <img src="https://placeimg.com/150/50/animals" class="image">
          <!-- incorrect -->
        </a>
      </div>
      <div class="row post-detail">
        <div class="col-auto">
          <i class="fas fa-heart"></i>
        </div>
        <div class="col-auto">
          <i class="fas fa-eye"></i>
        </div>
        <div class="col-12 comment-area">
          text
        </div>
      </div>
    </div>
    <div class="col-6 col-md-4 col-lg-3">
      <div class="row post">
        <a href="#" class="theme-color-text w-100">
          <img src="https://placeimg.com/50/25/animals" class="image">
          <!-- incorrect -->
        </a>
      </div>
      <div class="row post-detail">
        <div class="col-auto">
          <i class="fas fa-heart"></i>
        </div>
        <div class="col-auto">
          <i class="fas fa-eye"></i>
        </div>
        <div class="col-12 comment-area">
          text
        </div>
      </div>
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

v4y*_*oCP 5

根据CSS图像值和3级替换内容模块,该object-fit属性需要高度和宽度

5.5。调整对象大小:object-fit属性

object-fit属性指定如何将替换元素的内容适配到由其使用的高度和宽度建立的框。

在这种情况下,您的代码缺少该height属性的规范。请尝试此代码。

.theme-color-text {
  position: relative;
}

.theme-color-text::before {
  margin-top: 10px;
  display: block;
  content: "";
  padding-top: 100%;
}

.image {
  width: 100%;
  border-radius: 10px;
  margin-top: 10px;
  object-fit: cover;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  height: 100%;
  /* Add the specification of the `height` property. */
}
Run Code Online (Sandbox Code Playgroud)
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.7.2/css/all.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.min.js"></script>
<div class="container">
  <div class="row">
    <div class="col-6 col-md-4 col-lg-3">
      <div class="row post">
        <a href="#" class="theme-color-text w-100">
          <img src="https://placeimg.com/600/500/animals" class="image">
          <!-- correct -->
        </a>
      </div>
      <div class="row post-detail">
        <div class="col-auto">
          <i class="fas fa-heart"></i>
        </div>
        <div class="col-auto">
          <i class="fas fa-eye"></i>
        </div>
        <div class="col-12 comment-area">
          text
        </div>
      </div>
    </div>
    <div class="col-6 col-md-4 col-lg-3">
      <div class="row post">
        <a href="#" class="theme-color-text w-100">
          <img src="https://placeimg.com/150/50/animals" class="image">
          <!-- incorrect -->
        </a>
      </div>
      <div class="row post-detail">
        <div class="col-auto">
          <i class="fas fa-heart"></i>
        </div>
        <div class="col-auto">
          <i class="fas fa-eye"></i>
        </div>
        <div class="col-12 comment-area">
          text
        </div>
      </div>
    </div>
    <div class="col-6 col-md-4 col-lg-3">
      <div class="row post">
        <a href="#" class="theme-color-text w-100">
          <img src="https://placeimg.com/50/25/animals" class="image">
          <!-- incorrect -->
        </a>
      </div>
      <div class="row post-detail">
        <div class="col-auto">
          <i class="fas fa-heart"></i>
        </div>
        <div class="col-auto">
          <i class="fas fa-eye"></i>
        </div>
        <div class="col-12 comment-area">
          text
        </div>
      </div>
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)