2016-04-19 21 views
1

私は仕事を正しくしようとしているオフキャンバスメニューを使用しています。私の固定メニューとオフキャンバスをうまく動かすために、私はオフキャンバスの内側ラッパーからヘッダーを取らなければなりませんでしたが、メニューが開いたときにヘッダーは移動しません。これまでの兄弟要素をターゲットにするCSS

オフキャンバスを開いたときには、内部ラッパーに.is-open-rightを適用し、その後にCSSが適用されます。

私のラッパーに.is-right-openクラスが追加された場合にのみ、この行のCSSをヘッダに追加しようとしています。

-webkit-transform: translateX(-450px); 
    transform: translateX(-450px); 

私はこの方法をターゲットにしようとしていた。メニューが閉じているときに

.is-open-right, .is-open-right > .header { 
-webkit-transform: translateX(-$offcanvas-size-large); 
transform: translateX(-$offcanvas-size-large); 

}

私のHTMLは次のようになります。

オープン

<div class="off-canvas-wrapper"> 
<header class="header scrolled" role="banner"></header> 
<div class="off-canvas-wrapper-inner" data-off-canvas-wrapper=""></div> 
</div> 

HTML

<div class="off-canvas-wrapper"> 
<header class="header scrolled" role="banner"></header> 
<div class="off-canvas-wrapper-inner is-off-canvas-open is-open-right" data-off-canvas-wrapper=""></div> 
</div> 

次の兄弟要素が.is-open-right ??というクラスを持つ場合にのみ、私のヘッダー要素をターゲットできますか?私が読んだことから、私はJSソリューションに行く必要があるかもしれないように見えます。

答えて

0

「前の兄弟」セレクタはありません。あなたの解決策は、親要素にクラスを適用していることを確認することです。あなたのHTMLは次のようになります。

<div class="off-canvas-wrapper is-off-canvas-open is-open-right"> 
    <header class="header scrolled" role="banner"></header> 
    <div class="off-canvas-wrapper-inner" data-off-canvas-wrapper=""></div> 
</div> 

別のオプションは、あなたが(+を使用して)次の兄弟として、それをターゲットにすることができoff-canvas-wrapper-innerの下headerを移動することです。

現在のW3仕様のドラフトには、:has pseudoselectorも含まれています。完全にサポートされている場合は、次のセレクタでこの問題を解決できます。.previous-class:has(+ .next-class)

+0

オフキャンバスで動作するJSファイルを変更する必要があるため、実際にはオプションではありません。多くのこと。 また、あなたのソリューションでは、すべてが移動し、固定ヘッダーが乱れてしまいます。並進位置と固定位置はうまく動かない。 残念ながら、これは本当にオプションではないでしょうし、私はこれを行うためにJSスクリプトを作成する必要があるように思えます。 –

+0

要素のクラスや順序を変更できない場合は、CSSでヘッダーをターゲティングすることはできません。それはあなたの質問に答えますか? – mtaube

+0

さて、私は自分がしなければならないと思ったことを確信しています。あなたの入力と指導をありがとう! –