• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

youyou-dev

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

前端Web开发(HTML+CSS)

JavaWeb

目录
  • JavaWeb
    • 1、什么是Web
    • 2、Web网站结构
    • 3、初识Web前端
      • 3.1、Web标准
    • 4、HTML
      • 4.1、快速入门
      • 4.2、前端开发工具
      • 4.3、常见标签&样式
    • 5、CSS
      • 5.1、CSS引入方式
      • 5.2、颜色表示方式
      • 5.3、CSS选择器
      • 5.4、央视新闻-正文
        • 5.4.1、正文排版
          • 1、基本实现
          • 2、常见标签
          • 3、路径表示
        • 正文样式
      • 5.5、央视新闻-布局
        • 5.5.1、功能实现
        • 5.5.2、盒子模型
          • 1、介绍
          • 2、代码实现
    • 6、案例
      • 6.1、需求
      • 6.2、代码实现
        • 6.2.1、顶部导航栏
            • 1、基本实现
            • 2、flex布局
        • 6.2.2、搜索表单
            • 1、表单标签
            • 2、表单项标签
            • 3、搜索表单实现
        • 6.2.4、表格数据展示
            • 1、基本实现
            • 2、表格标签
        • 6.2.5、底部版权区域
        • 6.2.6、版心居中
    • 总结

1、什么是Web

Web:全球广域网,也称为万维网(www World Wide Web),说白了,Web指的就是能够通过浏览器访问的网站。

比如,我们日常生活中,经常使用的像淘宝、京东、唯品会这类的电商网站。

image

还有像CRM、OA、ERP这类的企业内部的管理系统等等,这些都是Web网站。

image

而我们要想开发这样一个web网站,那首先就得知道web网站的基本结构。

2、Web网站结构

一个web网站,核心呢,是由三个部分组成的,分别是:前端程序、后端程序、数据库。 具体的职责为:

  • 前端程序:负责将数据以好看的样式呈现出来。
  • 后端程序:负责具体的业务逻辑的处理。
  • 数据库:负责数据的存储和管理。

具体的请求访问流程为:

image

  • 当我们在浏览器地址栏,输入url地址之后,一敲回车,此时首先访问到的是服务器中部署的前端程序,而前端程序仅仅负责将数据以好看的样式呈现出来,这个数据并不是在前端页面中写死的。
  • 所以,此时需要在前端程序中,发送请求来请求服务端程序,服务端程序在查询数据库,然后将数据库查询的数据返回给前端。
  • 最终,前端程序再将数据渲染展示在页面中。 而前端程序,浏览器是可以直接解析的,那浏览器解析了前端程序之后,最终就会呈现出一个精美的网页。

3、初识Web前端

主要明确以下三个问题:

1). 网页由哪些部分组成 ?

  • 文字、图片、音频、视频、超链接、表格等等。

2). 我们看到的网页,背后的本质是什么 ?

  • 前端程序员写的前端代码 (备注:在前后端分离的开发模式中)

3). 前端的代码是如何转换成用户眼中的网页的 ?

  • 通过浏览器转化(解析和渲染)成用户看到的网页
  • 浏览器中对代码进行解析和渲染的部分,称为 浏览器内核

而市面上的浏览器非常多,比如:IE、火狐Firefox、苹果safari、欧朋、谷歌Chrome、QQ浏览器、360浏览器等等。 而且我们电脑上安装的浏览器可能都不止一个,有很多。

image

但是呢,需要注意的是,不同的浏览器,内核不同,对于相同的前端代码解析的效果也会存在差异。 那这就会造成一个问题,同一段前端程序,不同浏览器展示出来的效果是不一样的,这个用户体验就很差了。而我们想达到的效果则是,即使用户使用的是不同的浏览器,解析同一段前端代码,最终展示出来的效果都是相同的。

要想达成这样一个目标,我们就需要定义一个统一的标准,然后让各大浏览器厂商都参照这个标准来实现即可。 而这套标准呢,其实早都已经定义好了,那就是我们接下来,要介绍的web标准。

3.1、Web标准

image

image

4、HTML

什么是HTML?

HTML: HyperText Markup Language,超文本标记语言。

  • 超文本:超越了文本的限制,比普通文本更强大。除了文字信息,还可以定义图片、音频、视频等内容。

  • 标记语言:由标签 "<标签名>" 构成的语言

    • HTML标签都是预定义好的 。例如:使用 <h1> 标签展示标题,使用<a>展示超链接,使用<img>展示图片,<video>展示视频。
    • HTML代码直接在浏览器中运行,HTML标签由浏览器解析 。
  • 下面展示的是一段html代码经过浏览器解析,呈现的效果如右图所示:

image

4.1、快速入门

image

具体操作步骤

(1)新建文本文件,后缀名改为 .html,命名为:01. html快速入门.html

创建一个名为HTML的文件夹,然后找到课程资料中的 1.png 文件放到该目录下的img目录中。此时HTML文件夹中内容如下:

image

(2)写HTML的基本骨架,定义标题

html有固定的基本结构

<html>
     <head>
          <title>HTML 快速入门</title>
     </head>
     <body>
                
     </body>
</html>

其中<html>是根标签,<head>和<body>是子标签。

(3)在中编写HTML的核心内容

<html>
<head>
    <title>HTML入门</title>
</head>
<body>
    <h1>Hello cat</h1>
    <img src="image/cat.png" alt="小猫">
</body>
</html>

其中 <h1> 标签是一个一级标题的标签。 <img> 标签是一个图片标签,用来展示图片,而其中的 src 属性是用来指定要展示的图片。

(4)然后选中文件,鼠标右击,选择使用浏览器打开文件

浏览器呈现效果如下:

image

总结

1). HTML页面的基础结构标签

<html>
    <head>
        <title> </title>
    </head>
    <body>
       
    </body>
</html>

<title>中定义标题显示在浏览器的标题位置,<body>中定义的内容会呈现在浏览器的内容区域

2). HTML中的标签特点

  • HTML标签不区分大小写,建议小写
  • HTML标签的属性值,采用单引号、双引号都可以,一般写双引号
  • HTML语法相对比较松散 (建议大家编写HTML标签的时候尽量严谨一些)

4.2、前端开发工具

  • 官网: https://code.visualstudio.com
  • 安装: VsCode安装文档

编程

<!--声明文档的类型为HTML-->
<!DOCTYPE html>
<html lang="en">
<head>
    <!-- 字符集 -->
    <meta charset="UTF-8">
    <!-- 设置网页在移动设备上的显示宽度及缩放比例 -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HTML快速入门</title>
</head>
<body>
    <h1>HTML快速入门</h1>
    <img src="img/1.png">
</body>
</html>

4.3、常见标签&样式

