如何对齐元素使它们具有最高的高度

发布于 2025-02-02 20:14:54 字数 6932 浏览 2 评论 0原文

”中创建以下定价页面

我正在html和css

​最大的一个,具体取决于计划的标题和描述。

这是带有HTML和CSS的JSFIDDLE:“ nofollow noreferrer”>

当然,这是一个JSFiddle,它的解决方案(我的问题是如何避免使用JS进行的): https://jsfiddle.net/opensas/u2hcs6fm/1/

JS代码:

const headers = Array.from(document.getElementsByClassName('header'));
// get the greatest of each's header calculated height (without padding)
const maxHeight = Math.max(
    ...headers.map((h) => parseFloat(window.getComputedStyle(h).getPropertyValue('height')))
);
for (const header of headers) header.style.height = `${maxHeight}px`;

整个代码

在下面的参考中,我如何实现 ?最好使用普通CSS(无JavaScript)

.pricing {
  font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
  ;
  padding: 1rem;
  display: grid;
  grid-auto-flow: row;
  gap: 1rem;
}

.pricing .plans {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 290px));
  justify-content: center;
  align-items: stretch;
  gap: 1rem;
}

.pricing .plan {
  border: 1px solid #E5E7E9;
  border-radius: 0.5rem;
}

.pricing .plan .header {
  padding: 1rem;
  border-bottom-width: 1px;
  border-style: none none solid none;
  border-color: #F3F4F5;
}

.pricing .plan .header .title {
  font-size: 1rem;
  line-height: 150%;
  font-weight: 600;
}

.pricing .plan .header .description {
  padding: 0.25rem 0 1rem 0;
  font-size: 0.875rem;
  line-height: 145%;
  color: #6D7A87;
  overflow: hidden;
}

.pricing .plan .price {
  padding: 1rem;
  padding-bottom: 0.5rem;
  display: grid;
  grid-auto-flow: column;
  width: fit-content;
  align-items: center;
  gap: 0.5rem;
}

.pricing .plan .price .amount {
  color: #101113;
  font-size: 2.5rem;
  line-height: 120%;
  font-weight: 600;
}

.pricing .plan .price .billing-cycle {
  color: #6D7A87;
  font-size: 0.875rem;
  line-height: 145%;
}

.pricing .plan .buy {
  padding: 0 1rem 1rem 1rem;
  display: flex;
  flex-direction: column;
  justify-content: center;
  border-bottom-width: 1px;
  border-style: none none solid none;
  border-color: #F3F4F5;
}

.pricing .plan .buy .buy-button {
  width: 100%;
  text-align: center;
  padding: 0.5rem 0 0.5rem 0;
  box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.05);
  border: 1px solid #E5E7E9;
  border-radius: 0.5rem;
  font-size: 0.875rem;
  line-height: 145%;
  color: #6D7A87;
  text-decoration: inherit;
}

.pricing .plan .features {
  padding: 1rem;
  display: grid;
  grid-auto-flow: row;
  gap: 0.5rem;
  list-style: none;
  margin: 0;
}

.pricing .plan .features .feature {
  font-size: 0.875rem;
  line-height: 145%;
  color: #101113;
  font-weight: 400;
  margin-left: 1.5rem;
}

