Web安全基础相关知识2.0(前端三剑客)

HTML

定义

HTML(超文本标记语言)是用来描述网页结构的标记语言。

- 它用标签(带角号标签 例如<body>)来定义页面的各个部分,比如标题、段落、图片、链接等。
- HTML 本身不负责样式和交互,样式由 CSS 负责,交互由 JavaScript 负责。

基本结构

一个标准的 HTML5 页面结构如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>页面标题</title>
</head>
<body>
    <!-- 页面可见内容 -->
    <h1>这是一级标题</h1>
    <p>这是一个段落。</p >
</body>
</html>

CSS

定义

CSS(层叠样式表)是用来描述 HTML 或 XML 文档样式的语言。

它控制网页的外观:颜色、字体、布局、间距、动画等。
CSS 与 HTML 分工明确:HTML 负责结构,CSS 负责样式。

基本语法

CSS 规则由选择器和声明块组成:

选择器 {
    属性名: 属性值;
    属性名: 属性值;
}

示例:

p {
    color: red;
    font-size: 16px;
}

- 选择器 
"p":选中所有 
"<p>" 标签。
- 声明块:
"{}" 内的样式规则。
- 属性名 
"color":要设置的样式属性(文字颜色)。
- 属性值 
"red":属性的具体值。

CSS 的三种引入方式

3.1 内联样式

直接在 HTML 标签中用 
"style" 属性定义样式:

<p>这是蓝色文字</p >

- 优点:优先级最高,适合临时覆盖样式。
- 缺点:难以维护,代码冗余。

3.2 内部样式表

在 
"<head>" 中用 
"<style>" 标签定义样式:

<head>
    <style>
        p {
            color: green;
            font-size: 16px;
        }
    </style>
</head>

- 优点:适合单个页面的样式管理。
- 缺点:多个页面无法共享样式。

3.3 外部样式表

将 CSS 代码保存在独立的 
".css" 文件中,通过 
"<link>" 标签引入:

<head>
    <link rel="stylesheet" href="styles.css">
</head>

styles.css 文件内容:

p {
    color: purple;
    font-size: 18px;
}

- 优点:样式可复用,便于维护和缓存。
- 推荐使用:大型项目必备。

CSS 选择器

选择器用于选中需要应用样式的 HTML 元素。

4.1 基础选择器

- 元素选择器:
"p { ... }"(选中所有 
"<p>" 标签)。
- 类选择器:
".intro { ... }"(选中所有 
"class="intro"" 的元素)。
- ID 选择器:
"#header { ... }"(选中 
"id="header"" 的元素)。
- 通配符选择器:
"* { ... }"(选中所有元素)。

4.2 组合选择器

- 后代选择器:
"div p { ... }"(选中 
"<div>" 内的所有 
"<p>")。
- 子元素选择器:
"div > p { ... }"(选中 
"<div>" 的直接子元素 
"<p>")。
- 相邻兄弟选择器:
"h1 + p { ... }"(选中紧跟在 
"<h1>" 后的第一个 
"<p>")。
- 通用兄弟选择器:
"h1 ~ p { ... }"(选中 
"<h1>" 后的所有同级 
"<p>")。

4.3 伪类与伪元素

- 伪类:
":hover"(鼠标悬停)、
":active"(激活状态)、
":first-child"(第一个子元素)。
- 伪元素:
"::before"(在元素前插入内容)、
"::after"(在元素后插入内容)。

CSS 盒模型

每个 HTML 元素都可以看作一个矩形盒子,由四部分组成:

1. Content(内容):元素的实际内容(文字、图片等)。
2. Padding(内边距):内容与边框之间的空间。
3. Border(边框):围绕内容和内边距的边界线。
4. Margin(外边距):元素与其他元素之间的空间。

示例:

box {
    width: 200px;       /* 内容宽度 */
    height: 100px;      /* 内容高度 */
    padding: 20px;      /* 内边距 */
    border: 5px solid black; /* 边框 */
    margin: 30px;       /* 外边距 */
}

