js实现简易下拉列表加flex布局【2021.10.8】

一、简单回顾一下flex布局

        当一个盒子使用flex布局后,所有的子元素自动变为容器成员,称为flex项目,简称项目,且设为Flex布局以后,子元素的float、clear和vertical-align属性将失效。现在简单说一下容器属性和项目属性,要看更详细的,建议前往菜鸟教程

容器属性:        

flex-direction属性-决定主轴的方向(即项目的排列方向),默认是从左到右排列

row(默认值):主轴为水平方向,从左到右

row-reverse:主轴为水平方向,从右到左

column:主轴为垂直方向,从上到下

column-reverse:主轴为垂直方向,从下到上。

flex-wrap属性-决定换不换行以及如何换行,默认不换行

nowrap(默认):不换行

wrap:换行,第一行在上方

wrap-reverse:换行,第一行在下方

flex-flow属性-是是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap

justify-content属性-定义了项目在主轴上的对齐方式(假设主轴从左到右)

flex-start(默认值):左对齐

flex-end:右对齐

center: 居中

space-between:两端对齐,项目之间的间隔都相等

space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍

space-evenly:项目与项目之间以及项目与边框之间的间隔都相等

align-items属性-定义项目在交叉轴上如何对齐

flex-start:交叉轴的起点对齐

flex-end:交叉轴的终点对齐

center:交叉轴的中点对齐

baseline: 项目的第一行文字的基线对齐

stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度

align-content属性-定义多根轴线的对齐方式

flex-start:与交叉轴的起点对齐

flex-end:与交叉轴的终点对齐

center:与交叉轴的中点对齐

space-between:与交叉轴两端对齐,轴线之间的间隔平均分布

space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍

stretch(默认值):轴线占满整个交叉轴

项目属性:

order属性-定义项目的排列顺序,数值越小,排列越靠前,默认为0。

flex-grow属性-定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

flex-shrink属性-定义项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。负值对该属性无效。

flex-basis属性-定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。

flex属性-是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。

align-self属性-允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

二、下拉列表项目

成品图:

 

body部分:

<nav class="nav">
        <div onmouseover="display()" onmouseout="hide()" class="leftDiv">
         商品分类
         <ul class="hidList">
            <a href="#"><li>女装\男装\内衣</li></a>
            <a href="#"><li>女鞋\男鞋\鞋包</li></a>
            <a href="#"><li>护肤\彩妆\个护</li></a>
            <a href="#"><li>运动户外</li></a>
            <a href="#"><li>家电数码</li></a>
            <a href="#"><li>母婴童装</li></a>
            <a href="#"><li>手表配饰</li></a>
            <a href="#"><li>居家用品</li></a>
            <a href="#"><li>唯品生活</li></a>
        </ul>
        </div>
        <div class="rightList">
            <a href="#"><li class="fistLi"><strong>推荐</strong></li></a>
            <a href="#"><li>3折疯抢</li></a>
            <a href="#"><li>唯品快抢</li></a>
            <a href="#"><li>唯品奥莱</li></a>
            <a href="#"><li>品牌清仓</li></a>
            <a href="#"><li>女装</li></a>
            <a href="#"><li>鞋包</li></a>
            <a href="#"><li>运动</li></a>
            <a href="#"><li>电器</li></a>
            <a href="#"><li>母婴</li></a>
            <a href="#"><li>男装</li></a>
            <a href="#"><li class="endLi">更多</li></a>
        </div>
    </nav>

css部分:

*{
        padding: 0;
        margin: 0;
        box-sizing: border-box;
    }
    li{
        list-style: none;
    }
    a{
        text-decoration: none;
        color: black;
    }
    html{
        height: 100%;
    }
    body{
        height: 100vh;
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        align-items: center;
    }
    .nav{
        display: flex;
        justify-content: space-around;
        align-items: center;
        width: 80%;
        max-width: 1200px;
        height: 60px;
    }
    .leftDiv{
        width: 18%;
        background-color: rgb(240, 74, 74);
        height: 50px;
        color: rgb(255, 255, 255);
        text-align: center;
        line-height: 50px;
    }
    .rightList{
        width: 82%;
        height: 50px;
        display: flex;
        justify-content: space-around;
        align-items: center;
    }
    .rightList li:hover{
        color: rgb(248, 63, 119);
    }
    .fistLi{
        color: rgb(240, 74, 74);
    }
    .endLi{
        background-image: url(../images/向下.png);
        background-size: 12px;
        background-repeat: no-repeat;
        background-position: 38px center;
        width: 50px;
    }
    .hidList{
        background-color: rgb(240, 74, 74);
        display: none;
    }
    .hidList li{
        color: rgb(255, 255, 255);
    }

js部分:

/*-----显示子菜单-----*/
function display() {
var block = document.getElementsByClassName("hidList")[0];/*获取下拉菜单的信息*/
block.style.display = "block"; /*菜单中的信息以块的形式展示*/
}
/*-----隐藏子菜单-----*/
function hide() {
var block = document.getElementsByClassName("hidList")[0];
block.style.display = "none";/*菜单中的信息不显示*/
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值