.pricing .plan .features .feature::before {
  position: absolute;
  margin-left: -1.5rem;
}
<div class="root">
  <div id="pricing" class="pricing">

    <div class="plans">

      <div class="plan" id="PP1258915598215363">
        <div class="header">
          <div class="title">Basic service desk</div>
          <div class="description">Basic service desk support plan. For companies that just started and need help looking after their userbase.</div>
        </div>
        <div class="price">
          <span class="amount">$10</span>
          <span class="billing-cycle">billed monthly</span>
        </div>
        <div class="buy">
          <a class="buy-button" href="https://pricing.test.wingback.com/examples/null">Choose plan</a>
        </div>
        <ol class="features">
          <li class="feature">Public repositories</li>
          <li class="feature">Team Collaboration</li>
          <li class="feature">Ticket Trend Report</li>
          <li class="feature">Multiple users</li>
        </ol>
      </div>

      <div class="plan" id="PP4072474523116192">
        <div class="header">
          <div class="title">Medium service desk plan</div>
          <div class="description">For companies with a growing user base.</div>
        </div>
        <div class="price">
          <span class="amount">$18</span>
          <span class="billing-cycle">billed monthly</span>
        </div>
        <div class="buy">
          <a class="buy-button" href="https://pricing.test.wingback.com/examples/null">Choose plan</a>
        </div>
        <ol class="features">
          <li class="feature">Custom Email Server</li>
          <li class="feature">Custom Ticket Views</li>
          <li class="feature">Ticket Fields Status</li>
          <li class="feature">Collision Detection</li>
          <li class="feature">Custom SSL</li>
          <li class="feature">Time tracking</li>
        </ol>
      </div>

      <div class="plan" id="PP3070612550030584">
        <div class="header">
          <div class="title">Professional service desk with premium support</div>
          <div class="description">Professional service desk support</div>
        </div>
        <div class="price">
          <span class="amount">$60</span>
          <span class="billing-cycle">billed monthly</span>
        </div>
        <div class="buy">
          <a class="buy-button" href="https://pricing.test.wingback.com/examples/null">Choose plan</a>
        </div>
        <ol class="features">
          <li class="feature">Ticket Fields Status</li>
          <li class="feature">Custom Email Server</li>
          <li class="feature">Automation</li>
          <li class="feature">Customer Fields</li>
          <li class="feature">Custom Ticket Views</li>
          <li class="feature">Custom SSL</li>
          <li class="feature">Marketplace Apps</li>
          <li class="feature">Helpdesk Report</li>
          <li class="feature">Time tracking</li>
          <li class="feature">Collision Detection</li>
        </ol>
      </div>
    </div>
  </div>
</div>

I'm creating the following pricing page in HTML and CSS

enter image description here

I'd like the "Choose plan" to be aligned, that is, I would need the div.header elements to have the height of the largest one, depending on the title and description of the plan.

Here's a jsfiddle with the html and css: https://jsfiddle.net/opensas/nxLbth5d/8/

And here's a jsfiddle with the solution done in js (my question is precisely how to avoid doing it with js, of course): https://jsfiddle.net/opensas/u2hcs6fm/1/

the js code:

const headers = Array.from(document.getElementsByClassName('header'));
// get the greatest of each's header calculated height (without padding)
const maxHeight = Math.max(
    ...headers.map((h) => parseFloat(window.getComputedStyle(h).getPropertyValue('height')))
);
for (const header of headers) header.style.height = `${maxHeight}px`;

For reference below is the whole code

How can I achieve it? preferable with plain CSS (no JavaScript)

.pricing {
  font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
  ;
  padding: 1rem;
  display: grid;
  grid-auto-flow: row;
  gap: 1rem;
}

.pricing .plans {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 290px));
  justify-content: center;
  align-items: stretch;
  gap: 1rem;
}

.pricing .plan {
  border: 1px solid #E5E7E9;
  border-radius: 0.5rem;
}

.pricing .plan .header {
  padding: 1rem;
  border-bottom-width: 1px;
  border-style: none none solid none;
  border-color: #F3F4F5;
}

.pricing .plan .header .title {
  font-size: 1rem;
  line-height: 150%;
  font-weight: 600;
}

.pricing .plan .header .description {
  padding: 0.25rem 0 1rem 0;
  font-size: 0.875rem;
  line-height: 145%;
  color: #6D7A87;
  overflow: hidden;
}

.pricing .plan .price {
  padding: 1rem;
  padding-bottom: 0.5rem;
  display: grid;
  grid-auto-flow: column;
  width: fit-content;
  align-items: center;
  gap: 0.5rem;
}