HTML的常见基础标签 及 CSS的基本样式,以 新浪新闻页面 为例,
image

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章</title>
</head>
<body>

  <!-- 定义网页标题, 标题内容: 【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章 -->
  <h1 id="title">【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章</h1>
  
  <!-- 定义一个超链接, 链接地址:https://news.cctv.com/, 链接内容:央视网 -->
  <a href="https://news.cctv.com/" target="_blank">央视网</a>
  2024年05月15日 20:07
  
</body>
</html>

那在上述我们用到的两个标签,一个是标题标签 <h1></h1>,另一个是超链接标题 <a></a>。这两个标签的具体用法如下:

标题标签 h 系列:

11111111111111

11111111111111

11111111111111

11111111111111

11111111111111
11111111111111

效果: h1为一级标题,字体也是最大的 ; h6为六级标题,字体是最小的。

注意: HTML标签是预定义好的,不能随意定义,也就以为着,标题标签就只有这六个,没有

超链接 a 标签:

标签:央视网

属性:

  • href: 指定资源访问的url
  • target: 指定在何处打开资源链接
    • _self: 默认值,在当前页面打开
    • _blank: 在空白页面打开

5、CSS

什么是CSS?

  • CSS: Cascading Style Sheet,层叠样式表,用于控制页面的样式(表现)。

下面展示的是一段 html代码 及 CSS样式 经过浏览器解析,呈现的效果如右图所示:

image

MDN常见标签/样式:https://developer.mozilla.org/zh-CN/

5.1、CSS引入方式

那在HTML的文件中,我们如何来编写CSS样式呢,此时就涉及到CSS的三种引入方式。

具体有3种引入方式,语法如下表格所示:

名称 语法描述 示例
行内样式 在标签内使用style属性,属性值是css属性键值对。 <h1 style="xxx:xxx;">中国新闻网</h1>
内部样式 定义<style>标签,在标签内部定义css样式。 <style> h1 {...} </style>
外部样式 定义<link>标签,通过href属性引入外部css文件 <link rel="stylesheet" href="css/news.css">

对于上述3种引入方式,企业开发的使用情况如下:

  • 行内样式: 会出现大量的代码冗余,不方便后期的维护,所以不常用(常配合JS使用)。
  • 内部样式:通过定义css选择器,让样式作用于当前页面的指定的标签上。(可以写在页面任何位置,但通常约定写在head标签中)
  • 外部样式: html和css实现了完全的分离,企业开发常用方式。

5.2、颜色表示方式

在前端程序开发中,颜色的表示方式常见的有如下三种:

表示方式 属性值 说明 取值
关键字 颜色英文单词 red、green、blue red、green、blue...
rgb表示法 rgb(r, g, b) 红绿蓝三原色,每项取值范围:0-255 rgb(0,0,0)、rgb(255,255,255)、rgb(255,0,0)
rgba表示法 rgba(r, g, b, a) 红绿蓝三原色,a表示透明度,取值:0-1 rgb(0,0,0,0.3)、rgb(255,255,255,0.5)
十六进制表示法 #rrggbb #开头,将数字转换成十六进制表示 #000000、#ff0000、#cccccc,简写:#000、#ccc

设置字体颜色

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章</title>
  <!-- 2. 内部样式 -->
  <style>
    .publish-date {
      color: #b2b2b2;
    }
  </style>
  <!-- 3. 外部样式 -->
  <!-- <link rel="stylesheet" href="css/news.css"> -->
</head>
<body>

  <!-- 定义网页标题, 标题内容: 【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章 -->
  <h1 id="title">【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章</h1>
  
  <!-- 定义一个超链接, 链接地址:https://news.cctv.com/, 链接内容:央视网 -->
  <a href="https://news.cctv.com/" target="_blank">央视网</a>

  <!-- 1. 行内样式 -->
  <!-- <span style="color: #b2b2b2;">2024年05月15日 20:07</span> -->

  <span class="publish-date">2024年05月15日 20:07</span>

</body>
</html>

备注: 要想拾取某一个网页中的颜色,我们可以借助于截图软件的拾色器插件来完成。

5.3、CSS选择器

顾名思义:选择器是选取需设置样式的元素(标签),但是我们根据业务场景不同,选择的标签的需求也是多种多样的,所以选择器有很多种。

选择器通用语法如下:

选择器名   {
    css样式名:css样式值;
    css样式名:css样式值;
}

而我们是做后台开发的,所以对于css选择器,我们只学习常见的这几种:

选择器 写法 示例 示例说明
元素选择器 元素名称 h1 选择页面上所有的<h1>标签
类选择器 .class属性值 .cls 选择页面上所有class属性为cls的标签
id选择器 #id属性值 #hid 选择页面上id属性为hid的标签
分组选择器 选择器1,选择器2 h1,h2 选择页面上所有的<h1>和<h2>标签
属性选择器 元素名称[属性] input[type] 选择页面上有type属性的<input>标签
元素名称[属性名="值"] input[type="text"] 选择页面上type属性为text的<input>标签
后代选择器 元素1元素2 form input 选择<form>标签内的所有<input>标签

那接下来,我们需要将页面上所有的超链接中,默认的下划线效果去除掉。具体的代码实现如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章</title>
  <!-- 2. 内部样式 -->
  <style>
    .publish-date {
      color: #b2b2b2;
    }
    
    /* 设置超链接取消下划线效果 */
    a {
      text-decoration: none;
    }
  </style>
  <!-- 3. 外部样式 -->
  <!-- <link rel="stylesheet" href="css/news.css"> -->
</head>
<body>

  <!-- 定义网页标题, 标题内容: 【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章 -->
  <h1 id="title">【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章</h1>
  
  <!-- 定义一个超链接, 链接地址:https://news.cctv.com/, 链接内容:央视网 -->
  <a href="https://news.cctv.com/" target="_blank">央视网</a>

  <!-- 1. 行内样式 -->
  <!-- <span style="color: #b2b2b2;">2024年05月15日 20:07</span> -->

  <span class="publish-date">2024年05月15日 20:07</span>

</body>
</html>

5.4、央视新闻-正文

在原始的央视新闻页面中,我们可以看到有视频,有文字,有图片,内容还是非常丰富的。

image

5.4.1、正文排版

1、基本实现

浏览器在解析渲染页面的时候,是从上往下解析渲染的,那接下来,我们就可以从上往下来布局这个页面。

正文排版之后,页面的代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章</title>
  <!-- 2. 内部样式 -->
  <style>
    .publish-date {
      color: #b2b2b2;
    }
    
    /* 设置超链接取消下划线效果 */
    a {
      text-decoration: none;
    }
  </style>
