【问题标题】:How can I horizontally center 3 divs?如何水平居中 3 个 div?
【发布时间】:2017-08-30 04:17:46
【问题描述】:

所以我有 3 张卡片要放入我的项目中,并且我需要它们完全水平居中。我已经尝试了很多东西,但到目前为止都没有奏效。

这是卡片的代码。

.card {
  background: #fff;
  border-radius: 3px;
  display: inline-block;
  height: 300px;
  margin: 1rem;
  position: relative;
  width: 290px;
  overflow: hidden;
  opacity: 1;
}

.card .topImage {
  display: inline-flex;
  width: 100%;
  height: 220px;
  overflow: hidden;
  align-content: center;
}

.topImage {
    background-color: rgba(0, 0, 0, .3);
}

.card .topImage img {
  height: 220px;
}

.card .bottom {
  height: 80px;
  width: 100%;
}

.card .bottom p {
  text-align: left;
  height: 80px;
  width: 100%;
  box-sizing: border-box;
  margin: 0;
  padding: 0;
  padding-left: 20px;
  display: flex;
  align-items: center;
  text-decoration: none;
  color: #444;
  font-size: 18px;
  font-family: Roboto, sans-serif;
}

.card-1 {
  box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
  transition: all 0.3s cubic-bezier(.25,.8,.25,1);
}

.card-1:hover {
  box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22);
  cursor: pointer;
}
    <div class="card card-1">
  <div class="topImage">
  </div>
  <div class="bottom">
    <p>Project 1</p>
  </div>
</div>

<div class="card card-1">
  <div class="topImage">
  </div>
  <div class="bottom">
    <p>Project 2</p>
  </div>
</div>

<div class="card card-1">
  <div class="topImage">
  </div>
  <div class="bottom">
    <p>Project 3</p>
  </div>
</div>

【问题讨论】:

  • text-align:center 给所有.card 的父母。

标签: javascript html css flexbox center


【解决方案1】:

只需使用 flexbox。为卡片制作一个容器并放置 display: flex;放在上面,然后 justify-content: center 将它们居中,无论新容器 div 的大小如何

    .card {
      background: #fff;
      border-radius: 3px;
      display: inline-block;
      height: 300px;
      margin: 1rem;
      position: relative;
      width: 290px;
      overflow: hidden;
      opacity: 1;
    }

    .card .topImage {
      display: inline-flex;
      width: 100%;
      height: 220px;
      overflow: hidden;
      align-content: center;
    }

    .topImage {
        background-color: rgba(0, 0, 0, .3);
    }

    .card .topImage img {
      height: 220px;
    }

    .card .bottom {
      height: 80px;
      width: 100%;
    }

    .card .bottom p {
      text-align: left;
      height: 80px;
      width: 100%;
      box-sizing: border-box;
      margin: 0;
      padding: 0;
      padding-left: 20px;
      display: flex;
      align-items: center;
      text-decoration: none;
      color: #444;
      font-size: 18px;
      font-family: Roboto, sans-serif;
    }

    .card-1 {
      box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
      transition: all 0.3s cubic-bezier(.25,.8,.25,1);
    }

    .card-1:hover {
      box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22);
      cursor: pointer;
    }

    .card-container {
       display: flex;
       justify-content: center;
    }
<div class="card-container">

    <div class="card card-1">
      <div class="topImage">
      </div>
      <div class="bottom">
        <p>Project 1</p>
      </div>
    </div>

    <div class="card card-1">
      <div class="topImage">
      </div>
      <div class="bottom">
        <p>Project 2</p>
      </div>
    </div>

    <div class="card card-1">
      <div class="topImage">
      </div>
      <div class="bottom">
        <p>Project 3</p>
      </div>
    </div>

</div>

【讨论】:

【解决方案2】:

使用 flexbox 这很容易。在包含您的 div 的元素上,只需添加 display: flex;justify-content: center;

.card {
  background: #fff;
  border-radius: 3px;
  display: inline-block;
  height: 300px;
  margin: 1rem;
  position: relative;
  width: 290px;
  overflow: hidden;
  opacity: 1;
}

.card .topImage {
  display: inline-flex;
  width: 100%;
  height: 220px;
  overflow: hidden;
  align-content: center;
}

.topImage {
  background-color: rgba(0, 0, 0, .3);
}

.card .topImage img {
  height: 220px;
}

.card .bottom {
  height: 80px;
  width: 100%;
}

