ESP32-Web-Server编程-CSS 基础 2

ESP32-Web-Server编程-CSS 基础 2

概述

如上节所述,可以使用外部 CSS 文件来修饰指定的 HTML 文件。

  • 外部引用 - 使用外部 CSS 文件

    当样式需要被应用到很多页面的时候,外部样式表将是理想的选择。使用外部样式表,就可以通过更改一个文件来改变所有包含该 CSS 文件的 HTML 的外观。在 HTML 文件中使用 href=XXX,来导入对应的 CSS 文件到该文件。就像 C 语言的头文件、或者 python 语言的 import 一样。

    <head>
    <link rel="stylesheet" type="text/css" href="mystyle.css">
    </head>
    

网页内容不复杂时,可以使用内联样式,网页内容复杂的话,最好的方式是通过外部引用CSS文件。

需求及功能解析

与上节 的后台代码类似,本节主要演示如何使用外部 CSS 文件,来让读者了解并体会其基本语法与作用。

如果你是第一次学习该系列的博客,请参考 A 博客来熟悉编程使用的方法。

示例解析

目录结构

├── CMakeLists.txt
├── main
│   ├── CMakeLists.txt
│   └── main.c                 User application
├── components
│   └── fs_image└── index.html└── css└── stylesheet.css
|	└── url_handlers└── url_handlers.c└── ...
└── README.md                  This is the file you are currently reading
  • 目录结构主要包含主目录 main,以及组件目录 components. 与前述章节不同的是,在 components/fs_image/css 目录定义了一个 stylesheet.css 文件。该css 文件定义了一些样式类别:
.box { background-color: rgb(66, 138, 148);}.mygrid { max-width: 800px; margin: 0 auto; display: grid; grid-gap: 2rem; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));}html {font-family: Arial, Helvetica, sans-serif; display: inline-block; text-align: center;}p {font-size: 16px;}

然后在 components/fs_image/index.html 中通过外部引用关键字 link 引入该 css 文件,如此该 css 文件可以作用于该 HTML 中的元素:

<head><title>IOT LAO WANG</title><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="stylesheet" type="text/css" href="stylesheet.css"></head>

读者可以删除或在屏蔽 <link rel="stylesheet" type="text/css" href="stylesheet.css"> 这行代码,对比包含该代码和去掉该部分代码后的异同,增加对这部分内容的理解。

最后在后端代码中为了让浏览器加载到 <link rel="stylesheet" type="text/css" href="stylesheet.css"> 这行代码时客户端浏览器能能正确从 web 服务器接收到对应的 css 文件,因此在 url_handlers/url_handlers.c 中增加对应的 handler 函数css_get_handler()

/* Handler to respond with CSS.* Browsers expect to GET website icon at URI /stylesheet.css.*/
static esp_err_t css_get_handler(httpd_req_t *req)
{extern const unsigned char css_start[] asm("_binary_stylesheet_css_start");extern const unsigned char css_end[]   asm("_binary_stylesheet_css_end");const size_t css_size = (css_end - css_start);httpd_resp_set_type(req, "text/css");httpd_resp_send(req, (const char *)css_start, css_size);return ESP_OK;
}httpd_uri_t httpd_uri_array[URL_HANDLERS_MAX] = {{"/", HTTP_GET, index_html_get_handler, NULL},{"/favicon.ico", HTTP_GET, favicon_get_handler, NULL},{"/stylesheet.css", HTTP_GET, css_get_handler, NULL}, // 浏览器请求时通过该函数发送 CSS 文件
};

示例输出:

在这里插入图片描述

讨论

读者朋友可以自己更改 CSS 文件中的一些属性的值来查看对网页的外观的影响。

总结

1)本节主要演示如何使用外部 CSS 文件,在前端代码 html 中通过 link 标签引用指定的 CSS 文件,然后在后端代码中通过增加发送 CSS 文件的 handler 就可以正确应用外部的 CSS 文件。

资源链接

1)ESP32-Web-Server ESP-IDF系列博客介绍
2)对应示例的 code 链接 (点击直达代码仓库)

3)下一篇:ESP32-Web-Server编程-JS 基础 1

(码字不易感谢点赞或收藏)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/224994.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA进阶之路JVM-2:类加载机制,类的生命周期,类加载过程,类加载时机,类加载器,双亲委派模型,对象创建过程

