响应式侧拉导航栏

其实现在的响应式网站还是很多的,但是内容布局实际变化不大,Bootstrap的响应式功能其实就是它的栅栏布局 col- - 和响应式导航navbar,我觉得它的都蛮好用的,虽然国内很多网站为了兼容IE低版本都是用的固定宽布局,但以后一定也会慢慢跟进的。

BOOTSTRAP的响应导航

bootstrap的响应式菜单虽然简单好用,不用写什么另外的js,但是太丑了。

img

我自己上网都没有看到多少这样的导航,既然是适配移动端,我觉得还是侧拉菜单比较好吧。

然后我就开始写代码了

img
要不是自己写这种响应式导航,我还真不知道原来还是蛮麻烦的,耗费了我好半天,主要思路就是在屏幕分辨率宽比较小的时候,把原有的菜单列表改变一个样式,藏在屏幕的右边,然后显示菜单按钮,点击为导航栏添加一个新的CLass,让藏在右边的侧栏慢慢划出来,我使用的绝对定位的Right,本来是负值,然后让它变为0,再添加一个transition基本就可以了。

产生的疑惑

其实写css并不能,难的是理解各个元素之间的关系,本来这个侧栏的相对定位(relative)元素是navbar,但是为了到了响应的时候他要变为变得看似是body的子元素,但其实不是,导航栏一般都要实现fixed定位,他的子元素怎么可能会相对body定位了,除非你把它移出来,但是这样就又变麻烦了。所以我让navbar的样式改变一下,让它变成整个屏幕大小再加上fixed定位,添加一个透明背景色,这样不就实现了遮罩层吗,再让侧栏z-index提高,absolute定位,这样就实现了有遮罩层的侧拉菜单了。
还有一个问题,就是父元素的display,我本来想让父元素hidden,让侧拉栏随着父元素隐藏,让侧拉栏的right为负值,再把父元素display:block 显示出来,在让子元素做一个right的transition,让侧拉栏滑出来。但是事实证明那是不可能的,在父元素由display: hidden 变为 display:block的时候,子元素的transition是毫无作用的,这两个动画不可能同时进行,是我的想法太单纯了,得好好记上一笔。

更新2016-6-4

昨天的侧栏还是有BUG的,应该直接在侧栏上添加一个fixed定位,让它直接变成相对body定位不就好了吗,我脑子生锈了,没想到。