</head>
<body>
      
    <!-- 定义网页标题, 标题内容: 【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章 -->
    <h1 id="title">【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章</h1>
    
    <!-- 定义一个超链接, 链接地址:https://news.cctv.com/, 链接内容:央视网 -->
    <a href="https://news.cctv.com/" target="_blank">央视网</a>

    <span class="publish-date">2024年05月15日 20:07</span>
    <br>
    <br>

    <!-- 定义一个视频, video/news.mp4 -->
    <video src="video/news.mp4" controls  width="80%"></video>
    <p>
      央视网消息(新闻联播):作为共抓长江大保护的标志性工程,长江十年禁渔今年进入第四年。***指出,长江禁渔是为全局计、为子孙谋的重要决策。牢记***嘱托,沿江省市持续推进长江水生生物多样性恢复,努力保障退捕渔民就业生活。这段时间,记者深入长江两岸,记录下禁渔工作取得的重要阶段性成效和广大干部群众坚定不移推进长江十年禁渔的扎实行动。
    </p>
    <p>
      行走在长江沿线,科研人员发现很多可喜现象。
    </p>
    <!-- 定义一张图片, img/1.gif -->
    <img src="img/1.gif" alt=""  width="100%">
    <p>
      在长江南源,一处小头裸裂尻鱼新的栖息地被发现,鱼的数量大约超3万尾,为水生态保护提供了珍贵数据。
    </p>
    <p>
      在长江中游,追踪显示,人工增殖放流的中华鲟成功入海率已经从45%左右提升至60%以上;鄱阳湖鱼类小型化、低龄化趋势得到遏制,栖息地生存环境得以改善。
    </p>
    <p>
      在长江下游,今年3月起,南京秦淮河入江口首次出现野生中华绒螯蟹大规模洄游现象,种群数量明显增加。
    </p>
    <img src="img/2.jpg" width="100%">
    <p>
      水生生物资源恢复向好,见证了长江十年禁渔三年多来的阶段性成果。
    </p>
    <p>
      实施长江十年禁渔,是以同志为核心的党中央从中华民族长远利益出发作出的重要决策。党的十八大以来,***多次深入长江沿线考察调研,详细了解长江十年禁渔的实施情况,他指出,要坚定推进长江十年禁渔,巩固好已经取得的成果。
    </p>
    <img src="img/3.jpg" width="100%">
    <p>
      按照部署,自2021年1月1日起,在长江干流、大型通江湖泊、重要支流和长江口部分海域实行为期十年的禁渔,常年禁止天然渔业资源的生产性捕捞。禁渔三年多来,相关评估显示,长江干流和鄱阳湖、洞庭湖水生生物完整性指数由禁渔前最差的“无鱼”提升了两个等级。2022年,长江江豚数量达到1249头,实现历史性止跌回升。长江干流水质连续4年全线保持Ⅱ类。
    </p>
    <p>
      实施长江十年禁渔,解决好渔民上岸后的生产生活问题,禁渔才有稳定扎实的社会基础。
    </p>
    <img src="img/4.jpg" width="100%">
    <p>
      安徽退捕转产的3万多名渔民,在政府的引导下接受就业培训。在当涂县,免费学习养殖技术,养殖生态螃蟹成了退捕渔民的新选择。
    </p>
    <p>
      在拥有洞庭湖超六成水域的湖南岳阳,政府帮扶上岸渔民建起养殖场,发展风干鱼产业,还带领他们学习直播带货,拓宽销路。
    </p>
    <p>
      在渔民退捕上岸的鄱阳湖棠荫岛,当地在继续保护好生态的前提下,正探索规划利用独特的自然资源发展旅游产业。禁渔三年多来,有关部门对23.1万退捕渔民逐一建档立卡,多渠道提升就业、社保水平。
    </p>
    <img src="img/5.jpg" width="100%">
    <p>
      长江十年禁渔实施以来,沿江省市合力攻坚、久久为功,长江大保护不断向纵深推进,持续巩固禁渔成果。下一步,沿江省市还将加强水生生物重要栖息地修复,建立退捕渔民动态精准帮扶服务,完善跨区域、跨部门执法合作机制,确保一江清水绵延后世、惠泽人民。
    </p>
    <img src="img/6.jpg">
  
</body>
</html>

注意:在使用类似于通义零码这类的AI辅助工具时,如果存在一些敏感数据,比如:政治、宗教、信仰等。

2、常见标签

那在上述的正文排版中,用到了如下标签,接下来详解介绍一下:

image

在HTML页面中,我们在代码中录入空格、<、> 这些符号的时候,是没有对应的效果的,因为浏览器并不能准确的识别,此时,我们就需要通过字符实体来表示空格,<, > 。常见符号的字符实体如下:

image

3、路径表示

在引入图片、视频、音频、css等内容时,我们需要指定文件的路径,而在前端开发中,路径的书写形式分为两类:

  • 绝对路径:
    • 绝对磁盘路径: <img src="C:\Users\Administrator\Desktop\HTML\img\logo.png">
    • 绝对网络路径: <img src="``https://i2.sinaimg.cn/dy/deco/2012/0613/yocc20120613img01/news_logo.png``">
  • 相对路径:

​ ./ : 当前目录 , ./ 可以省略的

​ ../: 上一级目录

  1. 正文样式

正文的基本排版有了之后,接下来,我们要处理的是正文部分的样式。

image

具体的css样式如下:

    /* 设置段落首行缩进 */
    p {
      text-indent: 2em; /* 首行缩进2em */
      line-height: 2; /* 行高2倍 */
    }

5.5、央视新闻-布局

5.5.1、功能实现

完成了标签及正文部分的排版制作,以及样式处理之后,那最后一步,我们就要来完成页面整体布局的设置了。 从原始的央视新闻页面中,我们可以看到,新闻页面是出于整个版面的正中心的,那这种呢,在布局中也称为 版心居中。
image

这个功能,我们依然可以通过AI,轻而易举的实现。具体的提示词如下:

通过css使如下新闻网页的整体内容,占用整个页面宽度的70%,并且横向居中展示。具体的网页内容如下:.....

最终网页代码如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章</title>
  <style>
    .publish-date {
      color: #b2b2b2;
    }
    
    /* 设置超链接取消下划线效果 */
    a {
      text-decoration: none;
    }

    /* 设置段落首行缩进 */
    p {
      text-indent: 2em; /* 首行缩进2em */
      line-height: 2; /* 行高2倍 */
    }

    /* 新增样式 */
    .news-content {
      width: 70%; /* 宽度占70% */
      margin: 0 auto; /* 横向居中 */
    }
  </style>
