【问题标题】:How to align elements in three columns, even when resizing即使在调整大小时如何对齐三列中的元素
【发布时间】:2022-02-11 13:06:20
【问题描述】:

期望的结果:我有三列。我需要它们都具有相同的宽度,并且文本和按钮在所有三个中都处于同一水平。

问题:根据字数,当文本调整大小时,列会变宽,按钮开始跳跃,并且所有三个文本都在不同的点上调整大小。我需要防止这种情况。我怎样才能做到这一点?

HTML:

<section class="sub-offer">
      <div class="offer-container">
        <div class="offer-up">
          <h2>Lorem, ipsum.</h2>
          <img src="https://via.placeholder.com/150x150.png/09f/fff" alt="" />
        </div>
        <div class="offer-down">
          <p>
            Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minus a
            rerum sapiente odit porro obcaecati fugit, maxime modi veritatis
            quis!
          </p>
        </div>
        <div class="more-btn">
          <a href="#">Lorem, ipsum.</a>
        </div>
      </div>

      <div class="offer-container">
        <div class="offer-up">
          <h2>Lorem, ipsum.</h2>
          <img src="https://via.placeholder.com/150x150.png/09f/fff" alt="" />
        </div>
        <div class="offer-down">
          <p>
            Lorem ipsum dolor sit amet, consectetur adipisicing elit. Excepturi
            perspiciatis voluptas qui iste, voluptatem atque ab rerum illum quia
            incidunt odio?
          </p>
        </div>
        <div class="more-btn">
          <a href="#">Lorem, ipsum.</a>
        </div>
      </div>

      <div class="offer-container">
        <div class="offer-up">
          <h2>Lorem, ipsum.</h2>
          <img src="https://via.placeholder.com/150x150.png/09f/fff" alt="" />
        </div>
        <div class="offer-down">
          <p>
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Beatae
            vitae aut fugit dicta repellendus dolorem, quam, accusamus hic nemo
            ullam quod porro atque error?
          </p>
        </div>
        <div class="more-btn">
          <a href="#">Lorem, ipsum.</a>
        </div>
      </div>
    </section>

CSS:

