您可以使用相邻 ( +
) 或后续 ( ~
) 同级选择器根据左列是否可见有条件地对内容列应用边距。
对于您的奖励问题,您应该将 content 列的内容放在一个内部包装 div 中,然后使用:nth-last-child
检查右列是否可见并有条件地在那里应用边距:
CSS:
.page {
position: relative;
}
.page .left-column {
background: lavender;
left: 0;
position: absolute;
top: 0;
width: 180px;
}
.page .content-column { background: orange; }
.page .content-column > .inner-wrap { background: rgba(255,255,255,0.3); }
.page .left-column + .content-column {
margin-left: 200px;
}
.page .content-column .right-column {
background: lime;
position: absolute;
right: 0;
top: 0;
width: 90px;
}
.page .content-column > .inner-wrap:nth-last-child(2) {
margin-right: 100px;
}
HTML:
<div class="page">
<% if content_for?(:left_column) %>
<div class="left-column">
<%= yield(:left_column) %>
</div>
<% end %>
<div class="content-column">
<div class="inner-wrap">
<%= yield(:content_column) %>
</div>
<% if content_for?(:right_column) %>
<div class="right-column">
<%= yield(:right_column) %>
</div>
<% end %>
</div>
</div>
渲染布局预览:http: //jsbin.com/icurey/8/edit