【问题标题】:How to position this CTA banner on top of two other divs without creating spacing?如何在不创建间距的情况下将此 CTA 横幅放置在其他两个 div 之上?
【发布时间】:2025-12-27 17:30:06
【问题描述】:

基本上我想实现一个横幅 CTA 块,它总是会遍历前一个和下一个 DIV,而不是创建一个白色的空白间距。无论实际 CTA 横幅块的高度如何,我都想以流畅的方式实现这一点。

代码示例:https://codepen.io/Gugols/pen/pORwxB

.before-banner {
  background: pink;
  margin-bottom: -90px;
  min-height: 100px;
  padding-bottom: 90px;
}

.after-banner {
  
  background: orange;
  min-height: 100px;
  padding-top: 90px;
}
.cta-wrapper {
  /*min-height: 150px;*/

  margin-bottom: -90px;
}
.cta {
  width: 50%;
  background: green;
  opacity: 0.7;
  font-size: 28px;
  margin: 0 auto;
}
<div class="before-banner paragraph">
  In consectetuer turpis ut velit. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce a quam. Vivamus elementum semper nisi. Cras non dolor.
    In consectetuer turpis ut velit. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce a quam. Vivamus elementum semper nisi. Cras non dolor.
    In consectetuer turpis ut velit. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce a quam. Vivamus elementum semper nisi. Cras non dolor.
    In consectetuer turpis ut velit. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce a quam. Vivamus elementum semper nisi. Cras non dolor.
    In consectetuer turpis ut velit. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce a quam. Vivamus elementum semper nisi. Cras non dolor.  In consectetuer turpis ut velit. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce a quam. Vivamus elementum semper nisi. Cras non dolor.
    In consectetuer turpis ut velit. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce a quam. Vivamus elementum semper nisi. Cras non dolor.
    In consectetuer turpis ut velit. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce a quam. Vivamus elementum semper nisi. Cras non dolor.
    In consectetuer turpis ut velit. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce a quam. Vivamus elementum semper nisi. Cras non dolor.
    In consectetuer turpis ut velit. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce a quam. Vivamus elementum semper nisi. Cras non dolor.
    In consectetuer turpis ut velit. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce a quam. Vivamus elementum semper nisi. Cras non dolor.
    In consectetuer turpis ut velit. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce a quam. Vivamus elementum semper nisi. Cras non dolor.
</div>
<div class="cta-wrapper">
  <div class="cta">
    <p>This is a CTA banner. Praesent egestas neque eu enim. Ut id nisl quis enim dignissim sagittis. Praesent vestibulum dapibus nibh. Etiam sit amet orci eget eros faucibus tincidunt. Vestibulum ante 
    </p>
  </div>
</div>
<div class="after-banner paragraph">
  In consectetuer turpis ut velit. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce a quam. Vivamus elementum semper nisi. Cras non dolor.
</div>

一些插图:

建议的 CSS 解决方案路径是理想的,但也可以接受基于 JavaScript(也包括 jQuery)的解决方案。 谢谢。

【问题讨论】:

  • 当您没有向我们展示您现有的任何 HTML、CSS 或 JS 时,不确定您希望别人如何帮助您
  • @RoryMcCrossan 好点。将尝试重新创建它并在此处发布。虽然这是一个错误的实现。
  • 显示错误的实现可以让我们修复它——这正是 * 的用途。
  • 好的,我已经添加了代码实现。
  • position: absolute; transform: translateY(-50%); 可以将其定位在其他两个元素之间的中间 - 但由于绝对定位会将元素从流中取出,因此您必须提供适当的 padding-bottom 和 -top到其他两个元素,以便它们保留必要的空间 - 它需要“足够”的填充来为不同数量的 CTA 内容保留足够的空间。

标签: css frontend


【解决方案1】:

实现重叠元素(不创建空白)的基本方法是将其position 设置为absolute。要使其与上面元素中的文本一起流动,请使该元素包含与position: relative 重叠的元素。

.text-block {
  position: relative;
  width: 50%;
  border: 1px solid red;
  padding: 50px;
}

.cta {
  position: absolute;
  border: 1px solid blue;
  width: 50%;
  left: 25%;
}
<div class="text-block">
  <p>basically I want to implement a banner CTA block which would always go over the previous and next DIVs but not create a white, empty spacing. I want to implement this in fluid way, irrespective of the height of the actual CTA banner block.</p>
  <div class="cta">basically I want to implement a banner CTA block which would always go over the previous and next DIVs but not create a white, empty spacing. I want to implement this in fluid way, irrespective of the height of the actual CTA banner block.</div>
</div>

【讨论】:

  • 很好的提示。但如果有第二个文本块(我已经用额外的代码更新了问题帖子),它就行不通了。此外,由于标记的 CTA 不能在另一个 div(段落)内。它应该介于两者之间。
最近更新 更多