隣接する ( +
) または後続の ( ~
) 兄弟セレクターを使用して、左側の列が表示されるかどうかに基づいてコンテンツ列に条件付きで余白を適用できます。
おまけの質問では、 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