JVM类加载机制 类加载 ​ 在JVM虚拟机实现规范中&#xff0c;通过ClassLoader类加载把*.class字节码文件&#xff08;文件流&#xff09;加载到内存&#xff0c;并对字节码文件内容进行验证&#xff0c;准备&#xff0c;解析和初始化&#xff0c;最终形成可以被虚拟机直接使用…

猫头虎分享已解决Bug || Environment for Full Errors and Additional Helpful Warnings

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…

【Linux】初识重定向(输入输出)

一切皆文件 这是Linux的设计理念&#xff0c;因为这个理念的存在我们可以使用统一的方法对待不同的东西&#xff0c;&#xff0c;这也是为什么嵌入式之类的会需要Linux&#xff0c;因为用LInux来操纵硬件真的很方便 另外我们下文也会都基于这个理念来命名&#xff0c; 比如&am…

异步爬虫提速实践-在Scrapy中使用Aiohttp/Trio

在构建爬虫系统时&#xff0c;提高爬虫速度是一个关键问题。而使用异步爬虫技术可以显著提升爬取效率。在本文中&#xff0c;我将与大家分享如何在Scrapy中利用Aiohttp或Trio库实现异步爬取&#xff0c;以加快爬虫的速度。让我们开始吧&#xff01; 1. 安装所需的库 首先&…

探究Kafka原理-7.exactly once semantics 和 性能测试

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44…

算法中的时间复杂度,空间复杂度

一、前言 算法&#xff08;Algorithm&#xff09;是指用来操作数据、解决程序问题的一组方法。对于同一个问题&#xff0c;使用不同的算法&#xff0c;也许最终得到的结果是一样的&#xff0c;但在过程中消耗的资源和时间却会有很大的区别 衡量不同算法之间的优劣主要是通过时…

python实现自动刷平台学时

背景 前一阵子有个朋友让我帮给小忙&#xff0c;因为他每学期都要看视频刷学时&#xff0c;一门平均需要刷500分钟&#xff0c;一学期有3-4门需要刷的。 如果是手动刷的话&#xff0c;比较麻烦&#xff0c;能否帮他做成自动化的。搞成功的话请我吃饭。为了这顿饭&#xff0c;咱…

java拦截器,过滤器,监听器的区别

拦截器与过滤器 1&#xff1a;过滤器 过滤器主要作用在请求到达Servlet之前&#xff0c;对请求进行预处理&#xff0c;可以对HTTP请求进行过滤、修改。过滤器通常用于日志记录、字符编码转换、权限检查等任务。过滤器是基于回调函数实现的&#xff0c;重写doFilter()方法实现过…

校园虚拟化部署与横向扩展统一存储

项目背景 这所隶属教育部直属重点大学&#xff0c;学校设有11个学科体系&#xff0c;现有本硕博学生共29000余人&#xff0c;为积极响应“中国教育现代化2023战略部署”&#xff0c;校方制定教育信息化2.0发展目标&#xff0c;通过平台融合&#xff0c;数据驱动、技术赋能等措…

7 .png带透明像素和无损压缩的图片文件格式解析

7 .png带透明像素和无损压缩的图片文件格式解析 作者将狼才鲸日期2023-11-28 1&#xff09;简述 PNG图片协议格式&#xff1a; 有调色板、可以先显示轮廓再显示全部、支持透明半透明、无损压缩 .png文件格式&#xff1a; 署名 数据块{关键数据块 辅助数据块}每个数据块{长…

提高乡村信息化程度,构建完善乡村信息治理体系

提高乡村信息化程度&#xff0c;构建完善乡村信息治理体系 现阶段乡村治理面临的“信息化程度低”、“数字化建设功能易用性低”、“乡村信息治理手段缺失”、“安全防控水平和资源有限”等问题&#xff0c;对于乡村发展产生了重要影响。为了解决这些问题&#xff0c;需要积极推…

python操作Mysql学习

文章目录 版权声明准备&#xff1a;MYSQL数据库数据库简介数据库分类数据库管理系统SQL语句关系型数据库中核心元素MySQL环境搭建Mysql数据类型数据完整性和约束MYSql基本操作登录和退出数据库命令数据库基本操作命令数据表基本操作命令数据表结构修改命令表数据操作命令Mysql查…