使用 HTML/CSS 实现 Educoder 顶部导航栏

第1关:使用flex布局实现Educoder顶部导航栏容器布局

任务描述

本关任务:使用flex布局实现容器两端对齐的效果

效果如下:

使用 HTML/CSS 实现 Educoder 顶部导航栏_第1张图片

相关知识

使用flex布局实现左右分开布局的方式有多种:

  1. 使用flex布局justify-content: space-between属性

  2. 使用flex布局flex:1 权重布局

使用flex布局justify-content: space-between属性

首先我们来看第一种实现方式:

 
  
  1. 左边容器
  2. 右边容器
  • .parent-wrap{
  • height: 60px;
  • display: flex;
  • justify-content: space-between;
  • }
  • 效果如图:

    使用flex布局flex:1权重布局

    接下来看第二种实现方式,同样使用flex布局:

     
      
    1. 左边容器
    2. 右边容器
  • .parent-wrap{
  • height: 60px;
  • display: flex;
  • }
  • .left-wrap{
  • flex:1
  • }
  • 效果图:

    第二种效果可能很多同学会问,为什么不直接让两个div都使用flex:1属性,这个很好解释,只有左侧使用flex:1属性的情况下,右侧容器宽度是根据内容来的,这样的话内容多长,右侧容器就有多长,如果两者都使用flex:1属性,右侧容器需要使用内容右对齐属性。

    编程要求

    在右侧编辑器中补充代码,使用flex布局初步实现Educdoer顶部导航栏最外层容器两端对齐的效果,具体要求如下:

    1. 页面最小宽度:1200px

    2. 导航栏背景颜色16进制:#24292D

    3. 导航栏高度:60px

    使用 HTML/CSS 实现 Educoder 顶部导航栏_第2张图片

    
    
    
      
      Educoder
      
      
    
    
    
    
    左边容器
    右边容器

     第2关:实现左侧文字导航列表(从这里开始造航母了,快跑)

    任务描述

    本关任务:实现导航栏的左侧文字导航列表。

    效果图如下:

    使用 HTML/CSS 实现 Educoder 顶部导航栏_第3张图片

    相关知识

    使用flex进行水平排列布局:

     
      
  • .parent-wrap{
  • width: 300px;
  • height: 60px;
  • display: flex;
  • }
  • .parent-wrap > div{
  • flex: 1;
  • text-align: center;
  • line-height: 60px;
  • }
  • 编程要求

    在右侧编辑器中补充代码,使用flex布局实现Educoder顶部导航栏左侧logo与文字列表效果,具体要求如下:

    1. 文字列表使用flex布局,文字颜色为白色,文字大小:16px

    2. 文字容器宽度64px,各文字容器之间距离30px

    3. logo宽高:40px * 38px

    4. logo距离屏幕左侧25px,距离文字列表30px

    5. logo图片地址:https://data.educoder.net/images/educoder/headNavLogo.png?1526520218

    6. ‘在线竞赛’右上方HOT使用base64格式:https://img-blog.csdnimg.cn/2022010612112358534.png

    7. 文字列表从左至右依次为:实践课程、翻转课堂、实训项目、在线竞赛、教学案例、交流问答

    效果图如下:

    
    
    
      
      Educoder
      
      
    
    
    
    

    第3关:实现右侧功能图标排序 

    本关任务:实现导航栏右侧功能图标排序。

    相关知识

    使用flex进行水平排列布局:

     
      
  • .parent-wrap{
  • width: 300px;
  • height: 60px;
  • display: flex;
  • }
  • .parent-wrap > div{
  • flex: 1;
  • text-align: center;
  • line-height: 60px;
  • }
  • 编程要求

    在右侧编辑器中不从代码,使用flex布局实现Educoder顶部导航栏右侧头像与图标列表效果,具体要求如下:

    1. 头像大小:34px * 34px

    2. 图标大小:16px * 16px

    3. 头像距离屏幕右侧:25px,距离图标:15px

    4. 图标容器宽高:48px * 60px

    5. 头像链接:https://data.educoder.net/images/avatars/User/b?t=1569204859650

    6. 各图标链接如下:

    /api/attachments/411643

    /api/attachments/411644

    /api/attachments/411645

    
    
    
      
      Educoder
      
      
    
    
    
    

    第4关:实现左侧鼠标悬停效果与选中状态

    任务描述

    本关任务:实现左侧鼠标悬停效果。

    使用 HTML/CSS 实现 Educoder 顶部导航栏_第4张图片

    相关知识

    整个鼠标悬停效果可分为两部分,一是悬浮效果,二是选中的列表变色。

    悬浮效果

    鼠标悬停效果我们可以使用hover伪类实现(文字颜色变淡)

     
      
    1. 实践课程
    2. .text{
    3. opacity: .7;
    4. }

    tips:当值为小于1的小数时,可以不写前面的0,当值为0像素时可以省略后面的像素单位。下面举个例子:

     
      
    1. .text{
    2. background: rgba(0,0,0,.7);
    3. opacity: .7;
    4. margin: 0 15px 15px 0;
    5. }

    这样有利于与其他属性进行区分。

    选中列表变色

    蓝色选中样式则需要使用到伪元素:after该写法在实际开发过程中会大量使用

    使用 HTML/CSS 实现 Educoder 顶部导航栏_第5张图片

     
      
    1. 导航1
    2. 导航2
    3. 导航3
    4. 导航4
  • .parent-wrap{
  • height: 60px;
  • width: 500px;
  • display: flex;
  • background: #cccccc;
  • }
  • .parent-wrap > div{
  • position: relative;
  • display: flex;
  • flex: 1;
  • align-items: center;
  • justify-content: center;
  • cursor: pointer;
  • }
  • .nav-text{
  • position: relative;
  • }
  • 如图,我们实现了一个简单的导航,只需要再加一个选中类(实际开发中会通过js动态控制选中类)即可实现效果。

     
      
    1. /*选中类样式,文字颜色改变*/
    2. .active{
    3. color: #459be5;
    4. }
    5. /*底部出现横杠*/
    6. .active:after{
    7. content: '';
    8. position: absolute;
    9. height: 2px;
    10. bottom: -10px;
    11. left: 0;
    12. width: 14px;
    13. background-color: #459be5;
    14. }

    我们只需要给需要加上样式的元素加上该类即可实现效果:

    导航1

    说明:文字居中此处为什么使用flex布局的justify-content: center;align-items: center; 而不使用line-height:60px;text-align:center解释如下 —— 使用line-height垂直居中在文字超过一行的情况下会出现两行文字之间相差60px的问题。

    举个例子:我们将导航1文字加长

    导航1导航1导航1导航1

    运行效果:

    使用 HTML/CSS 实现 Educoder 顶部导航栏_第6张图片

    很明显,第四个导航1文字超出了容器,正是由于使用了line-height:60px导致,使用flex布局居中则可以很好的避免这一问题

    编程要求

    在右侧编辑器中补充代码,使用hover伪类实现鼠标悬停效果,使用:after伪元素实现列表选中效果,具体要求如下:

    1. 鼠标悬停时文字透明度:70%

    2. 使用:after伪元素为第一个菜单文字左下角添加蓝色线条;

    3. 蓝色线条宽度:14px,高度:2px,颜色:#459be5,线条距离文字高度:10px

    4. 当鼠标悬停时任意文字或图标上时,当前项光标显示为一只手。

    
    
    
      
      Educoder
      
      
    
    
    
    

     

    你可能感兴趣的:(css,html,vue.js)