CSS: 3列宽度不固定,中间一列需要居中
CSS: 3 columns not fixed in width, middle one needs to stay centered
好的,所以我到处搜索,但找不到类似的问题。
我有 3 个带有文本的跨度,我需要文本的中间跨度始终在同一位置居中,左右两个跨度与此相关。通过单击左侧或右侧跨度,值会发生变化。
<div class="container">
<span class="left">A</span>
<span class="middle">B</span>
<span class="right">C</span>
</div>
跨度都是动态的。
中间跨度始终至少是一个字符,但可以是更多字符。
左边和右边可以包含零个或多个字符。
我试过使用 flex-box,但我认为这对这种情况没有帮助。每次的问题是当左边或右边的值与值改变之前的字符数量不同时,中间的那个不在同一个位置而是跳来跳去。
我已经包含了一个问题的小例子。
var position = 1;
$('.left').click(function() {
if (position == 1) {
$('.left').text('');
$('.middle').text('A');
$('.right').text('B');
position = 0;
} else {
reset();
}
});
$('.right').click(function() {
if (position == 1) {
$('.left').text('B');
$('.middle').text('C');
$('.right').text('');
position = 2;
} else {
reset();
}
});
function reset() {
position = 1;
$('.left').text('A');
$('.middle').text('B');
$('.right').text('C');
}
.container {
width: 200px;
text-align: center;
background-color: #eeeeee;
}
.container span {
font-size: 2em;
}
.container span:nth-child(2) {
font-size: 3em;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<span class="left">A</span>
<span class="middle">B</span> <!-- This needs to stay in the same spot -->
<span class="right">C</span>
</div>
提前感谢您的帮助!
您需要定位左右元素并添加包装器。
首先,我们添加一个内部包装器,这样我们就可以使用相对于内部 div.
相对 的绝对定位
现在我们将包装 div 设置为 inline-block
并将 text-align:center
应用到父级以使 div 居中。(当然还有其他居中方法)。
现在我们将左右 div 都设置为 position:absolute
,这样它们的内容就不再影响流量了。
通过将 right:100%
应用到左侧 div 它将始终完全到达包装的右端 div.
相反的情况适用于右侧 div 得到 left:100%.
因为定位的 divs 会折叠到最小宽度,我们需要应用 white-space:nowrap
这样文本就不会在特定范围内换行。
.container {
text-align: center;
margin-bottom: 1em;
background: #c0ffee;
}
.wrap {
display: inline-block;
background: pink;
position: relative;
}
.left,
.right {
position: absolute;
top: 0;
white-space: nowrap;
}
.middle {
display: block;
}
.left {
background: orange;
right: 100%;
}
.right {
background: red;
left: 100%;
}
<div class="container">
<div class="wrap">
<span class="left">A</span>
<span class="middle">B</span>
<span class="right">C</span>
</div>
</div>
<div class="container">
<div class="wrap">
<span class="left">A long long string</span>
<span class="middle">BBBBB</span>
<span class="right">Complex</span>
</div>
</div>
好的,所以我到处搜索,但找不到类似的问题。 我有 3 个带有文本的跨度,我需要文本的中间跨度始终在同一位置居中,左右两个跨度与此相关。通过单击左侧或右侧跨度,值会发生变化。
<div class="container">
<span class="left">A</span>
<span class="middle">B</span>
<span class="right">C</span>
</div>
跨度都是动态的。 中间跨度始终至少是一个字符,但可以是更多字符。 左边和右边可以包含零个或多个字符。
我试过使用 flex-box,但我认为这对这种情况没有帮助。每次的问题是当左边或右边的值与值改变之前的字符数量不同时,中间的那个不在同一个位置而是跳来跳去。
我已经包含了一个问题的小例子。
var position = 1;
$('.left').click(function() {
if (position == 1) {
$('.left').text('');
$('.middle').text('A');
$('.right').text('B');
position = 0;
} else {
reset();
}
});
$('.right').click(function() {
if (position == 1) {
$('.left').text('B');
$('.middle').text('C');
$('.right').text('');
position = 2;
} else {
reset();
}
});
function reset() {
position = 1;
$('.left').text('A');
$('.middle').text('B');
$('.right').text('C');
}
.container {
width: 200px;
text-align: center;
background-color: #eeeeee;
}
.container span {
font-size: 2em;
}
.container span:nth-child(2) {
font-size: 3em;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<span class="left">A</span>
<span class="middle">B</span> <!-- This needs to stay in the same spot -->
<span class="right">C</span>
</div>
提前感谢您的帮助!
您需要定位左右元素并添加包装器。
首先,我们添加一个内部包装器,这样我们就可以使用相对于内部 div.
相对 的绝对定位现在我们将包装 div 设置为 inline-block
并将 text-align:center
应用到父级以使 div 居中。(当然还有其他居中方法)。
现在我们将左右 div 都设置为 position:absolute
,这样它们的内容就不再影响流量了。
通过将 right:100%
应用到左侧 div 它将始终完全到达包装的右端 div.
相反的情况适用于右侧 div 得到 left:100%.
因为定位的 divs 会折叠到最小宽度,我们需要应用 white-space:nowrap
这样文本就不会在特定范围内换行。
.container {
text-align: center;
margin-bottom: 1em;
background: #c0ffee;
}
.wrap {
display: inline-block;
background: pink;
position: relative;
}
.left,
.right {
position: absolute;
top: 0;
white-space: nowrap;
}
.middle {
display: block;
}
.left {
background: orange;
right: 100%;
}
.right {
background: red;
left: 100%;
}
<div class="container">
<div class="wrap">
<span class="left">A</span>
<span class="middle">B</span>
<span class="right">C</span>
</div>
</div>
<div class="container">
<div class="wrap">
<span class="left">A long long string</span>
<span class="middle">BBBBB</span>
<span class="right">Complex</span>
</div>
</div>