一个元素左对齐,另一个元素居中对齐,但居中的元素被左元素推动

Posted

技术标签:

【中文标题】一个元素左对齐,另一个元素居中对齐,但居中的元素被左元素推动【英文标题】:Left-align one element and center-align another, but have centered element pushed by left element 【发布时间】:2014-09-18 09:27:10 【问题描述】:

我目前正在使用 flex,我认为这是必要的,但我对所有 CSS 解决方案持开放态度。

我有一个左边有一些元素的栏。这是在此元素组上使用 flex: 0 0 auto; 并在其后的空元素上使用 flex: 1 1 auto; 完成的。

我需要将另一组元素放在这个栏的中心(而不是剩余空间的中心)。如果第一组元素不存在,我可以在居中元素的左侧和右侧使用flex: 0 0 auto; 执行flex: 1 1 auto

但现在我需要将这些组合起来,使左侧元素保持在左侧,中间元素保持在中间,但我还需要左侧元素将中间元素向右推(因此使其不再居中)如果他们触摸。

编辑:我应该提到两个元素的宽度都是动态的。我知道高度,但最好不要它们。

【问题讨论】:

如果您共享相关代码会很好。我确信这里至少有一个人知道如何解决您的问题,但是如果您需要其他想要帮助的程序员的帮助,您需要给我们一些代码来修补...... @Banana。我认为他很清楚自己想要完成什么。 @DRD 你没明白我的意思。 您是否仅限于 css?因为使用javascript比较容易实现 @Banana 如果可能的话,我想限制自己使用 CSS。 【参考方案1】:

这样的?

html

<body>
    <aside>Left</aside>
    <main>Right</main>
</body>

CSS

* 
    margin: 0;
    padding: 0;


main 
    width: 1000px;
    height: 500px;
    background: cyan;
    margin: 0 auto;


aside 
    float: left;
    width: 200px;
    height: 500px;
    background: magenta;

【讨论】:

很遗憾我不知道宽度。 宽度是动态的,不是绝对的。 @Keavon 这就是我要说的。如果您不设置宽度,它应该可以正常工作。 哦,抱歉,我在您的评论中错过了“没有”这个词。让我试试看。 中间元素向左元素内推,见jsfiddle.net/9UJnt/5【参考方案2】:

这是一个使用绝对定位并需要显式设置左块宽度的解决方案。本质上,绝对定位将块从流中取出,并确保左右块不重叠,左边距设置在右侧块上,即左侧块宽度的大小。

这是一个小提琴:http://jsfiddle.net/4RqEr/。 (调整预览窗口大小以查看效果)。

HTML:

<div class = "container">
    <div>left</div>
    <div>Pushed to Right</div>
</div>

CSS:

* 
    margin: 0;
    padding: 0;
    -moz-box-sizing: border-box;
    box-sizing: border-box;


body 
    padding: 10px;


.container 
    background-color: #ccc;
    position: relative;
    text-align: center;
    overflow: hidden;


.container > div:first-child,
.container > div:nth-child(2) 
    padding: 10px 20px;
    background-color: #fA5858;
    color: #fff;
    text-transform: uppercase;
    font: 15px/1 Sans-Serif;


.container > div:first-child 
    position: absolute;
    left: 0;
    width: 100px;


.container > div:nth-child(2) 
    display: inline-block;
    background-color: #5882FA;
    margin: 0 100px;
    white-space: nowrap;

【讨论】:

只有在他知道左侧元素的宽度时才有效,如果它是动态的,您的解决方案将不起作用 是的,这就是我在介绍中所说的:“......并且需要明确设置左侧块的宽度。” @Banana 感谢您提醒我提及这一点。我已经编辑了我的问题,提到宽度是未知的。 我认为你最好的选择是使用这个解决方案,并在 dom 加载后使用 javascript 调整蓝色元素的边距 您实际上可以在没有 JavaScript 的情况下完成它,但我能想出的唯一解决方案是使用 flex-box 并使用额外的标记。本质上,左侧块是重复的(在 HTML 中)并位于最后一个块(使用 HTML 或order)。然后,您可以使用justify-content: space-between,它可以正常工作:jsfiddle.net/jdh2H。

以上是关于一个元素左对齐,另一个元素居中对齐,但居中的元素被左元素推动的主要内容,如果未能解决你的问题,请参考以下文章

CSS:如何将列表元素与左对齐文本居中对齐?

CSS:如何将列表元素与左对齐文本居中对齐?

为啥文本元素居中以及如何在 Dart 中将其与右侧对齐

css中让文字和图片对齐的问题

无法定位元素

JavaFX中GridPane的行居中对齐