</head>
<body>
    <!-- 包裹新闻内容的容器 -->
    <div class="news-content">
      <!-- 定义网页标题, 标题内容: 【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章 -->
      <h1 id="title">【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章</h1>
      
      <!-- 定义一个超链接, 链接地址:https://news.cctv.com/, 链接内容:央视网 -->
      <a href="https://news.cctv.com/" target="_blank" >央视网</a>

      <span class="publish-date">2024年05月15日 20:07</span>
      <br>
      <br>

      <!-- 定义一个视频, video/news.mp4 -->
      <video src="video/news.mp4" controls width="100%"></video>
      <p>
        <strong>央视网消息</strong>(新闻联播):作为共抓长江大保护的标志性工程,长江十年禁渔今年进入第四年。***指出,长江禁渔是为全局计、为子孙谋的重要决策。牢记***嘱托,沿江省市持续推进长江水生生物多样性恢复,努力保障退捕渔民就业生活。这段时间,记者深入长江两岸,记录下禁渔工作取得的重要阶段性成效和广大干部群众坚定不移推进长江十年禁渔的扎实行动。
      </p>
      <p>
        行走在长江沿线,科研人员发现很多可喜现象。
      </p>
      <!-- 定义一张图片, img/1.gif -->
      <img src="img/1.gif" alt=""  width="100%">
      <p>
        在长江南源,一处小头裸裂尻鱼新的栖息地被发现,鱼的数量大约超3万尾,为水生态保护提供了珍贵数据。
      </p>
      <p>
        在长江中游,追踪显示,人工增殖放流的中华鲟成功入海率已经从45%左右提升至60%以上;鄱阳湖鱼类小型化、低龄化趋势得到遏制,栖息地生存环境得以改善。
      </p>
      <p>
        在长江下游,今年3月起,南京秦淮河入江口首次出现野生中华绒螯蟹大规模洄游现象,种群数量明显增加。
      </p>
      <img src="img/2.jpg"  width="100%">
      <p>
        水生生物资源恢复向好,见证了长江十年禁渔三年多来的阶段性成果。
      </p>
      <p>
        实施长江十年禁渔,是以同志为核心的党中央从中华民族长远利益出发作出的重要决策。党的十八大以来,***多次深入长江沿线考察调研,详细了解长江十年禁渔的实施情况,他指出,要坚定推进长江十年禁渔,巩固好已经取得的成果。
      </p>
      <img src="img/3.jpg"  width="100%">
      <p>
        按照部署,自2021年1月1日起,在长江干流、大型通江湖泊、重要支流和长江口部分海域实行为期十年的禁渔,常年禁止天然渔业资源的生产性捕捞。禁渔三年多来,相关评估显示,长江干流和鄱阳湖、洞庭湖水生生物完整性指数由禁渔前最差的“无鱼”提升了两个等级。2022年,长江江豚数量达到1249头,实现历史性止跌回升。长江干流水质连续4年全线保持Ⅱ类。
      </p>
      <p>
        实施长江十年禁渔,解决好渔民上岸后的生产生活问题,禁渔才有稳定扎实的社会基础。
      </p>
      <img src="img/4.jpg"  width="100%">
      <p>
        安徽退捕转产的3万多名渔民,在政府的引导下接受就业培训。在当涂县,免费学习养殖技术,养殖生态螃蟹成了退捕渔民的新选择。
      </p>
      <p>
        在拥有洞庭湖超六成水域的湖南岳阳,政府帮扶上岸渔民建起养殖场,发展风干鱼产业,还带领他们学习直播带货,拓宽销路。
      </p>
      <p>
        在渔民退捕上岸的鄱阳湖棠荫岛,当地在继续保护好生态的前提下,正探索规划利用独特的自然资源发展旅游产业。禁渔三年多来,有关部门对23.1万退捕渔民逐一建档立卡,多渠道提升就业、社保水平。
      </p>
      <img src="img/5.jpg"  width="100%">
      <p>
        长江十年禁渔实施以来,沿江省市合力攻坚、久久为功,长江大保护不断向纵深推进,持续巩固禁渔成果。下一步,沿江省市还将加强水生生物重要栖息地修复,建立退捕渔民动态精准帮扶服务,完善跨区域、跨部门执法合作机制,确保一江清水绵延后世、惠泽人民。
      </p>
      <img src="img/6.jpg" >
    </div>
</body>
</html>

上述代码,最终经过浏览器的解析渲染之后,效果如下:
image

5.5.2、盒子模型

1、介绍
  • 盒子:页面中所有的元素(标签),都可以看做是一个 盒子,由盒子将页面中的元素包含在一个矩形区域内,通过盒子的视角更方便的进行页面布局。
  • 盒子模型组成:内容区域(content)、内边距区域(padding)、边框区域(border)、外边距区域(margin)。
    image

CSS盒子模型,其实和日常生活中的包装盒是非常类似的,就比如:
image

盒子的大小,其实就包括三个部分: border、padding、content,而margin外边距是不包括在盒子之内的。

(1)布局标签

  • 布局标签:实际开发网页中,会大量频繁的使用 div 和 span 这两个没有语义的布局标签。

  • 标签:<div> <span>

  • 特点:

  • <div>标签:

    • 一行只显示一个(独占一行)
    • 宽度默认是父元素的宽度,高度默认由内容撑开
    • 可以设置宽高(width、height)
  • <span>标签:

    • 一行可以显示多个
    • 宽度和高度默认由内容撑开
    • 不可以设置宽高(width、height)
  • 测试:

<body>
    <div>
        A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A 
    </div>
    <div>
        A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A 
    </div>

    <span>
        A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A 
    </span>
    <span>
        A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A 
    </span>
</body>

浏览器打开后的效果:

1). div会独占一行,默认宽度为父元素 body 的宽度。可以设置宽高(width、height)
image

2). span一行会显示多个,用来组合行内元素,默认宽度为内容撑开的宽度。不可以设置宽高(width、height)
image

2、代码实现

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>盒子模型</title>
    <style>
        div {
            width: 200px;  /* 宽度 */
            height: 200px;  /* 高度 */
            box-sizing: border-box; /* 指定width height为盒子的高宽 */
            background-color: aquamarine; /* 背景色 */
            
            padding: 20px 20px 20px 20px; /* 内边距, 上 右 下 左 , 边距都一行, 可以简写: padding: 20px;*/ 
            border: 10px solid red; /* 边框, 宽度 线条类型 颜色 */
            margin: 30px 30px 30px 30px; /* 外边距, 上 右 下 左 , 边距都一行, 可以简写: margin: 30px; */
        }
    </style>
</head>

<body>
        
    <div>
        A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A 
    </div>
    
</body>
</html>

代码编写好了, 可以通过浏览器打开该页面, 通过开发者工具,我们就可以看到盒子的大小 , 以及盒子各个组成部分(内容、内边距、边框、外边距):
image

我们也可以,通过浏览器的开发者工具,清晰的看到这个盒子,以及每一个部分的大小:
image

备注:

  • 上述的padding、margin属性值,可以是4个值、也可以是两个值、也可以是一个值,具体的含义如下:
  • padding``: 20px 20px 20px 20px; -------> 表示上、右、下、左都是20px;
  • padding: 20px 10px; ----------------------> 表示上下是20px,左右是10px;
  • padding: 20px; -----------------------------> 表示上、右、下、左都是20px;

6、案例

6.1、需求

通过一个央视新闻页面的制作,大家已经熟悉了HTML中的常见标签及CSS中基础样式的写法及作用。 那接下来呢,我们就要通过一个案例,来加深大家对于这些标签和样式的掌握和使用,那么在完成这个案例的过程中呢,我们依然可以直接基于AI来辅助我们快速实现。

需求:参照Tlias智能学习辅助系统,完成员工管理页面的制作。

