基于HTML5和CSS3搭建一个Web网页(二)

倘若代码中有任何问题或疑问,欢迎留言交流~

网页描述

创建一个包含导航栏、主内容区域和页脚的响应式网页。

需求:

  1. 导航栏:
    在页面顶部创建一个导航栏,包含首页、关于我们、服务和联系我们等链接。
    设置导航栏样式,包括字体、颜色和背景颜色等。
    在滚动页面时,导航栏应始终固定在顶部。
  2. 主内容区域:
    包含介绍性文本和至少两张图片。
    对文本和图片应用样式,例如字体样式、对齐方式等。
  3. 页脚:
    包含版权信息和日期,并进行相应的样式设计.
  4. 响应式布局:
    当在不同大小的设备(如手机、平板电脑、笔记本电脑等)上查看时,网页应该具有很好的可读性和易用性。
    提示:
    使用HTML5的新元素,如header、footer、nav、section、article等进行布局。
    使用CSS3的新特性,如渐变、阴影、动画、Flexbox或Grid布局等提升网页的视觉效果。
    使用媒体查询(@media)来设置响应式布局的断点。

在上一篇文字已经解决了导航栏的基本部分,基于HTML5和CSS3搭建一个Web网页(一)。下面继续完成这个网页的开发。

项目结构

基于上一篇得基础,我将导航栏的布局改变了一下,因为发现导航栏只有四个选项,四等分好像有点难看。所以让它们更紧凑了一点,并且改变了一下项目结构。

根据项目要求,可以看到网页分为三个部分

分别是导航栏、主体内容和页脚

因此html主题结构为三个div标签。代码如下:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Web</title>
    <link rel="stylesheet" href="../css/style.css">
    <link rel="stylesheet" href="../css/header.css">
    <link rel="stylesheet" href="../css/main.css">
    <link rel="stylesheet" href="../css/footer.css">
</head>
<body>
    <div class="header"></div>
    <div class="main"></div>
    <div class="footer"></div>
</body>
</html>

项目文件夹结构如图所示:

  1. style.css为主体css样式
  2. header.css、main.css和footer.css依次为导航栏、主体内容和页脚样式

style.css

css 复制代码
/* 去除所有元素默认的margin、padding和border值 */
* {
    margin: 0;
    padding: 0;
    border: 0;
}

/* 初始化html、body宽高100%,占满整个窗口 */
html, body {
    height: 100%;
    width: 100%;
}

/* 设置一个类来清除浮动 */
.clearfix {
    clear: both;
}

这个清除浮动类比较重要,在后边的代码过程中会经常用到。

导航栏的响应式布局

响应式布局里,我们将情况分为五种:

  1. 在屏幕宽度最大为575px(通常是手机设备)
  2. 当屏幕宽度在576px到767px(通常是平板设备)
  3. 当屏幕宽度在768px到991px(通常是小型电脑设备)
  4. 当屏幕宽度在992px到1199px(通常是中型电脑设备)
  5. 当屏幕宽度在1200px以上(通常是大屏电脑设备)
    并且在css文件夹中建立media.css文件,用来存放编写网页的响应式效果。
    基于这五个情况,可以列出media.css文件的框架如下:
css 复制代码
/* 超小屏幕(小于等于575px) */
@media (max-width: 575px) {

}
/* 小屏幕 */
@media (min-width: 576px) {

}
/* 中等屏幕 */
@media (min-width: 768px) {
    
}
/* 大屏幕 */
@media (min-width: 992px) {
    
}
/* 超大屏幕 */
@media (min-width: 1200px) {
    
}

导航栏的响应式布局思路

导航栏的响应式布局思路为,小屏幕时为了观感,用汉堡菜单按钮来代替导航栏的选项。

汉堡菜单在我之前的文章有提过:超小屏幕下的导航栏-汉堡菜单按钮效果

即实现下图中的效果,而其余屏幕则改变导航栏的大小即可。

index.html

那么index.html文件为

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Web</title>
    <link rel="stylesheet" href="../css/style.css">
    <link rel="stylesheet" href="../css/header.css">
    <link rel="stylesheet" href="../css/main.css">
    <link rel="stylesheet" href="../css/footer.css">
    <link rel="stylesheet" href="../css/media.css">
