位置:修正了Chrome和IE浏览器中的closurescanvas菜单
什么意图
我正在使用使用CSS和JavaScript的canvas菜单 。 canvas菜单按预期工作。 我想要一个边栏菜单在屏幕左边,并在菜单被触发时移动。 这个想法是有一个100px的菜单触发器,并具有100%的高度,始终在屏幕左侧。 使用绝对位置我有所有浏览器的高度问题,使用固定的位置Firefox工作正常,但遇到下面提到的问题。
错误
火狐问题:没有,据我所知。
Chrome浏览器问题:滚动几个像素后,边栏菜单触发器不能拉伸整个页面。
Internet Explorer:边栏菜单被触发时,边栏似乎完全消失。
的jsfiddle
因为我的代码在HTML,CSS和JavaScript上都很重,所以我包含了一个jsFiddle 。 请注意,就我所知,问题只发生在Chrome浏览器和Internet Explorer上。 您可以通过向下滚动页面,然后单击左侧的菜单button来复制问题。
截图
值得注意的HTML代码(小提琴中的完整代码)
<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>
注意可靠的CSS代码(小提琴中的完整代码)
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中解决问题的最简单的方法是简单地将.sbContent-one
的overflow
移动到.sbMainContent
。 这样做,你实际上不能滚动通过.sbMenuTrigger
元素(这可以解决问题),因为.sbMainContent
是一个兄弟元素。
目前,浏览器之间在fixed
元素相对于 使用translate3d
元素的位置方面存在许多不一致 。 IE中的问题是由于fixed
元素相对于窗口定位而没有考虑到使用translate3d
转换的元素。 为了解决这个问题,完全避免固定的定位,并通过删除position: fixed
(或覆盖position: static
,默认值)来将元素.sbMenuTrigger
添加回正常stream。 这样做,侧栏就像预期的那样扩展了。
换一种说法:
- 从
.sbContent-one
删除overflow-x: hidden
(或者用overflow: visible
覆盖它)。 - 将
overflow-x: hidden
添加到.sbMainContent
。 - 移除
position: fixed
从.sbMenuTrigger
(或者用position: static
覆盖它)。
这是我对你的问题的解决scheme。 testing3市长浏览器,它工作正常!
看小提琴
看看我在以下课程上的变化:
- 从
.sbContent-one
删除相对位置 - 将高度:100%添加到
.sbContent-two
(新规则) -
.sbMainContent
重大更改 -
.sbMenuTrigger
绝对位置
主要问题是:
-
.sbContent-one
和.sbMainContent
不必要的位置相对和绝对位置。 - 固定的位置是相对于窗口的,所以当你翻译元素的时候,它的行为在不同的浏览器上是不同的。
我设法使它在最后一个chrome / IE11上工作。
的jsfiddle
我感动了
<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; }
所有浏览器并不总是欢迎固定+变换的位置。