产品经理制作的页面原型如下:
image

6.2、代码实现

6.2.1、顶部导航栏

1、基本实现

原型效果:
image

提示词(prompt):

你是一名前端开发工程师,帮我生成一个HTML页面,页面整体有4个部分组成,先来实现第一个部分:

  1. 顶栏

内容:包含左侧的标题“Tlias智能学习辅助系统”,字体需加大加粗,以突出显示;右侧则放置“退出登录”文字链接。

布局:确保标题与退出登录文本位于同一行内,分别左对齐与右对齐 。

页码代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tlias智能学习辅助系统</title>
    <style>
      body {
        margin: 0;
      }

      /* 顶栏样式 */
      .header {
          display: flex;
          justify-content: space-between;
          align-items: center;
          background-color: #f1f1f1;
          padding: 10px 20px;
          box-shadow: 0 2px 5px rgba(0,0,0,0.1);
      }
      
      /* 加大加粗标题 */
      .header h1 {
          margin: 0;
          font-size: 24px;
          font-weight: bold;
      }

      /* 文本链接样式 */
      .header a {
          text-decoration: none;
          color: #333;
          font-size: 16px;
      }
    </style>
</head>
<body>
    <!-- 顶栏 -->
    <div class="header">
        <h1>Tlias智能学习辅助系统</h1>
        <a href="#">退出登录</a>
    </div>

    <!-- 其他部分可以在这里添加 -->
</body>
</html>

页面展示效果如下:
image

2、flex布局

那在上述的案例代码中,其实我们用到了一种布局模式,叫 flex布局。

  • flex是flexible Box的缩写,意为"弹性布局"。采用flex布局的元素,称为Flex容器(container),它的所有子元素自动成为容器成员,称为Flex项目(item)。
  • 通过给父容器添加flex属性,来控制子元素的位置和排列方式。
    image

测试代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    #container {
      display: flex;
      /* justify-content: space-between; */ /* 先两边贴边,再平分剩余空间 */
      /* justify-content: flex-start;*/ /* 从头开始排列  */
      /* justify-content: flex-end; */ /* 从尾开始排列 */
      /* justify-content: center; */ /* 居中排列 */
      /* justify-content: space-around; */ /* 两边留白,中间平分,平分剩余空间 */
      flex-direction: row;
      justify-content: space-between;
      background-color: #aeea6a;
      width: 400px;
      height: 300px;
    }

    #container div {
      background-color: #e866ef;
      width: 100px;
      height: 50px; 
    }
  </style>
</head>
<body>
  <div id="container">
    <div>Flex Item</div>
    <div>Flex Item</div>
    <div>Flex Item</div>
  </div>
</body>
</html>
  • flex布局相关的CSS样式:

image

如果主轴设置为row,其实就是横向布局。 主轴设置为column,其实就是纵向布局。
image

6.2.2、搜索表单

那接下来,我们要完成的是第二个部分,也就是搜索栏的制作。 页面原型展示如下:
image

那这里呢,需要用到HTML中的表单。 那接下来,我们先来介绍一下表单标签,然后再来实现搜索表单栏的制作。

1、表单标签

那表单呢,在我们日常的上网的过程中,基本上每天都会遇到。比如,我们经常在访问网站时,出现的登录页面、注册页面、个人信息提交页面,其实都是一个一个的表单 。 当我们在这些表单中录入数据之后,一点击 "提交",就会将表单中我们填写的数据采集到,并提交, 那其实这个数据呢,一般会提交到服务端,最终保存在数据库中 (后面的课程中会讲到)。
image
image

那其实,上述的整个窗口是一个表单,而表单是一项一项的,这个我们称为表单项 或 表单元素。

  • 表单场景: 表单就是在网页中负责数据采集功能的,如:注册、登录的表单。
  • 表单标签: <form>
  • 表单属性:
    • action: 规定表单提交时,向何处发送表单数据,表单提交的URL。
    • method: 规定用于发送表单数据的方式,常见为: GET、POST。
      • GET:表单数据是拼接在url后面的, 如: xxxxxxxxxxx?username=Tom&age=12,url中能携带的表单数据大小是有限制的。
      • POST: 表单数据是在请求体(消息体)中携带的,大小没有限制。
  • 表单项标签: 不同类型的input元素、下拉列表、文本域等。
    • input: 定义表单项,通过type属性控制输入形式
    • select: 定义下拉列表
    • textarea: 定义文本域

演示:

1). GET方式提交的表单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HTML-表单</title>
</head>
<body>
    <!-- 
    form表单属性: 
        action: 表单提交的url, 往何处提交数据 . 如果不指定, 默认提交到当前页面
        method: 表单的提交方式 .
            get: 在url后面拼接表单数据, 比如: ?username=Tom&age=12 , url长度有限制 . 默认值
            post: 在消息体(请求体)中传递的, 参数大小无限制的.
    -->   
        
    <form action="" method="get">
        用户名: <input type="text" name="username">
        年龄: <input type="text" name="age">

        <input type="submit" value="提交">
    </form>
        
</body>
</html>

表单编写完毕之后,通过浏览器打开此表单,然后再表单项中录入值之后,点击提交,我们会看到表单的数据在url后面提交到服务端,格式为:?username=Tom&age=12。
image

2). POST方式提交表单

将上述的表单提交方式由get,改为post

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HTML-表单</title>
</head>
<body>
    <!-- 
    form表单属性: 
        action: 表单提交的url, 往何处提交数据 . 如果不指定, 默认提交到当前页面
        method: 表单的提交方式 .
            get: 在url后面拼接表单数据, 比如: ?username=Tom&age=12 , url长度有限制 . 默认值
            post: 在消息体(请求体)中传递的, 参数大小无限制的.
    -->   
        
    <form action="" method="post">
        用户名: <input type="text" name="username">
        年龄: <input type="text" name="age">

        <input type="submit" value="提交">
    </form>
        
</body>
</html>

表单编写完毕之后,通过浏览器打开此表单,然后再表单项中录入值之后,点击提交,我们会看到表单的数据在url后面提交到服务端,格式为:?username=Tom&age=12。
image

注意事项:

表单中的所有表单项,要想能够正常的采集数据,在提交的时候能提交到服务端,表单项必须指定name属性。 否则,无法提交该表单项。

用户名: <input type="text" name="username">
2、表单项标签

在一个表单中,可以存在很多的表单项,而虽然表单项的形式各式各样,但是表单项的标签其实就只有三个,分别是:

  • <input>: 表单项 , 通过type属性控制输入形式。

image

  • <select>: 定义下拉列表, <option> 定义列表项
  • <textarea>: 文本域

演示:

创建一个新的表单项的html文件,具体内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HTML-表单项标签</title>
</head>
<body>