</head>
<body>
    <div class="header">
        <div class="header-main">
            <!-- 借助复选框实现菜单效果 -->
            <input type="checkbox" id="toggle-box"> 
            <!-- 汉堡菜单按钮 -->
            <label for="toggle-box" class="menu">☰</label>
            <ul>
                <li><a href="index.html">  首页  </a></li>
                <li><a href="#">关于我们</a></li>
                <li><a href="#">  服务  </a></li>
                <li><a href="#">联系我们</a></li>
            </ul>
        </div>
        <!-- 清除浮动类 -->
        <div class="clearfix"></div>
    </div>
    <div class="main"></div>
    <div class="footer"></div>
</body>
</html>

header.css

对应header.css文件为:

css 复制代码
.header {
    /* 设置导航栏的大小和颜色 */
    width: 100%;
    background-color: rgba(0,0,0,0.4);

    /* 固定导航栏 */
    position: fixed;
}
.header-main {
    width: 70%;
}
.header .header-main ul {
    /* Flex需要初始化ul标签的宽度 */
    width: 100%;

    /* 导航栏采用Flex布局方式 */
    /* 采用Flex布局的好处:1.使得代码更加简洁 2.不用考虑宽的设置,会自动占满 */
    display: flex;

    /* 去掉列表点 */
    list-style: none;
}
.header .header-main ul  li {
     /* 设置 flex-grow 为 1 保证所有的 li 元素都有相等的宽度,而不论其内容的宽度 */
     flex-grow: 1;
     height: 100%;
     /* 对齐文本到中心 */
     text-align: center;
}
ul li a {
    /* 设置字体大小和颜色,并去掉下划线 */
    font-size: 18px;
    color: black;
    text-decoration: none;

    display: block;
    margin-top: 12px;
    height: 36px;
    border-bottom: 2px rgba(0,0,0,0.4);
}

ul li a:hover {
    color: white;
    height: 34px;
    border-bottom: 2px solid white;
} 
/* 默认情况下隐藏汉堡菜单按钮 */
#toggle-box, .menu {
    display: none;
}

media.css文件

css 复制代码
/* 超小屏幕(小于等于575px) */
@media (max-width: 575px) {
    .header-main {
        width: 94%;
        margin-left: 3%;
        margin-right: 3%;
        /* 美观 */
        min-height: 35px;
        line-height: 35px;
    }
    .header .header-main ul {
        display: none;
    }
    .header-main ul li {
        display: block;
        width: 100%;
        text-align: center;

    }
    .header-main .menu {
        display: block;
        text-align: center;

    }
    #toggle-box:checked~ul {
        display: block;
    }
}
/* 小屏幕 */
@media (min-width: 576px) {
    .header-main {
        width: 80%;
        margin-left: 10%;
        margin-right: 10%;
    }
}

/* 中等屏幕 */
@media (min-width: 768px) {
    .header-main {
        width: 70%;
        margin-left: 15%;
        margin-right: 15%;
    }
}

/* 大屏幕 */
@media (min-width: 992px) {
    .header-main {
        width: 60%;
        margin-left: 20%;
        margin-right: 20%;
    }
}

/* 超大屏幕 */
@media (min-width: 1200px) {
    .header-main {
        width: 50%;
        margin-left: 25%;
        margin-right: 25%;
    }
}
相关推荐
zhanghaisong_201527 分钟前
Caused by: org.attoparser.ParseException:
前端·javascript·html·thymeleaf
Eric_见嘉30 分钟前
真的能无限试(白)用(嫖)cursor 吗?
前端·visual studio code
DK七七1 小时前
多端校园圈子论坛小程序,多个学校同时代理,校园小程序分展示后台管理源码
开发语言·前端·微信小程序·小程序·php
老赵的博客1 小时前
QSS 设置bug
前端·bug·音视频
Chikaoya1 小时前
项目中用户数据获取遇到bug
前端·typescript·vue·bug
南城夏季1 小时前
蓝领招聘二期笔记
前端·javascript·笔记
Huazie1 小时前
来花个几分钟,轻松掌握 Hexo Diversity 主题配置内容
前端·javascript·hexo
NoloveisGod2 小时前
Vue的基础使用
前端·javascript·vue.js
GISer_Jing2 小时前
前端系统设计面试题(二)Javascript\Vue
前端·javascript·vue.js
海上彼尚2 小时前
实现3D热力图
前端·javascript·3d