总宽度 = 
"width + padding-left + padding-right + border-left + border-right + margin-left + margin-right"。

CSS 布局

CSS 提供了多种布局方式,常见的有:

5.1 普通流

默认布局方式,元素按照 HTML 顺序从上到下、从左到右排列。

5.2 Flexbox(弹性布局)

适用于一维布局(行或列):

.container {
    display: flex;
    justify-content: center; /* 水平居中 */
    align-items: center;     /* 垂直居中 */
}

- 优点:简单易用,适合响应式设计。

5.3 Grid(网格布局)

适用于二维布局(行和列):

.container {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr; /* 三列等宽 */
    gap: 10px; /* 网格间距 */
}

- 优点:强大的二维布局能力。

5.4 浮动(Float)

早期用于图文混排,现在逐渐被 Flexbox 和 Grid 取代:

img {
    float: left; /* 图片左浮动 */
    margin-right: 10px;
}

5.5 定位(Position)

控制元素的位置:

"static":默认值,正常流。
"relative":相对定位,相对于自身原位置偏移。
"absolute":绝对定位,相对于最近的定位祖先元素。
 "fixed":固定定位,相对于浏览器窗口。
"sticky":粘性定位,滚动时在阈值范围内固定。

CSS 响应式设计

让网页在不同设备上自适应显示:

6.1 媒体查询

根据屏幕尺寸应用不同样式:

/* 默认样式(手机) */
.container {
    width: 100%;
}

/* 平板及以上 */
@media (min-width: 768px) {
    .container {
        width: 750px;
    }
}

/* 桌面及以上 */
@media (min-width: 1200px) {
    .container {
        width: 1170px;
    }
}

6.2 相对单位


"%":相对于父元素尺寸。
"em":相对于当前元素字体大小。 
"rem":相对于根元素(
"<html>")字体大小。
"vw/vh":相对于视口宽度/高度的 1%。

CSS 预处理器(Sass/SCSS)

CSS 预处理器扩展了 CSS 的功能,如变量、嵌套、混合等:

// 变量
$primary-color: #007BFF;

// 嵌套
.nav {
    ul {
        margin: 0;
        padding: 0;
        list-style: none;
        li {
            display: inline-block;
            a {
                color: $primary-color;
                &:hover {
                    color: darken($primary-color, 10%);
                }
            }
        }
    }
}

编译后会生成标准 CSS。

CSS 动画与过渡

1. 过渡

平滑改变属性值:

.button {
    transition: background-color 0.3s ease;
}
.button:hover {
    background-color: #0056b3;
}

2. 动画

定义关键帧动画:

@keyframes slidein {
    from {
        transform: translateX(-100%);
    }
    to {
        transform: translateX(0);
    }
}

.element {
    animation: slidein 0.5s ease-out;
}

CSS 最佳实践

1. 语义化 HTML:用合适的标签表达内容结构。
2. 分离关注点:HTML 负责结构,CSS 负责样式,JS 负责交互。
3. 命名规范:使用 BEM(Block__Element--Modifier)等方法提高可读性。
4. 性能优化:减少重排(reflow)和重绘(repaint),压缩 CSS 文件

JavaScript

定义

JavaScript(简称 JS) 是一种脚本语言,主要用于为网页添加交互功能。

- 与 HTML(结构)、CSS(样式)并列,是前端开发的三大核心技术之一。
- 现在也可用于后端开发(Node.js)、移动端开发(React Native)、桌面应用(Electron)等。

JavaScript 的三种引入方式

2.1 内联脚本

在 HTML 标签中直接使用 
"onclick" 等事件属性:

<button onclick="alert('Hello')">点击</button>

- 缺点:难以维护,不推荐大量使用。

2.2 内部脚本

在 
"<script>" 标签中编写 JS 代码:

<script>
  console.log('页面加载完成');
</script>

2.3 外部脚本

将 JS 代码保存在 
".js" 文件中,通过 
"<script src="app.js"></script>" 引入:

<script src="app.js"></script>

- 优点:代码分离,便于维护和缓存。

JavaScript 基础语法

3.1 变量与常量


