我的解决方案借鉴了其他已经发布的解决方案,但是通过测试它们,我发现两个中央 div 中的内容与宽度的分布混淆了......只要它们具有完全相同的内容,它们就会保持相同的宽度,但一旦获得更多内容,宽度就会不均匀。
因此,在我的解决方案中,我使用 jQuery 将剩余宽度分配给两个中央 div,使它们的宽度即使在它们的内容上存在差异。
Bonus #1:
jQuery 不需要明确知道左右 div 的宽度,因为它获取通过 CSS 定义的任何宽度。
Bonus #2:
轻松指定有多少个中心 div,并在所有这些 div 之间平均共享剩余宽度。只需更改剩余宽度除以的数字。
这是一个小提琴。以下是小提琴中发布的简化解决方案。当内容进入中央 div 时,小提琴更详细地显示了其他解决方案的缺陷。
<style>
div { margin: 5px; padding: 5px; }
.js-container { border: 1px solid red; display: table; }
.with-width { width: 80%; }
.js-child { border: 1px solid gray; display: table-cell; }
.left,
.right { width: 100px; }
</style>
<h3>Using javascript to dynamically distribute the remaining width</h3>
<div class="js-container with-width">
<div class="js-child left">left</div>
<div class="js-child center">center</div>
<div class="js-child center">center</div>
<div class="js-child right">right</div>
</div>
<div class="js-container with-width">
<div class="js-child left">left</div>
<div class="js-child center">center left <em>doesn't get wider</em> because of extra content</div>
<div class="js-child center">center right</div>
<div class="js-child right">right</div>
</div>
<script>
$(document).ready(function() {
function containerWidth() {
var w = parseInt($('.js-container').outerWidth(), 10);
return w;
}
// console.log('containerWidth: ' + containerWidth());
function outerChildrenWidth() {
var wl = parseInt($('.js-container').find('.left').outerWidth(), 10);
var wr = parseInt($('.js-container').find('.right').outerWidth(), 10);
return wl + wr; // bonus #1
}
// console.log('outerChildrenWidth: ' + outerChildrenWidth());
function centerChildWidth() {
var w = (containerWidth() - outerChildrenWidth()) / 2; // bonus #2
return w;
}
// console.log('centerChildWidth: ' + centerChildWidth());
function setCenterChildWidth() {
$('.js-container').find('.center').css('width', centerChildWidth() + 'px');
}
setCenterChildWidth();
});
</script>
请注意,js-
某些类的前缀是存在的,因为我用它来将受 javascript 影响的标记与“正常”标记分开。我还保留了控制台日志,以防您想调试。