html - 空的响应式正方形,其边长等于 flex 盒内 sibling 的高度

标签 html css flexbox responsive-design aspect-ratio

我有一个 flex 容器,里面有两个元素。

其中一个是 div 内的文本。第二个是一个应该是正方形的盒子。

  • 正方形的边长必须等于文本的行高(如果文本大小发生变化,框应缩放);
  • 如果文本大小发生变化,容器的高度也会发生变化。
  • Box 应粘在 flex 容器的右侧(现在是这样)。

到目前为止我所拥有的:

Current state

我正在努力实现的目标:

Desired state

我尝试过 aspect-ratio CSS 属性,但如果没有明确的 height 声明,它就不起作用。如果我明确将 height 设置为 100%,盒子会垂直折叠。填充技术仅适用于具有明确宽度的框,因此不适用。考虑过使用 font-size 作为 height,但前者不等于 line-height

寻找 CSS 解决方案。

* {
  box-sizing: border-box;
  padding: 0;
  margin: 0;
  font-size: 22px;
}

.container {
  position: relative;
  left: 30%;
  top: 50px;
  width: 40%;
  border: 1px solid black;
  padding: 8px 24px;
  border-radius: 30px;
}

.task {
  display: flex;
  justify-content: space-between;
  border: 1px solid green;
}

.task-info {
  border: 1px solid blue;
}

.task-button {
  border: 1px solid red;
}
<div class="container">
  <div class="task">
    <div class="task-info">
      Content
    </div>
    <div class="task-button">
    </div>
  </div>
</div>

最佳答案

如果您只需要右侧有一个正方形,那么可以将其绘制为伪元素:

* {
  box-sizing: border-box;
  padding: 0;
  margin: 0;
  font-size: 22px;
}

.container {
  position: relative;
  left: 30%;
  top: 50px;
  width: 40%;
  border: 1px solid black;
  padding: 8px 24px;
  border-radius: 30px;
}

.task {
  display: flex;
  justify-content: space-between;
  border: 1px solid green;
  position: relative;
}

.task-info {
  border: 1px solid blue;
}

.task-info::after {
  content: '';
  position: absolute;
  top: 0;
  right: 0;
  border: 1px solid red;
  height: 100%;
  aspect-ratio: 1;
  z-index: -1;
}

.task-button {
  border: 1px solid transparent;
}
<div class="container">
  <div class="task">
    <div class="task-info">
      Content
    </div>
  </div>
</div>

但是,我想您可能想要的不仅仅是这个 - 例如可点击。实现此目的的一种方法是单击整个内容元素 - 但这具体取决于功能所需的内容。

关于html - 空的响应式正方形,其边长等于 flex 盒内 sibling 的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70551566/

相关文章:

css - 为什么 Flexbox 在非 Chrome 浏览器中不能正常工作?

javascript - 如何使用CSS同时滑动两个元素?

html - Twitter Bootstrap 3 scrollspy 将无法工作

html - Firefox 图像位置(覆盖)

javascript - 如何在点击时触发第二个动画

html - 父级 flexbox 基于另一个 flexbox 增长/收缩

javascript - 日期选择器不工作/显示 - Bootstrap 5

python - 在 BeautifulSoup 中,在获取父元素数据时忽略子元素

javascript - 在 mousemove 上的 div 问题后圈出

html - CSS3 灵活框布局和溢出 : auto;