"let":可变变量(块级作用域)。

"const":不可变常量(块级作用域)。

"var"(旧版,不推荐):函数作用域,容易引发问题。

let name = 'Alice';
const age = 25;

3.2 数据类型

- 原始类型:
"string"、
"number"、
"boolean"、
"null"、
"undefined"、
"symbol"(ES6)、
"bigint"(ES2020)。
- 引用类型:
"object"(包括数组、函数等)。

let str = "Hello";
let num = 42;
let isDone = true;
let obj = { key: "value" };
let arr = [1, 2, 3];

3.3 运算符

- 算术:"+"、"-"、"*"、"/"、"%"、"**"(幂)
- 比较:"=="(宽松相等)、"==="(严格相等)、"!="、"!=="、">"、"<" 
- 逻辑:"&&"(与)、"||"(或)、"!"(非)。

流程控制

4.1 条件语句

if (age >= 18) {
  console.log("成年人");
} else {
  console.log("未成年人");
}

4.2 循环语句

// for 循环
for (let i = 0; i < 5; i++) {
  console.log(i);
}

// while 循环
let j = 0;
while (j < 5) {
  console.log(j);
  j++;
}

5. 函数

函数是可重复使用的代码块。

5.1 函数声明

function greet(name) {
  return "Hello, " + name;
}
console.log(greet("Bob")); // Hello, Bob

5.2 箭头函数

const add = (a, b) => a + b;
console.log(add(2, 3)); // 5

6. 对象与数组

6.1 对象

let person = {
  name: "Alice",
  age: 25,
  sayHi: function() {
    console.log("Hi, I'm " + this.name);
  }
};
person.sayHi(); // Hi, I'm Alice

6.2 数组

let fruits = ["apple", "banana", "orange"];
fruits.push("grape"); // 添加元素
console.log(fruits[1]); // banana

7. DOM 操作(前端核心)

DOM(Document Object Model)是 HTML 文档的对象表示,JS 可以通过 DOM API 操作页面元素。

7.1 选择元素

let title = document.getElementById("title");
let items = document.querySelectorAll(".item");

7.2 修改内容

title.textContent = "新标题";
title.style.color = "red";

7.3 事件监听

let btn = document.querySelector("button");
btn.addEventListener("click", function() {
  alert("按钮被点击");
});

前端开发常见代码

1. HTML 基础结构

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>页面标题</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <header>
        <h1>网站标题</h1>
    </header>
    <main>
        <p>这是一个段落。</p >
    </main>
    <footer>
        <p>版权 © 2026</p >
    </footer>
    <script src="app.js"></script>
</body>
</html>

2. CSS 常用样式

/* 重置默认边距 */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    font-family: Arial, sans-serif;
    line-height: 1.6;
    background-color: #f4f4f4;
}

.container {
    width: 80%;
    margin: 0 auto;
    padding: 20px;
}

.btn {
    display: inline-block;
    padding: 10px 20px;
    background: #007BFF;
    color: white;
    text-decoration: none;
    border-radius: 5px;
    transition: background 0.3s;
}

.btn:hover {
    background: #0056b3;
}

3. JavaScript 基础

// 获取元素
const btn = document.querySelector('.btn');
const output = document.getElementById('output');

// 事件监听
btn.addEventListener('click', () => {
    output.textContent = '按钮被点击了!';
});

// 定时器
setTimeout(() => {
    console.log('3秒后执行');
}, 3000);

// 数组操作
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(n => n * 2);
console.log(doubled); // [2, 4, 6, 8, 10]

Read more

一、FPGA到底是什么???(一篇文章让你明明白白)