<!-- value: 表单项提交的值 -->
<form action="/save" method="post">
     姓名: <input type="text" name="name"> <br><br>

     密码: <input type="password" name="password"> <br><br> 

     性别: <input type="radio" name="gender" value="1"> 男
          <label><input type="radio" name="gender" value="2"> 女 </label> <br><br>
     
     爱好: <label><input type="checkbox" name="hobby" value="java"> java </label>
          <label><input type="checkbox" name="hobby" value="game"> game </label>
          <label><input type="checkbox" name="hobby" value="sing"> sing </label> <br><br>
     
     图像: <input type="file" name="image">  <br><br>

     生日: <input type="date" name="birthday"> <br><br>

     时间: <input type="time" name="time"> <br><br>

     日期时间: <input type="datetime-local" name="datetime"> <br><br>

     学历: <select name="degree">
               <option value="">----------- 请选择 -----------</option>
               <option value="1">大专</option>
               <option value="2">本科</option>
               <option value="3">硕士</option>
               <option value="4">博士</option>
          </select>  <br><br>

     描述: <textarea name="description" cols="30" rows="10"></textarea>  <br><br>
     
     <input type="hidden" name="id" value="1">

     <!-- 表单常见按钮 -->
     <input type="button" value="按钮">
     <input type="reset" value="重置"> 
     <input type="submit" value="提交">   
     <br>
</form>

</body>
</html>

通过浏览器打开上述的表单项html文件,最终展示出的表单信息如下:
image

而对于<input type="hidden">,是一个隐藏域,在表单中并不会显示出来,但是在提交表单的时候,是会提交到服务端的。 接下来,我们就点击提交按钮,来提交当前表单,看看提交的数据:
image

3、搜索表单实现

那基本的表单标签和表单项标签,讲解完毕后,接下来呢,我们就来完成搜索表单的实现,同样,我们可以借助于AI帮我们完成对应的页面布局。

提示词(prompt):

再继续帮我生成第二个部分: 2. 搜索表单区域

组成:包括三个输入控件和两个操作按钮。输入控件具体为:姓名(文本输入框)、性别(下拉选择,选项包括 男/女, 默认为空)、职位(下拉选择,选项包括班主任、讲师、学工主管、教研主管、咨询师, 默认为空)。

按钮:“查询”与“清空”按钮,用于提交表单或重置表单项 。

布局:所有表单项及按钮需水平排列于一行 ,确保美观大气 。

代码实现如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tlias智能学习辅助系统</title>
    <style>
      body {
        margin: 0;
      }

      /* 顶栏样式 */
      .header {
          display: flex;
          justify-content: space-between;
          align-items: center;
          background-color: #f1f1f1;
          padding: 10px 20px;
          box-shadow: 0 2px 5px rgba(0,0,0,0.1);
      }
      
      /* 加大加粗标题 */
      .header h1 {
          margin: 0;
          font-size: 24px;
          font-weight: bold;
      }

      /* 文本链接样式 */
      .header a {
          text-decoration: none;
          color: #333;
          font-size: 16px;
      }

      /* 搜索表单区域 */
      .search-form {
          display: flex;
          align-items: center;
          padding: 20px;
          background-color: #f9f9f9;
      }

      /* 表单控件样式 */
      .search-form input[type="text"], .search-form select {
          margin-right: 10px;
          padding: 5px 10px;
          border: 1px solid #ccc;
          border-radius: 4px;
          width: 200px;
      }

      /* 按钮样式 */
      .search-form button {
          padding: 5px 15px;
          margin-left: 10px;
          background-color: #007bff;
          color: white;
          border: none;
          border-radius: 4px;
          cursor: pointer;
      }

      /* 清空按钮样式 */
      .search-form button.clear {
          background-color: #6c757d;
      }
    </style>
</head>
<body>
    <!-- 顶栏 -->
    <div class="header">
        <h1>Tlias智能学习辅助系统</h1>
        <a href="#">退出登录</a>
    </div>

    <!-- 搜索表单区域 -->
    <form class="search-form">
      <input type="text" name="name" placeholder="姓名" />
      <select name="gender">
          <option value="">性别</option>
          <option value="1">男</option>
          <option value="2">女</option>
      </select>
      <select name="job">
          <option value="">职位</option>
          <option value="1">班主任</option>
          <option value="2">讲师</option>
          <option value="3">学工主管</option>
          <option value="4">教研主管</option>
          <option value="5">咨询师</option>
      </select>
      <button type="submit">查询</button>
      <button type="reset" class="clear">清空</button>
    </form>

</body>
</html>

浏览器呈现效果为:
image

6.2.4、表格数据展示

1、基本实现

页面效果如下:
image

提示词(prompt):

再继续帮我生成第三个部分: 3. 表格展示区

表格结构:展示列包括姓名、性别(显示男/女)、头像(小图标展示)、职位(显示班主任/讲师/学工主管/教研主管/咨询师)、入职日期、最后操作时间、操作(里包含两个按钮 编辑 与 删除)。

数据模拟:基于《笑傲江湖》小说人物生成4条虚拟数据,每条数据应包含上述所有列的信息,以体现实际应用场景 。

样式:可适当调整表格样式,确保美观大气。

代码实现为:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tlias智能学习辅助系统</title>
    <style>
      body {
        margin: 0;
      }

      /* 顶栏样式 */
      .header {
          display: flex;
          justify-content: space-between;
          align-items: center;
          background-color: #f1f1f1;
          padding: 10px 20px;
          box-shadow: 0 2px 5px rgba(0,0,0,0.1);
      }
      
      /* 加大加粗标题 */
      .header h1 {
          margin: 0;
          font-size: 24px;
          font-weight: bold;
      }

      /* 文本链接样式 */
      .header a {
          text-decoration: none;
          color: #333;
          font-size: 16px;
      }

      /* 搜索表单区域 */
      .search-form {
          display: flex;
          align-items: center;
          padding: 20px;
          background-color: #f9f9f9;
      }

      /* 表单控件样式 */
      .search-form input[type="text"], .search-form select {
          margin-right: 10px;
          padding: 5px 10px;
          border: 1px solid #ccc;
          border-radius: 4px;
          width: 200px;
      }

      /* 按钮样式 */
      .search-form button {
          padding: 5px 15px;
          margin-left: 10px;
          background-color: #007bff;
          color: white;
          border: none;
          border-radius: 4px;
          cursor: pointer;
      }

      /* 清空按钮样式 */
      .search-form button.clear {
        background-color: #6c757d;
      }

      .table {
         min-width: 100%; 
         border-collapse: collapse;
         margin: 0 20px;
      }

      /* 设置表格单元格边框 */
      .table td, .table th { 
        border: 1px solid #ddd; 
        padding: 8px; 
        text-align: center;
      }
      
      .avatar { 
        width: 50px; 
        height: 50px; 
        object-fit: cover; 
        border-radius: 50%; 
      }

    </style>
