SCSS 可以检测容器的 2 个子元素是放在同一行还是分成 2 行?

Posted

技术标签:

【中文标题】SCSS 可以检测容器的 2 个子元素是放在同一行还是分成 2 行?【英文标题】:Can SCSS detect if 2 child elements of a container are placed on the same row or split over 2 rows? 【发布时间】:2019-12-15 21:38:32 【问题描述】:

我有一个容器 div,里面有 2 个按钮,在我网站的多个地方使用,按钮上有不同的内容。理想情况下,它们应该彼此相邻放置,但如果按钮中的文本太大,它们将被分成 2 行,位于彼此下方。在这种情况下,它们之间应该有 10px 的边距。 我不知道这是否有任何区别,但我使用的是 Bootstrap 3 和 SCSS。 有没有办法在 SCSS 中设置一个条件,仅当它们显示在 2 行时才将此边距底部添加到第一个元素?

我也尝试过简单地将 margin-top: 10px 添加到两个按钮,但是我有一个不必要的额外边距。

我也在考虑计算子元素(按钮)的总宽度并检查它是否超过容器的宽度,但我不知道如何在不使用 javascript 的情况下实现这一点。

【问题讨论】:

no css 无法检测按钮是否超过两行,您只需向具有较长文本的按钮(或旁边的第一个按钮)添加一个类,然后您可以添加边距最重要的是,如果你不能这样做,那么你可能需要一些js来做你的检测 【参考方案1】:

您可以使用纯 html/CSS 做到这一点。将您的两个按钮包裹在两个 div 中,一个外部和一个内部。

    将 Flexbox 布局应用于外部 div。 为内部 div 添加负边距。 为按钮设置正边距,等于内部 div 的负边距。

.outer-wrapper 
  background: #ddd;
  display: flex;


.inner-wrapper 
  margin: -10px;


.btn 
  margin: 10px;


/* Test the button wrapping */
.narrow-wrapper 
  width: 20rem;
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>
<div class="outer-wrapper">
  <div class="inner-wrapper">
    <button type="button" class="btn btn-primary">Button with a lot of content inside</button>
    <button type="button" class="btn btn-primary">Another button</button>
  </div>
</div>

<br>

<div class="outer-wrapper narrow-wrapper">
  <div class="inner-wrapper">
    <button type="button" class="btn btn-primary">Button with a lot of content inside</button>
    <button type="button" class="btn btn-primary">Button below the first one</button>
  </div>
</div>

【讨论】:

以上是关于SCSS 可以检测容器的 2 个子元素是放在同一行还是分成 2 行?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 2 个盒子放在同一行,然后在下面再放 2 个?等等

【布局细节】让两个默认上下排列的同级组件元素放在同一行

如何设置div以将空间带到容器的末尾?

期望脚本从文件中读取并将所有内容放在同一行

如何在本机反应中将两个按钮放在同一行中?

我可以让 Visual Studio 将花括号与 if 语句(在 HTML 中)放在同一行吗?