一句话概括 FPGA(现场可编程门阵列) 是一块可以通过编程来“变成”特定功能数字电路的芯片。它不像CPU或GPU那样有固定的硬件结构,而是可以根据你的需求,被配置成处理器、通信接口、控制器,甚至是整个片上系统。 一个生动的比喻:乐高积木 vs. 成品玩具 * CPU(中央处理器):就像一个工厂里生产好的玩具机器人。它的功能是固定的,你只能通过软件(比如按不同的按钮)来指挥它做预设好的动作(走路、跳舞),但你无法改变它的机械结构。 * ASIC(专用集成电路):就像一个为某个特定任务(比如只会翻跟头)而专门设计和铸造的金属模型。性能极好,成本低(量产时),但一旦制造出来,功能就永远无法改变。 * FPGA:就像一盒万能乐高积木。它提供了大量基本的逻辑单元(逻辑门、触发器)、连线和接口模块。你可以通过“编程”(相当于按照图纸搭建乐高)将这些基本模块连接起来,构建出你想要的任何数字系统——可以今天搭成一个CPU,明天拆了重新搭成一个音乐播放器。 “现场可编程”

Stable Diffusion WebUI云部署

Stable Diffusion WebUI云部署

本地部署虽然方便,但对硬件要求高,尤其是显存。云服务器(特别是带有GPU的实例)可以让我们用较低成本体验强大的AI绘画能力,并且可以随时随地通过浏览器访问,非常方便。 一、 部署前的准备 1.1 选择合适的云服务器: * GPU型号: 优先选择NVIDIA显卡,如V100, T4, P4, 1080Ti, 2080Ti, 3090, 4090等。显存越大越好,至少8GB起步,推荐12GB以上。 * 操作系统: Linux发行版(如Ubuntu 20.04 LTS, Debian 11, CentOS 7/8等)是首选,社区支持好,文档丰富。 * 网络带宽: 部署初期需要下载大量模型和依赖,一个稳定的网络环境至关重要。 1.2 环境配置: * Python版本: 推荐使用Python 3.10.x(

大模型对话中的流式响应前端实现详解(附完整示例代码)

大模型对话中的流式响应前端实现详解 1. 流式响应概述 1.1 什么是流式响应 流式响应(Streaming Response)是指在大模型对话中,服务器将生成的内容以增量、实时的方式逐步发送到前端,而不是一次性返回完整响应。前端通过接收这些数据流,逐词或逐段展示给用户,模拟“打字机”效果,提升交互的实时性和自然感。这类似于人类对话中的逐步思考和表达过程。 1.2 为什么流式响应重要 在大模型对话中,响应可能较长(如数百个token),一次性返回会导致用户等待时间过长,造成卡顿感。流式响应的优势包括: * 降低感知延迟:用户立即看到部分内容,减少等待焦虑。 * 提升交互体验:更接近真人对话节奏,增强沉浸感。 * 节省资源:前端可以逐步渲染内容,避免大块数据处理带来的内存压力。 * 实时反馈:允许用户在响应生成过程中中断或调整请求,提高可控性。 2. 前端可实现方案 2.1 Server-Sent Events (SSE) SSE是一种基于HTTP的单向通信协议,服务器可以主动向客户端推送数据流。

记录前端菜鸟的日常——Pdf.js与双指缩放

记录前端菜鸟的日常——Pdf.js与双指缩放

一、需求 这两天一直在研究这个,之前项目用的是vue-pdf,但是pdf打开速度巨慢。我们的需求是从上到下滑动展示,要求打开时间不能过长并且可以实现双指缩放。 1.vue-pdf(快速集成) (1)“全量串行”,要把整个pdf全部下载并解析完之后一页一页渲染出来,渲染出来之前的页面就是一直白屏的。 (2)占用浏览器主线程,与Vue组件竞争资源。 2.pdf.js(高性能、全功能) (1)“流式并行”,一边加载一边渲染,而且是视口在哪就优先加载哪页、智能加载相邻页,远离视口的进行销毁或者低分辨率预览。 (2)使用Web Worker在独立线程解析PDF,主线程释放。 二、PDF.js的使用 pdf.js不需要安装依赖,直接去官网下载包,这个包就是个阅读器软件(网页版),2.多版本更稳定。 里面的web文件夹就包含了html、css、js,直接扔进puclic里,一个是因为不会被压缩,而且可以直接在根目录下访问,不用走路由之类的。 这个时候你就可以进行尝试在public下放一个测试的pdf,