如何使用弹性框重新排序 div?

IT技术 javascript html css flexbox
2021-02-22 21:39:53

我试图为我的 DOM 保持 seo 友好和语义结构,而不是重复整个元素以在不同位置显示它们。

我的布局基于display: flex项目。我尝试实现以下目标:

移动和桌面布局的预览

需要了解的重要事项:

  • 我不想根据窗口宽度显示/隐藏 div(以避免不必要的重复)
  • 没有一个 div 具有已知或固定的高度
  • 在桌面上,div 应该垂直居中,而右列构建一个标记团队(表现得像一个单个 div)
  • 布局至少需要支持IE11+

是否有唯一的 css 解决方案来实现这一目标?

如果没有,很容易剪下绿色 div 并将其内容粘贴到使用 javascript 的粉红色 div 中。但是我确实担心使用它的性能和“闪烁”,尽管调整浏览器的大小会使它变得更加复杂。我是否让这不必要地复杂化了?

这是显示工作解决方案但使用 javascript 的小提琴

代码笔演示

1个回答

一般来说,你不能单独使用 Flexbox 来做到这一点,尽管可能会根据每个给定的情况做出妥协。

单独使用 Flexbox,使用固定高度,你可以做到这一点

在这种情况下,不允许固定高度,您可以结合使用 Flexbox 和float.

通过使用 Flexbox 将其设置为移动设备,您首先在标记中添加中心项目,然后使用order将其在顶部底部之间移动

使用媒体查询,您只需将flex 容器设置为块元素并用于float左侧定位到左侧和右侧定位到右侧。


更新

这是将 Flexbox 与 结合的另一个版本position: absolute,它也在桌面模式下垂直居中项目

更新,添加了一个脚本来控制,这样绝对定位的元素不会比正确的项目大,如果是这样,调整 flex 容器的高度。

请注意,脚本绝不是优化的,它只是显示在某些情况下如何修复


使用脚本还可以在元素之间重新排序/移动项目。

堆栈片段

您还可以将其与媒体查询结合起来,并使用它来对元素进行实际重新排序


更新 2(在另一个问题中回答但后来移到这里)

如果我们谈论较小的项目,例如标题或较小的菜单,您可以做许多网站平台提供商(例如“squarespace”、“weebly”、“wordpress”等)所做的事情。他们的模板包含不同的标记结构,其中一个项目有时存在两次,一个对桌面可见,另一个对移动设备可见。

此外,如此之小,在性能方面几乎没有任何问题(我个人认为这比重复 CSS 规则没有任何问题,每个屏幕尺寸一个,并且很高兴这样做而不是引入脚本) .

小提琴演示

堆栈片段

感谢您的回答和时间。虽然此代码确实适用于固定高度 ( 50%),但它无法在未知高度下实现相同的效果。这就是float作为解决方案使用的问题在我的情况下,在没有已知高度的情况下将其垂直居中的部分很重要。
2021-04-21 21:39:53
@MarianRick 好吧,当有人积极帮助您时,投票是一种表示感谢您帮助我的糟糕方式当我停止询问和改进,并给您留下一个无效的解决方案时,我可以理解……不过,当有人以任何方式帮助您时,我发现很难理解反对票……
2021-04-24 21:39:53
@MarianRick 我更新了,所以它以桌面模式为中心......顺便说一句,你投反对票了吗??
2021-04-29 21:39:53
是的。不是为了伤害或冒犯您,而是为了保存本网站内容的质量。目前,您的解决方案解决了问题中提出的另一个问题。当然,如果它针对问题中指出的确切问题,我会更改此设置。在这个 codepen 中有一个使用 javascript 的工作演示。我开始质疑,如果没有 js 是否可能:codepen.io/marianrick/pen/wqxVOg?editors=1010
2021-04-29 21:39:53
再次感谢。正如我试图在图像中暗示的那样,它不是将每个 div 的内容集中在右列中。这是关于将两个div“作为一个标记团队”居中。这样它们就表现为一个单独的 div,它与左边的 div 垂直对齐。这就是为什么粉红色上方和绿色 div 下方有空白的原因。你明白我还是我应该创建一个例子?
2021-05-11 21:39:53