意図されたもの
CSSとJavaScriptを使用して off canvas men を使用しています。キャンバス外メニューが意図したとおりに機能しています。画面の左側にあり、メニューがトリガーされたときに移動するサイドバーメニューが必要です。アイデアは、幅100pxで高さが100%で常に画面の左側にあるメニュートリガーを持つことです。絶対位置を使用すると、すべてのブラウザの高さに問題がありました。固定位置のFirefoxを使用すると問題なく動作しますが、以下の問題が発生します。
エラー
Firefoxの問題:私の知る限り、ありません。
Chromeの問題:サイドバーのメニュートリガーを数ピクセル下にスクロールした後、ページ全体が引き伸ばされません。
Internet Explorer:サイドバーメニューがトリガーされると、サイドバーが完全に消えるようです。
jsFiddle
私のコードはHTML、CSS、JavaScriptの両方で重いため、 jsFiddle 。この問題は、ChromeおよびInternet Explorerで私の知る限りでのみ発生します。ページを少し下にスクロールし、左側のメニューボタンをクリックすると、問題を再現できます。
スクリーンショット
NOTE WORTHY HTML CODE(Full Code in Fiddle)
<div id="sbContainer" class="sbContainer">
<div class="sbPush">
<header class="contain-to-grid sbMenu sbFX">
<nav class="top-bar" data-topbar>
<ul class="title-area show-for-small-only"><!--SITENAME--></ul>
<section class="top-bar-section"><!--LINKS--></section>
</nav>
</header>
<div class="sbContent-one">
<div class="sbContent-two">
<div class="sbMenuTrigger" data-effect="sbFX"><!--SIDEBAR TRIGGER--></div>
<div class="sbMainContent" role="document"><!--PAGE CONTENT--></div>
</div>
</div>
</div>
</div>
NOTE WORTHY CSS CODE(Full Code in Fiddle)
html, body, .sbContainer, .sbPush, .sbContent-one {
height:100%
}
.sbContent-one {
overflow-x:hidden;
background:#fff;
position:relative
}
.sbContainer {
position:relative;
overflow:hidden
}
.sbPush {
position:relative;
left:0;
z-index:99;
height:100%;
-webkit-transition:-webkit-transform .5s;
transition:transform .5s
}
.sbPush::after {
position:absolute;
top:0;
right:0;
width:0;
height:0;
background:rgba(0,0,0,0.2);
content:'';
opacity:0;
-webkit-transition:opacity 0.5s,width .1s 0.5s,height .1s .5s;
transition:opacity 0.5s,width .1s 0.5s,height .1s .5s
}
.sbMenu-open .sbPush::after {
width:100%;
height:100%;
opacity:1;
-webkit-transition:opacity .5s;
transition:opacity .5s
}
.sbMenu {
position:absolute;
top:0;
left:0;
z-index:100;
visibility:hidden;
width:244px;
height:100%;
background:#872734;
-webkit-transition:all .5s;
transition:all .5s
}
.sbMenu::after {
position:absolute;
top:0;
right:0;
width:100%;
height:100%;
background:rgba(0,0,0,0.2);
content:'';
opacity:1;
-webkit-transition:opacity .5s;
transition:opacity .5s
}
.sbMenu-open .sbMenu::after {
width:0;
height:0;
opacity:0;
-webkit-transition:opacity 0.5s,width .1s 0.5s,height .1s .5s;
transition:opacity 0.5s,width .1s 0.5s,height .1s .5s
}
.sbFX.sbMenu-open .sbPush {
-webkit-transform:translate3d(300px,0,0);
transform:translate3d(244px,0,0)
}
.sbFX.sbMenu {
-webkit-transform:translate3d(-100%,0,0);
transform:translate3d(-100%,0,0)
}
.sbFX.sbMenu-open .sbFX.sbMenu {
visibility:visible;
-webkit-transition:-webkit-transform .5s;
transition:transform .5s
}
.sbFX.sbMenu::after {
display:none
}
.no-csstransforms3d .sbPush,.no-js .sbPush {
padding-left:244px
}
.sbMenuTrigger {
background-color:#b23445;
cursor:pointer;
height:100%;
width:100px;
position:fixed;
left:0;
top:0
}
.sbMainContent {
margin-left:100px;
width:calc(100% - 100px);
top:0;
padding-top:50px;
position:absolute;
height:100%
}
変更をほとんど必要としない回避策を次に示します。
FF、Chrome、IE11/10の最新バージョンで一貫して動作します。
.sbContent-one {
overflow: visible; /* Or remove overflow-x: hidden */
}
.sbMainContent {
overflow-x: hidden;
}
.sbMenuTrigger {
position: static; /* Or remove position: fixed */
}
Chromeで問題を解決する最も簡単な方法は、overflow
を.sbContent-one
から.sbMainContent
に移動することです。そうすることで、 .sbMenuTrigger
は兄弟要素であるため、実際には.sbMainContent
要素(問題を解決)を超えてスクロールします。
現在、ブラウザ全体でfixed
要素がどのように配置されているかについて 多くの不整合 があります 要素に対して相対的に配置されています それは translate3d
を使用して変換されます =。 IE=の問題は、fixed
要素がtranslate3d
を使用して変換された要素を考慮せずにウィンドウに対して相対的に配置されているために発生しました。これにより、固定配置が完全に回避され、.sbMenuTrigger
を削除して(またはデフォルトのposition: fixed
でオーバーライドして)、要素position: static
を通常のフローに戻します。これにより、サイドバーが次のように展開されます。期待された。
言い換えると:
overflow-x: hidden
から.sbContent-one
を削除します(またはoverflow: visible
でオーバーライドします)。overflow-x: hidden
を.sbMainContent
に追加します。position: fixed
から.sbMenuTrigger
を削除します(またはposition: static
でオーバーライドします)。これがあなたの問題に対する私の解決策です。 3つの市長のブラウザーでテストされ、正常に動作します!
次のクラスの私の変更を見てください。
.sbContent-one
からの相対位置を削除.sbContent-two
(新しいルール).sbMainContent
の主な変更点.sbMenuTrigger
の絶対位置主な問題は:
.sbContent-one
および.sbMainContent
からの不要な相対位置および絶対位置。私はそれを最新のchrome/IE11で動作させることができました。
私は
<div class="sbMenuTrigger" data-effect="sbFX">
<div class="sbMenuIcon">
<div class="sbMenuIconBackground"></div>
<div class="sbMenuIconOverlay"></div>
</div>
<div class="sbMenuLogo">
<div class="sbMenuLogoBackground"></div>
<div class="sbMenuLogoOverlay"></div>
</div>
</div>
<header>
タグの終わりで、CSSは次のようになります。
.sbMenuTrigger {
background-color:#b23445;
cursor:pointer;
width:100px;
position:absolute;
right:-100px;
top:0;
bottom: 0;
}
位置固定+変換は、すべてのブラウザーで常に歓迎されるわけではありません。