发表于: 2019-08-29 14:56:00

1 896


今天完成的事情:

终于写出了手写导航条!

思路:利用媒体查询和弹性盒子,设定一个屏宽的阈值,大于这个阈值导航条在容器内横向排列,小于这个阈值则纵向排列

容器为弹性容器,包括的弹性元素是导航条和菜单按钮

大于阈值(576px)时 媒体查询min-width:576px 横向排列,此时隐藏菜单按钮(display:none不给菜单按钮保留位置)

小于阈值(576px)时 媒体查询max-width:576px 纵向排列,显示菜单按钮 align-items:flex-end(使菜单按钮处于最右)

列表中ul和li占据100%宽度,li居中

完整代码:

html:

<nav>

     <div class="nav">

          <div class="menu">

               <div class="bar"></div>

               <div class="bar"></div>

               <div class="bar"></div>

          </div>

          <ul>

               <li><input type="button" name="home" value="首页"></li>

               <li><input type="button" name="custom" value="在线定制"></li>

               <li><input type="button" name="standard" value="标准箱"></li>

               <li><input type="button" name="qualtity" value="品质保障"></li>

          </ul>

     </div>

</nav>

CSS:

nav {background-color: #f9f9f9;}

.nav {

     float: right;

     margin: 15px 0;

     width: 100%;

     display: flex;

     flex-flow: row nowrap; 

     justify-content: flex-end;

}

.nav input {

     cursor: pointer;

     outline: none;

     border: none;

     padding: 8px 12px;

     margin-left: 3vw;

     border-radius: 5px;

     background-color: #fff;

     color: #000;

}

.nav input:hover {

     color: #fff;

     background-color: #1d7ad9;

}

.nav ul {

    padding: 0;

    margin: 0; 

}

.nav ul li {

     list-style: none;

     line-height: 48px;

}

 .nav .menu {

     margin: 0 2vw;

    width: 35px;

    height: 30px;

    flex-flow: column nowrap;

    justify-content: center;

    align-items: center;

    border: 1px solid #1d7ad9;;

    border-radius: 6px;

    display: none;

}

.bar {

    height: 2px;

    width: 20px;

    margin: 2px 0;

    background-color: #1d7ad9;

}

     

@media (min-width: 576px){

    .nav ul{

        display: flex;

        flex-flow: row nowrap; 

        justify-content: flex-end;

    }

}      

@media (max-width: 576px) {

    .nav {

         display: flex;

        flex-flow: column nowrap; 

        justify-content: flex-start;

        align-items: flex-end;

    }

    .nav .menu {display: flex;}

    .nav .menu:hover+ul {display: block;}

    .nav ul {

        width: 100%;

        display: none;

     }

    .nav ul li {

        width: 100%;

        margin: 0 auto;

     }

    .nav input {

        width: 100%;

        margin: 0;

    }

}

明天计划的事情
准备开始任务11


遇到的问题
1、关于hover和扩展选择器

响应式的导航条要实现点击菜单按钮出现下拉导航条

但是刚开始写了.menu:hover ul{} 一点反应都没有

后来才知道和选择器有关。menu和ul属于同一个父元素nav 称为兄弟元素。

属于扩展选择器的有:

后代选择器(用空格隔开)表示选择nav中所有类为menu的元素

子元素选择器(用>隔开)缩小范围,只选择某个元素的子元素 ,并且默认选择满足条件的第一个子元素,第二个不受影响

兄弟选择器(用+隔开)选择同属一个父元素的兄弟元素

因此,为了实现点击菜单按钮出现下拉导航 就要使用兄弟选择器改成.menu:hover+ul{} 

2、下拉导航条按钮无法选择

hover菜单按钮,导航条展开,但是离开菜单按钮导航条就迅速收起,无法选择导航条中的按钮

解决方案:

.nav .menu:hover+ul, .nav ul:hover{

display: block;

}

添加.nav ul:hover。这样移动至导航条中也可保持展开

收获

学会了html+css实现响应式导航条

理解了后代选择器、兄弟选择器等之间的关系


返回列表 返回列表
评论

    分享到