</head>
<body>
    <!-- 顶栏 -->
    <div class="header">
        <h1>Tlias智能学习辅助系统</h1>
        <a href="#">退出登录</a>
    </div>

    <!-- 搜索表单区域 -->
    <form class="search-form" action="#" method="post">
      <input type="text" name="name" placeholder="姓名" />
      <select name="gender">
          <option value="">性别</option>
          <option value="1">男</option>
          <option value="2">女</option>
      </select>
      <select name="job">
          <option value="">职位</option>
          <option value="1">班主任</option>
          <option value="2">讲师</option>
          <option value="3">学工主管</option>
          <option value="4">教研主管</option>
          <option value="5">咨询师</option>
      </select>
      <button type="submit">查询</button>
      <button type="reset" class="clear">清空</button>
    </form>

    <table class="table table-striped table-bordered">
      <thead>
          <tr>
              <th>姓名</th>
              <th>性别</th>
              <th>头像</th>
              <th>职位</th>
              <th>入职日期</th>
              <th>最后操作时间</th>
              <th>操作</th>
          </tr>
      </thead>
      <tbody>
          <tr>
              <td>令狐冲</td>
              <td>男</td>
              <td><img src="https://via.placeholder.com/50" alt="令狐冲" class="avatar"></td>
              <td>讲师</td>
              <td>2021-03-15</td>
              <td>2023-07-30T12:00:00Z</td>
              <td class="btn-group">
                  <button>编辑</button>
                  <button>删除</button>
              </td>
          </tr>
          <tr>
              <td>任盈盈</td>
              <td>女</td>
              <td><img src="https://via.placeholder.com/50" alt="任盈盈" class="avatar"></td>
              <td>学工主管</td>
              <td>2020-04-10</td>
              <td>2023-07-29T15:00:00Z</td>
              <td class="btn-group">
                  <button>编辑</button>
                  <button>删除</button>
              </td>
          </tr>
          <tr>
              <td>岳不群</td>
              <td>男</td>
              <td><img src="https://via.placeholder.com/50" alt="岳不群" class="avatar"></td>
              <td>教研主管</td>
              <td>2019-01-01</td>
              <td>2023-07-30T10:00:00Z</td>
              <td class="btn-group">
                  <button>编辑</button>
                  <button>删除</button>
              </td>
          </tr>
          <tr>
              <td>宁中则</td>
              <td>女</td>
              <td><img src="https://via.placeholder.com/50" alt="宁中则" class="avatar"></td>
              <td>班主任</td>
              <td>2018-06-01</td>
              <td>2023-07-29T09:00:00Z</td>
              <td class="btn-group">
                  <button>编辑</button>
                  <button>删除</button>
              </td>
          </tr>
      </tbody>
  </table>

</body>
</html>

页面展示的效果为:
image

2、表格标签

image

6.2.5、底部版权区域

页面原型展示如下:
image

提示词(prompt):

再继续帮我生成第二个部分: 4. 页脚版权区域

内容:第一行显示公司全称“江苏传智播客教育科技股份有限公司”;第二行展示版权信息,“版权所有 Copyright 2006-2024 All Rights Reserved”。

设计:该区域应具有灰色背景,字体颜色为白色,居中对齐,以营造专业且统一的视觉效果 。

页面代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tlias智能学习辅助系统</title>
    <style>
      body {
        margin: 0;
      }

      /* 顶栏样式 */
      .header {
          display: flex;
          justify-content: space-between;
          align-items: center;
          background-color: #f1f1f1;
          padding: 10px 20px;
          box-shadow: 0 2px 5px rgba(0,0,0,0.1);
      }
      
      /* 加大加粗标题 */
      .header h1 {
          margin: 0;
          font-size: 24px;
          font-weight: bold;
      }

      /* 文本链接样式 */
      .header a {
          text-decoration: none;
          color: #333;
          font-size: 16px;
      }

      /* 搜索表单区域 */
      .search-form {
          display: flex;
          align-items: center;
          padding: 20px;
          background-color: #f9f9f9;
      }

      /* 表单控件样式 */
      .search-form input[type="text"], .search-form select {
          margin-right: 10px;
          padding: 5px 10px;
          border: 1px solid #ccc;
          border-radius: 4px;
          width: 200px;
      }

      /* 按钮样式 */
      .search-form button {
          padding: 5px 15px;
          margin-left: 10px;
          background-color: #007bff;
          color: white;
          border: none;
          border-radius: 4px;
          cursor: pointer;
      }

      /* 清空按钮样式 */
      .search-form button.clear {
        background-color: #6c757d;
      }

      .table {
         min-width: 100%; 
         border-collapse: collapse;
         margin: 0 20px;
      }

      /* 设置表格单元格边框 */
      .table td, .table th { 
        border: 1px solid #ddd; 
        padding: 8px; 
        text-align: center;
      }
      
      .avatar { 
        width: 50px; 
        height: 50px; 
        object-fit: cover; 
        border-radius: 50%; 
      }

      /* 页脚版权区域 */
    .footer {
        background-color: #8f8c8c;
        color: white;
        text-align: center;
        padding: 20px 0;
        margin-top: 30px;
    }

    .footer .company-name {
        font-size: 1.1em;
        font-weight: bold;
    }

    .footer .copyright {
        font-size: 0.9em;
    }
    </style>
</head>
<body>
    <!-- 顶栏 -->
    <div class="header">
        <h1>Tlias智能学习辅助系统</h1>
        <a href="#">退出登录</a>
    </div>

    <!-- 搜索表单区域 -->
    <form class="search-form" action="#" method="post">
      <input type="text" name="name" placeholder="姓名" />
      <select name="gender">
          <option value="">性别</option>
          <option value="1">男</option>
          <option value="2">女</option>
      </select>
      <select name="job">
          <option value="">职位</option>
          <option value="1">班主任</option>
          <option value="2">讲师</option>
          <option value="3">学工主管</option>
          <option value="4">教研主管</option>
          <option value="5">咨询师</option>
      </select>
      <button type="submit">查询</button>
      <button type="reset" class="clear">清空</button>
    </form>

    <table class="table table-striped table-bordered">
      <thead>
          <tr>
              <th>姓名</th>
              <th>性别</th>
              <th>头像</th>
              <th>职位</th>
              <th>入职日期</th>
              <th>最后操作时间</th>
              <th>操作</th>
          </tr>
      </thead>
      <tbody>
          <tr>
              <td>令狐冲</td>
              <td>男</td>
              <td><img src="https://via.placeholder.com/50" alt="令狐冲" class="avatar"></td>
              <td>讲师</td>
              <td>2021-03-15</td>
              <td>2023-07-30T12:00:00Z</td>
              <td class="btn-group">
                  <button>编辑</button>
                  <button>删除</button>
              </td>
          </tr>
          <tr>
              <td>任盈盈</td>
              <td>女</td>
              <td><img src="https://via.placeholder.com/50" alt="任盈盈" class="avatar"></td>
              <td>学工主管</td>
              <td>2020-04-10</td>
              <td>2023-07-29T15:00:00Z</td>
              <td class="btn-group">
                  <button>编辑</button>
                  <button>删除</button>
              </td>
          </tr>
          <tr>
              <td>岳不群</td>
              <td>男</td>
              <td><img src="https://via.placeholder.com/50" alt="岳不群" class="avatar"></td>
              <td>教研主管</td>
              <td>2019-01-01</td>
              <td>2023-07-30T10:00:00Z</td>
              <td class="btn-group">
                  <button>编辑</button>
                  <button>删除</button>
              </td>
          </tr>
          <tr>
              <td>宁中则</td>
              <td>女</td>
              <td><img src="https://via.placeholder.com/50" alt="宁中则" class="avatar"></td>
              <td>班主任</td>
              <td>2018-06-01</td>
              <td>2023-07-29T09:00:00Z</td>
              <td class="btn-group">
                  <button>编辑</button>
                  <button>删除</button>
              </td>
          </tr>
      </tbody>
  </table>

  <!-- 页脚版权区域 -->
  <footer class="footer">
    <p class="company-name">江苏传智播客教育科技股份有限公司</p>
    <p class="copyright">版权所有 Copyright 2006-2024 All Rights Reserved</p>
  </footer>

