代码之家  ›  专栏  ›  技术社区  ›  azro

将不同大小的图像居中的通用方法

  •  0
  • azro  · 技术社区  · 8 年前

    我得到了一系列要显示的发射,我想将每个发射的图像居中 但是图像可以有不同的大小,我不想使它们变形

    #emission .card_emission_container_circle {
      padding: 30px;
      width: 350px;
      height: 350px;
      position: relative;
      text-align: center;
      margin-bottom: 20px;
    }
    
    #emission .card_emission_circle {
      box-shadow: 0 12px 16px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19) !important;
      text-align: center;
      transition: box-shadow 0.3s;
      border-radius: 50%;
      width: 300px;
      height: 300px;
    }
    
    #emission .card_emission_circle:hover {
      box-shadow: 0 12px 16px 0 rgba(216, 63, 65, 1), 0 17px 50px 0 rgba(216, 63, 65, 1) !important;
    }
    
    #emission .card_emission_image_circle img {
      border-radius: 50%;
      max-width: 300px;
      max-height: 300px;
    }
    
    #emission .card_emission_container_circle a {
      text-decoration: none;
      color: rgba(37, 39, 51, 0.9);
      width: 300px;
      height: 300px;
    }
    
    #emission .card_emission_descript_circle {
        border-radius: 10%;
        z-index: 2;
        padding: 0.01em 16px;
        text-align: center;
        overflow-y: hidden;
        text-overflow: ellipsis;
        word-wrap: break-word;
        position: absolute;
        top: 100px;
        opacity: 0;
        width: 300px;
        height: 300px;
    }
    
    #emission .card_emission_descript_circle a {
        text-decoration: none;
        color: rgba(37, 39, 51, 0.9);
        width: 300px;
        height: 300px;
    }
    <div id="emission">
      <div class="card_emission_container_circle grid-4 grid-t-6 grid-m-12">
        <a class="ajax" href="./contentEmission.php?chrid=7">
    
          <div class="card_emission_circle">
            <div class="card_emission_image_circle">
              <img src="https://www.chassimages.com/mag/wp-content/uploads/2017/02/ImageJour-ThomasMeunier-300x160.jpg" alt="Image de l'émission">
    
            </div>
    
            <div class="card_emission_descript_circle">
              <p>Description</p>
            </div>
    
          </div>
          <div class="card_emission_title_circle">
            <h3>Title</h3>
          </div>
        </a>
      </div>
    
    
      <div class="card_emission_container_circle grid-4 grid-t-6 grid-m-12">
        <a class="ajax" href="./contentEmission.php?chrid=7">
    
          <div class="card_emission_circle">
            <div class="card_emission_image_circle">
              <img src="https://www.france.tv/image/carre/300/300/0/9/9/b5b0b7bd-b4ed2457c172bf7c0abd9e904aff7f5f1a0fea5d60eca094df1dd476b0c6a990.jpg" alt="Image de l'émission">
    
            </div>
    
            <div class="card_emission_descript_circle">
              <p>Description</p>
            </div>
    
          </div>
          <div class="card_emission_title_circle">
            <h3>Title</h3>
          </div>
        </a>
      </div>
    </div>

    第二个是好的,第一个是不正确的,我想将其垂直居中到其div中,问题是我需要通用的解决方案,它可以应用于所有图像,无论大小是好是坏

    2 回复  |  直到 8 年前
        1
  •  1
  •   Bhuwan    8 年前

    看起来你没有相同大小的图像,所以可以使用这些图像作为背景。。。

    您还使用了 vertical-align:center 对于 vertical-align ... [Reference Link]

    而且 垂直对齐 使用 display:table-cell display:inline-block ...所以不需要在这里使用。。。

    我也用过 Flexbox display:flex 在里面 card_emission_circle 类,以便内部项可以完全 width height 仅使用 flex:1 到内部项。。。另一种方法是使用 width:100% height:100% 不使用flex的内部项目

    堆栈代码段

    #emission .card_emission_container_circle {
      padding: 30px;
      width: 350px;
      height: 350px;
      position: relative;
      text-align: center;
      margin-bottom: 20px;
    }
    
    #emission .card_emission_circle {
      box-shadow: 0 12px 16px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19) !important;
      text-align: center;
      transition: box-shadow 0.3s;
      border-radius: 50%;
      width: 300px;
      height: 300px;
      display: flex;
    }
    
    #emission .card_emission_circle:hover {
      box-shadow: 0 12px 16px 0 rgba(216, 63, 65, 1), 0 17px 50px 0 rgba(216, 63, 65, 1) !important;
    }
    
    #emission .card_emission_container_circle a {
      text-decoration: none;
      color: rgba(37, 39, 51, 0.9);
      width: 300px;
      height: 300px;
    }
    
    .card_emission_image_circle {
      flex: 1;
      border-radius: 50%;
      background-size: cover;
      background-position: center center;
    }
    <div id="emission">
      <div class="card_emission_container_circle grid-4 grid-t-6 grid-m-12">
        <a class="ajax" href="./contentEmission.php?chrid=22">
          <div class="card_emission_circle">
            <div class="card_emission_image_circle" style="background-image:url(https://www.chassimages.com/mag/wp-content/uploads/2017/02/ImageJour-ThomasMeunier-300x160.jpg)">
            </div>
          </div>
        </a>
      </div>
      <div class="card_emission_container_circle grid-4 grid-t-6 grid-m-12">
        <a class="ajax" href="./contentEmission.php?chrid=22">
          <div class="card_emission_circle">
            <div class="card_emission_image_circle" style="background-image:url(https://www.france.tv/image/carre/300/300/0/9/9/b5b0b7bd-b4ed2457c172bf7c0abd9e904aff7f5f1a0fea5d60eca094df1dd476b0c6a990.jpg)">
            </div>
          </div>
        </a>
      </div>
    </div>
        2
  •  1
  •   Brett DeWoody    8 年前

    此处有两个选项:

    1. 使用 top: 50%; transform: translateY(-50%); 方法
    2. 使用 flex 具有 align-items -首选,imo

    以下是方法:

    1. 需要添加 height: 100% #emission .card_emission_image_circle 尽管是元素。

    然后我们可以给 #emission .card_emission_image_circle img 元素 top: 50%; transform: translateY(-50%) 治疗

    #emission .card_emission_image_circle {
      height: 100%;
    }
    
    #emission .card_emission_image_circle img {
      position: relative;
      top: 50%;
      transform: translateY(-50%);
      border-radius: 50%;
      max-width: 300px;
      max-height: 300px;
    }
    

    #emission .card_emission_container_circle {
      padding: 30px;
      width: 350px;
      height: 350px;
      position: relative;
      text-align: center;
      margin-bottom: 20px;
    }
    
    #emission .card_emission_circle {
      box-shadow: 0 12px 16px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19) !important;
      text-align: center;
      transition: box-shadow 0.3s;
      border-radius: 50%;
      width: 300px;
      height: 300px;
      position: relative;
    }
    
    #emission .card_emission_circle:hover {
      box-shadow: 0 12px 16px 0 rgba(216, 63, 65, 1), 0 17px 50px 0 rgba(216, 63, 65, 1) !important;
    }
    
    #emission .card_emission_image_circle {
      height: 100%;
    }
    
    #emission .card_emission_image_circle img {
      position: relative;
      top: 50%;
      transform: translateY(-50%);
      border-radius: 50%;
      max-width: 300px;
      max-height: 300px;
    }
    
    #emission .card_emission_container_circle a {
      text-decoration: none;
      color: rgba(37, 39, 51, 0.9);
      width: 300px;
      height: 300px;
    }
    
    #emission .card_emission_descript_circle {
      border-radius: 10%;
      z-index: 2;
      padding: 0.01em 16px;
      text-align: center;
      overflow-y: hidden;
      text-overflow: ellipsis;
      word-wrap: break-word;
      position: absolute;
      top: 100px;
      opacity: 0;
      width: 300px;
      height: 300px;
    }
    
    #emission .card_emission_descript_circle a {
      text-decoration: none;
      color: rgba(37, 39, 51, 0.9);
      width: 300px;
      height: 300px;
    }
    <div id="emission">
      <div class="card_emission_container_circle grid-4 grid-t-6 grid-m-12">
        <a class="ajax" href="./contentEmission.php?chrid=7">
    
          <div class="card_emission_circle">
            <div class="card_emission_image_circle">
              <img src="https://www.chassimages.com/mag/wp-content/uploads/2017/02/ImageJour-ThomasMeunier-300x160.jpg" alt="Image de l'émission">
    
            </div>
    
            <div class="card_emission_descript_circle">
              <p>Description</p>
            </div>
    
          </div>
          <div class="card_emission_title_circle">
            <h3>Title</h3>
          </div>
        </a>
      </div>
    
    
      <div class="card_emission_container_circle grid-4 grid-t-6 grid-m-12">
        <a class="ajax" href="./contentEmission.php?chrid=7">
    
          <div class="card_emission_circle">
            <div class="card_emission_image_circle">
              <img src="https://www.france.tv/image/carre/300/300/0/9/9/b5b0b7bd-b4ed2457c172bf7c0abd9e904aff7f5f1a0fea5d60eca094df1dd476b0c6a990.jpg" alt="Image de l'émission">
    
            </div>
    
            <div class="card_emission_descript_circle">
              <p>Description</p>
            </div>
    
          </div>
          <div class="card_emission_title_circle">
            <h3>Title</h3>
          </div>
        </a>
      </div>
    </div>

    2. 这是一个更简单的更改,只需要添加以下样式:

    #emission .card_emission_image_circle {
      height: 100%;
      display: flex;
      align-items: center;
    }
    

    #emission .card_emission_container_circle {
      padding: 30px;
      width: 350px;
      height: 350px;
      position: relative;
      text-align: center;
      margin-bottom: 20px;
    }
    
    #emission .card_emission_circle {
      box-shadow: 0 12px 16px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19) !important;
      text-align: center;
      transition: box-shadow 0.3s;
      border-radius: 50%;
      width: 300px;
      height: 300px;
    }
    
    #emission .card_emission_circle:hover {
      box-shadow: 0 12px 16px 0 rgba(216, 63, 65, 1), 0 17px 50px 0 rgba(216, 63, 65, 1) !important;
    }
    
    #emission .card_emission_image_circle {
      height: 100%;
      display: flex;
      align-items: center;
    }
    
    #emission .card_emission_image_circle img {
      border-radius: 50%;
      max-width: 300px;
      max-height: 300px;
    }
    
    #emission .card_emission_container_circle a {
      text-decoration: none;
      color: rgba(37, 39, 51, 0.9);
      width: 300px;
      height: 300px;
    }
    
    #emission .card_emission_descript_circle {
        border-radius: 10%;
        z-index: 2;
        padding: 0.01em 16px;
        text-align: center;
        overflow-y: hidden;
        text-overflow: ellipsis;
        word-wrap: break-word;
        position: absolute;
        top: 100px;
        opacity: 0;
        width: 300px;
        height: 300px;
    }
    
    #emission .card_emission_descript_circle a {
        text-decoration: none;
        color: rgba(37, 39, 51, 0.9);
        width: 300px;
        height: 300px;
    }
    <div id=“排放”>
    <div class=“card\u emission\u container\u circle grid-4 grid-t-6 grid-m-12”>
    <a class=“ajax”href=“/contentEmission.php?chrid=7”>
    
    <div class=“card\u emission\u circle”>
    <div class=“card\u emission\u image\u circle”>
    <img src=”https://www.chassimages.com/mag/wp-content/uploads/2017/02/ImageJour-ThomasMeunier-300x160.jpg“alt=“任务图像”>
    
    </div>
    
    <div class=“card\u emission\u descript\u circle”>
    <p>描述(<)/p>
    </div>
    
    </div>
    <div class=“card\u emission\u title\u circle”>
    <h3>标题(<)/h3>
    </div>
    </a>
    </div>
    
    
    <div class=“card\u emission\u container\u circle grid-4 grid-t-6 grid-m-12”>
    <a class=“ajax”href=“/contentEmission.php?chrid=7”>
    
    <div class=“card\u emission\u circle”>
    <div class=“card\u emission\u image\u circle”>
    <img src=”https://www.france.tv/image/carre/300/300/0/9/9/b5b0b7bd-b4ed2457c172bf7c0abd9e904aff7f5f1a0fea5d60eca094df1dd476b0c6a990.jpg“alt=“Image de l”任务”>
    
    </div>
    
    <div class=“card\u emission\u descript\u circle”>
    <p>描述(<)/p>
    </div>
    
    </div>
    <div class=“card\u emission\u title\u circle”>
    <h3>标题(<)/h3>
    </div>
    </a>
    </div>
    </div>