.pricing .plan .price .amount {
  color: #101113;
  font-size: 2.5rem;
  line-height: 120%;
  font-weight: 600;
}

.pricing .plan .price .billing-cycle {
  color: #6D7A87;
  font-size: 0.875rem;
  line-height: 145%;
}

.pricing .plan .buy {
  padding: 0 1rem 1rem 1rem;
  display: flex;
  flex-direction: column;
  justify-content: center;
  border-bottom-width: 1px;
  border-style: none none solid none;
  border-color: #F3F4F5;
}

.pricing .plan .buy .buy-button {
  width: 100%;
  text-align: center;
  padding: 0.5rem 0 0.5rem 0;
  box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.05);
  border: 1px solid #E5E7E9;
  border-radius: 0.5rem;
  font-size: 0.875rem;
  line-height: 145%;
  color: #6D7A87;
  text-decoration: inherit;
}

.pricing .plan .features {
  padding: 1rem;
  display: grid;
  grid-auto-flow: row;
  gap: 0.5rem;
  list-style: none;
  margin: 0;
}

.pricing .plan .features .feature {
  font-size: 0.875rem;
  line-height: 145%;
  color: #101113;
  font-weight: 400;
  margin-left: 1.5rem;
}

.pricing .plan .features .feature::before {
  position: absolute;
  margin-left: -1.5rem;
}
<div class="root">
  <div id="pricing" class="pricing">

    <div class="plans">

      <div class="plan" id="PP1258915598215363">
        <div class="header">
          <div class="title">Basic service desk</div>
          <div class="description">Basic service desk support plan. For companies that just started and need help looking after their userbase.</div>
        </div>
        <div class="price">
          <span class="amount">$10</span>
          <span class="billing-cycle">billed monthly</span>
        </div>
        <div class="buy">
          <a class="buy-button" href="https://pricing.test.wingback.com/examples/null">Choose plan</a>
        </div>
        <ol class="features">
          <li class="feature">Public repositories</li>
          <li class="feature">Team Collaboration</li>
          <li class="feature">Ticket Trend Report</li>
          <li class="feature">Multiple users</li>
        </ol>
      </div>

      <div class="plan" id="PP4072474523116192">
        <div class="header">
          <div class="title">Medium service desk plan</div>
          <div class="description">For companies with a growing user base.</div>
        </div>
        <div class="price">
          <span class="amount">$18</span>
          <span class="billing-cycle">billed monthly</span>
        </div>
        <div class="buy">
          <a class="buy-button" href="https://pricing.test.wingback.com/examples/null">Choose plan</a>
        </div>
        <ol class="features">
          <li class="feature">Custom Email Server</li>
          <li class="feature">Custom Ticket Views</li>
          <li class="feature">Ticket Fields Status</li>
          <li class="feature">Collision Detection</li>
          <li class="feature">Custom SSL</li>
          <li class="feature">Time tracking</li>
        </ol>
      </div>

      <div class="plan" id="PP3070612550030584">
        <div class="header">
          <div class="title">Professional service desk with premium support</div>
          <div class="description">Professional service desk support</div>
        </div>
        <div class="price">
          <span class="amount">$60</span>
          <span class="billing-cycle">billed monthly</span>
        </div>
        <div class="buy">
          <a class="buy-button" href="https://pricing.test.wingback.com/examples/null">Choose plan</a>
        </div>
        <ol class="features">
          <li class="feature">Ticket Fields Status</li>
          <li class="feature">Custom Email Server</li>
          <li class="feature">Automation</li>
          <li class="feature">Customer Fields</li>
          <li class="feature">Custom Ticket Views</li>
          <li class="feature">Custom SSL</li>
          <li class="feature">Marketplace Apps</li>
          <li class="feature">Helpdesk Report</li>
          <li class="feature">Time tracking</li>
          <li class="feature">Collision Detection</li>
        </ol>
      </div>
    </div>
  </div>
</div>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文