.sub-offer {
  text-align: center;
  display: flex;
  position: relative;

  .offer-container {
    background: linear-gradient(to bottom right, #2e2e3b, #0f1519);
  }

  h2 {
    font-family: 'Playfair Display', serif;
    font-size: 15px;
    position: absolute;
    margin-left: auto;
    margin-right: auto;
    margin-top: 4.3em;
    width: 33%;
    text-align: center;
  }

  p {
    font-size: 12px;
    margin-top: 2em;
    padding: 0 0.5em 0 0.5em;
    font-family: 'Montserrat', sans-serif;
  }

  a {
    display: inline-block;
    font-family: 'Montserrat', sans-serif;
    font-size: 12px;
    background: white;
    margin: 3em 0 2.5em 0;
    padding: 0.5em;
    text-decoration: none;
    color: black;

    &:hover {
      background: #e5e5e5;
    }
  }
}

它们现在的样子:

【问题讨论】:

  • CSS-GridFlexbox 将为您解决。 CSS-Grid:section.sub-offer { display: grid; grid-template-columns: repeat(3, 1fr); } Flexbox:section.sub-offer { display: flex; } .offer-container { width: calc(100% / 3); }
  • 您能否再描述一下您所说的“文本...处于同一水平”是什么意思。您是说无论每个文本中有多少文本,无论图像的纵横比如何,文本都必须从相同的垂直水平开始。同样,所有按钮都必须处于同一垂直高度?
  • @tacoshy 很好,确实解决了宽度问题,谢谢!但是我还需要对齐里面的元素
  • @AHaworth 是的,我的意思是我不希望按钮位于不同的起点,因为它现在在图片上。现在他们跳转 bcs 文本有不同数量的单词。我需要将所有按钮放置在同一水平面上,因此它们看起来有点对齐。当他们调整大小时,我希望他们一起调整大小,仍然保持这种视觉对齐。希望这是有道理的......

标签: html css sass


【解决方案1】:

您可以添加媒体查询以在屏幕调整大小时更改flex-direction

  1. 添加以下独立 .sub-offer 类。
@media(max-width: 600px){
  flex-direction: column;
}
  1. h2 元素中添加以下内容。
@media(max-width: 600px){
  width: 100%;
}

【讨论】:

  • @Karina,看看这个!!
  • 感谢您的贡献!它实际上将我所有的列都推到了 600px 断点的左侧。虽然我需要的是 3 列具有相同的宽度,并将它们中的内容相互对齐
【解决方案2】:

我解决了我的问题。为了使所有三列具有相同的宽度,我使用了 @tacoshy 在 cmets 中推荐的内容:section.sub-offer { display: flex; } .offer-container { width: calc(100% / 3); }

为了对齐所有三个按钮,尽管让所有按钮都保持响应,我已将我的按钮包装到一个 div 中并使用了以下 css:

.more-btn {
    display: flex;
    align-self: center;
    margin-top: auto;
  }

【讨论】:

    【解决方案3】:

    我不是一个很好的开发者,但我可以试一试。当我想让事情完美排列时,我会使用网格,所以我尝试将其添加到 .offer-container 中,就像 .offer-container {display: grid; grid-template-rows: 1fr 1fr 1fr;} 一样。下面是一个工作示例。不过,由于我是新来帮助人们使用 StackOverflow 或真正的 StackOverflow,所以我确信我没有做正确的事情。例如,为不同的问题提供解决方案或修复您不想要的问题。如果您需要我所做更改的列表,可以在此处查看:added } for sub-offerremoved extra closing bracket on a{}separated &amp;:hover to a:hover{}made &lt;p&gt; text white。如果您的问题尚未得到解决,我希望这是您正在寻找的解决方案。

    .sub-offer {
        text-align: center;
        display: flex;
        position: relative;
        width:100px
    }
    
    .offer-container {
        background: linear-gradient(to bottom right, #2e2e3b, #0f1519);
        display: grid;
        grid-template-rows: 1fr 1fr 1fr;
    }
    
    h2 {
        font-family: 'Playfair Display', serif;
        font-size: 15px;
        position: absolute;
        margin-left: auto;
        margin-right: auto;
        margin-top: 4.3em;
        width: 33%;
        text-align: center;
    }
    
    p {
        font-size: 12px;
        margin-top: 2em;
        padding: 0 0.5em 0 0.5em;
        font-family: 'Montserrat', sans-serif;
        color: white;
    }
    
    a {
        display: inline-block;
        font-family: 'Montserrat', sans-serif;
        font-size: 12px;
        background: white;
        margin: 3em 0 2.5em 0;
        padding: 0.5em;
        text-decoration: none;
        color: black;
    }
    
    a:hover {
        background: #e5e5e5;
    }
    <section class="sub-offer">
      <div class="offer-container">
        <div class="offer-up">
          <h2>Lorem, ipsum.</h2>
          <img src="https://via.placeholder.com/150x150.png/09f/fff" alt="" />
        </div>
        <div class="offer-down">
          <p>
            Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minus a
            rerum sapiente odit porro obcaecati fugit, maxime modi veritatis
            quis!
          </p>
        </div>
        <div class="more-btn">
          <a href="#">Lorem, ipsum.</a>
        </div>
      </div>
    
      <div class="offer-container">
        <div class="offer-up">
          <h2>Lorem, ipsum.</h2>
          <img src="https://via.placeholder.com/150x150.png/09f/fff" alt="" />
        </div>
        <div class="offer-down">
          <p>
            Lorem ipsum dolor sit amet, consectetur adipisicing elit. Excepturi
            perspiciatis voluptas qui iste, voluptatem atque ab rerum illum quia
            incidunt odio?
          </p>
        </div>
        <div class="more-btn">
          <a href="#">Lorem, ipsum.</a>
        </div>
      </div>
    
      <div class="offer-container">
        <div class="offer-up">
          <h2>Lorem, ipsum.</h2>
          <img src="https://via.placeholder.com/150x150.png/09f/fff" alt="" />
        </div>
        <div class="offer-down">
          <p>
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Beatae
            vitae aut fugit dicta repellendus dolorem, quam, accusamus hic nemo
            ullam quod porro atque error?
          </p>
        </div>
        <div class="more-btn">
          <a href="#">Lorem, ipsum.</a>
        </div>
      </div>
    </section>

    【讨论】:

    • 嘿!感谢您的时间!我已经使用 flexbox 解决了我的问题,现在它工作正常。但正如我所见,您的解决方案也与我所做的相当相关!
    猜你喜欢
    • 2013-05-18
    • 1970-01-01
    • 2013-09-26
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多