【问题标题】:How to rearrange these elements with CSS?如何用 CSS 重新排列这些元素?
【发布时间】:2017-07-31 20:16:21
【问题描述】:

CodePen: http://codepen.io/leongaban/pen/ndFgs

所以我有一个有 2 列的表格,左列是 60% 宽度,右列是 40%。

在左列内部,我有一个需要居中的 div,在该 div 内部还有 3 个其他元素(一个 span with a list,另一个带有测试的 span 和另一个 span with a list)。

这些元素需要并排浮动,直到浏览器的大小调整到足够小以进行媒体查询,然后使跨度最终彼此重叠。

这是我想要实现的完美示例:



但是,这就是我的问题发挥作用的地方。为了确保包含这 3 个元素的 div 保持在左侧表格列的中心。我必须在上面设置一个固定的宽度:

margin: 0 auto;
max-width: 200px; // or width: 70%;

但是,如果任何元素的名称、头衔或公司非常长,则会破坏布局。

我的 CodePen 布局示例:http://codepen.io/leongaban/pen/ndFgs

布局工作示例:

由于名称太长而导致布局损坏的示例

所以这就是我卡住的地方,如果名称太长,其中一个元素(第三个跨度)会无意中被扔到第二行。因为我的宽度是固定的。

我能想到的唯一解决方案是使用jQuery 检查所有跨度的宽度,如果加起来的宽度总和大于浮动容器的宽度,则故意重新排列元素.

你会如何解决这个问题?

我希望我可以使用 Flex-box,但我们必须至少支持 IE8。 :(

【问题讨论】:

  • 查看 CSS 媒体查询。您可以根据浏览器窗口的尺寸定义不同的 CSS 规则集。有一些浏览器不兼容(当然),但也有一个简单的 JavaScript 解决方法。
  • 我现在正在使用媒体查询,问题是我不知道中间容器的内容最终有多宽。所以我不能专门针对它……我只能猜测

标签: css alignment css-tables


【解决方案1】:

为跨度“#the_requested”指定特定宽度将导致溢出转到新行。例如

#the_requested {
background: purple;
width: 168px;

}

示例: http://codepen.io/anon/pen/zIhca

显然,您希望使左侧跨度的宽度与右侧的跨度相匹配。那么 span left+center+right 应该是 parent 的宽度。

【讨论】:

  • 啊,是的,谢谢!不知道为什么我没有考虑左右元素的固定宽度。保持它们内联 ;)
  • 嘿嘿,所以重新审视这个问题,仍然存在屏幕尺寸问题。如果我在某个时间缩短浏览器窗口,则 div 将再次错误地重叠。但是会创建一个新的 Stack 问题。
猜你喜欢
  • 2016-08-31
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多