</body>
</html>

页面展示如下:
image

6.2.6、版心居中

这个案例类似于央视新闻页面,页面中的内容,都需要居中显示,所以这里呢,我们就可以使用盒子模型来进行布局。具体代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tlias智能学习辅助系统</title>
    <style>
      body {
        margin: 0;
      }

      /* 顶栏样式 */
      .header {
          display: flex;
          justify-content: space-between;
          align-items: center;
          background-color:  #c2c0c0;
          padding: 10px 20px;
          box-shadow: 0 2px 5px rgba(0,0,0,0.1);
      }
      
      /* 加大加粗标题 */
      .header h1 {
          margin: 0;
          font-size: 24px;
          font-weight: bold;
      }

      /* 文本链接样式 */
      .header a {
          text-decoration: none;
          color: #333;
          font-size: 16px;
      }

      /* 搜索表单区域 */
      .search-form {
          display: flex;
          align-items: center;
          padding: 20px;
          background-color: #f9f9f9;
      }

      /* 表单控件样式 */
      .search-form input[type="text"], .search-form select {
          margin-right: 10px;
          padding: 5px 10px;
          border: 1px solid #ccc;
          border-radius: 4px;
          width: 200px;
      }

      /* 按钮样式 */
      .search-form button {
          padding: 5px 15px;
          margin-left: 10px;
          background-color: #007bff;
          color: white;
          border: none;
          border-radius: 4px;
          cursor: pointer;
      }

      /* 清空按钮样式 */
      .search-form button.clear {
        background-color: #6c757d;
      }

      .table {
         min-width: 100%; 
         border-collapse: collapse;
      }

      /* 设置表格单元格边框 */
      .table td, .table th { 
        border: 1px solid #ddd; 
        padding: 8px; 
        text-align: center;
      }
      
      .avatar { 
        width: 30px; 
        height: 30px; 
        object-fit: cover; 
        border-radius: 50%; 
      }

      /* 页脚版权区域 */
    .footer {
        background-color: #c2c0c0;
        color: white;
        text-align: center;
        padding: 10px 0;
        margin-top: 30px;
    }

    .footer .company-name {
        font-size: 1.1em;
        font-weight: bold;
    }

    .footer .copyright {
        font-size: 0.9em;
    }

    #container {
      width: 80%;
      margin: 0 auto;
    }
    </style>
</head>
<body>
    
  <div id="container">
    <!-- 顶栏 -->
    <div class="header">
      <h1>Tlias智能学习辅助系统</h1>
      <a href="#">退出登录</a>
    </div>

    <!-- 搜索表单区域 -->
    <form class="search-form" action="#" method="post">
      <input type="text" name="name" placeholder="姓名" />
      <select name="gender">
          <option value="">性别</option>
          <option value="male">男</option>
          <option value="female">女</option>
      </select>
      <select name="position">
          <option value="">职位</option>
          <option value="班主任">班主任</option>
          <option value="讲师">讲师</option>
          <option value="学工主管">学工主管</option>
          <option value="教研主管">教研主管</option>
          <option value="咨询师">咨询师</option>
      </select>
      <button type="submit">查询</button>
      <button type="reset" class="clear">清空</button>
    </form>

    <table class="table table-striped table-bordered">
      <thead>
          <tr>
              <th>姓名</th>
              <th>性别</th>
              <th>头像</th>
              <th>职位</th>
              <th>入职日期</th>
              <th>最后操作时间</th>
              <th>操作</th>
          </tr>
      </thead>
      <tbody>
          <tr>
              <td>令狐冲</td>
              <td>男</td>
              <td><img src="https://web-framework.oss-cn-hangzhou.aliyuncs.com/2023/1.jpg" alt="令狐冲" class="avatar"></td>
              <td>讲师</td>
              <td>2021-03-15</td>
              <td>2023-07-30T12:00:00Z</td>
              <td class="btn-group">
                  <button>编辑</button>
                  <button>删除</button>
              </td>
          </tr>
          <tr>
              <td>任盈盈</td>
              <td>女</td>
              <td><img src="https://web-framework.oss-cn-hangzhou.aliyuncs.com/2023/1.jpg" alt="任盈盈" class="avatar"></td>
              <td>学工主管</td>
              <td>2020-04-10</td>
              <td>2023-07-29T15:00:00Z</td>
              <td class="btn-group">
                  <button>编辑</button>
                  <button>删除</button>
              </td>
          </tr>
          <tr>
              <td>岳不群</td>
              <td>男</td>
              <td><img src="https://web-framework.oss-cn-hangzhou.aliyuncs.com/2023/1.jpg" alt="岳不群" class="avatar"></td>
              <td>教研主管</td>
              <td>2019-01-01</td>
              <td>2023-07-30T10:00:00Z</td>
              <td class="btn-group">
                  <button>编辑</button>
                  <button>删除</button>
              </td>
          </tr>
          <tr>
              <td>宁中则</td>
              <td>女</td>
              <td><img src="https://web-framework.oss-cn-hangzhou.aliyuncs.com/2023/1.jpg" alt="宁中则" class="avatar"></td>
              <td>班主任</td>
              <td>2018-06-01</td>
              <td>2023-07-29T09:00:00Z</td>
              <td class="btn-group">
                  <button>编辑</button>
                  <button>删除</button>
              </td>
          </tr>
      </tbody>
    </table>

    <!-- 页脚版权区域 -->
    <footer class="footer">
      <p class="company-name">江苏传智播客教育科技股份有限公司</p>
      <p class="copyright">版权所有 Copyright 2006-2024 All Rights Reserved</p>
    </footer>

  </div>

</body>
</html>

页面效果如下:
image

总结

image
image

以上学习内容来自黑马程序员
视频链接BV1yGydYEE3H

posted on 2026-03-26 19:44  U~U  阅读(6)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3