.card .bottom p {
  text-align: left;
  height: 80px;
  width: 100%;
  box-sizing: border-box;
  margin: 0;
  padding: 0;
  padding-left: 20px;
  display: flex;
  align-items: center;
  text-decoration: none;
  color: #444;
  font-size: 18px;
  font-family: Roboto, sans-serif;
}

.card-1 {
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
  transition: all 0.3s cubic-bezier(.25, .8, .25, 1);
}

.card-1:hover {
  box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);
  cursor: pointer;
}

body {
  display: flex;
  justify-content: center;
}
<div class="card card-1">
  <div class="topImage">
  </div>
  <div class="bottom">
    <p>Project 1</p>
  </div>
</div>

<div class="card card-1">
  <div class="topImage">
  </div>
  <div class="bottom">
    <p>Project 2</p>
  </div>
</div>

<div class="card card-1">
  <div class="topImage">
  </div>
  <div class="bottom">
    <p>Project 3</p>
  </div>
</div>

【讨论】:

    【解决方案3】:

    使用text-align: center 创建父级

    .card {
      background: #fff;
      border-radius: 3px;
      display: inline-block;
      height: 300px;
      margin: 1rem;
      position: relative;
      width: 290px;
      overflow: hidden;
      opacity: 1;
    }
    
    .card .topImage {
      display: inline-flex;
      width: 100%;
      height: 220px;
      overflow: hidden;
      align-content: center;
    }
    
    .topImage {
        background-color: rgba(0, 0, 0, .3);
    }
    
    .card .topImage img {
      height: 220px;
    }
    
    .card .bottom {
      height: 80px;
      width: 100%;
    }
    
    .card .bottom p {
      text-align: left;
      height: 80px;
      width: 100%;
      box-sizing: border-box;
      margin: 0;
      padding: 0;
      padding-left: 20px;
      display: flex;
      align-items: center;
      text-decoration: none;
      color: #444;
      font-size: 18px;
      font-family: Roboto, sans-serif;
    }
    
    .card-1 {
      box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
      transition: all 0.3s cubic-bezier(.25,.8,.25,1);
    }
    
    .card-1:hover {
      box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22);
      cursor: pointer;
    }
    .parent {
      text-align: center;
    }
    <div class="parent">
      <div class="card card-1">
        <div class="topImage">
        </div>
        <div class="bottom">
          <p>Project 1</p>
        </div>
      </div>
    
      <div class="card card-1">
        <div class="topImage">
        </div>
        <div class="bottom">
          <p>Project 2</p>
        </div>
      </div>
    
      <div class="card card-1">
        <div class="topImage">
        </div>
        <div class="bottom">
          <p>Project 3</p>
        </div>
      </div>
    </div>

    【讨论】:

      【解决方案4】:

      使用translateXleft 规则来定位它们。

      .card {
        background: #fff;
        border-radius: 3px;
        display: inline-block;
        height: 300px;
        margin: 1rem;
        position: relative;
        width: 290px;
        overflow: hidden;
        opacity: 1;
        left: 50%;
        -webkit-transform: translateX(-50%);
        transform: translateX(-50%);
      }
      
      .card .topImage {
        display: inline-flex;
        width: 100%;
        height: 220px;
        overflow: hidden;
        align-content: center;
      }
      
      .topImage {
          background-color: rgba(0, 0, 0, .3);
      }
      
      .card .topImage img {
        height: 220px;
      }
      
      .card .bottom {
        height: 80px;
        width: 100%;
      }
      
      .card .bottom p {
        text-align: left;
        height: 80px;
        width: 100%;
        box-sizing: border-box;
        margin: 0;
        padding: 0;
        padding-left: 20px;
        display: flex;
        align-items: center;
        text-decoration: none;
        color: #444;
        font-size: 18px;
        font-family: Roboto, sans-serif;
      }
      
      .card-1 {
        box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
        transition: all 0.3s cubic-bezier(.25,.8,.25,1);
      }
      
      .card-1:hover {
        box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22);
        cursor: pointer;
      }
          <div class="card card-1">
        <div class="topImage">
        </div>
        <div class="bottom">
          <p>Project 1</p>
        </div>
      </div>
      
      <div class="card card-1">
        <div class="topImage">
        </div>
        <div class="bottom">
          <p>Project 2</p>
        </div>
      </div>
      
      <div class="card card-1">
        <div class="topImage">
        </div>
        <div class="bottom">
          <p>Project 3</p>
        </div>
      </div>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-22
        • 2017-06-29
        • 2015-02-10
        • 2013-03-30
        • 1970-01-01
        相关资源
        最近更新 更多