HTML5+CSS3

HTML

块级元素与行内元素

定义:

  • 块级元素默认占据整行,形成一个块容器。
  • 行内元素默认在同一行内与其他元素并排显示。

块级元素示例

  • <h1>: 标题
  • <p>: 段落
  • <div>: 通用容器

块级元素特点

  • 默认情况下,每个块级元素都会在其前后形成换行。
  • 宽度和高度可以设置,并且可以填充整个容器宽度。
  • 可以设置 marginpadding 的上下左右值。
  • 通常作为其他元素的容器。

行内元素示例

  • <a>: 链接
  • <span>: 通用行内容器
  • <img>: 图像(默认为行内元素)

行内元素特点

  • 不会在前后形成换行,多个行内元素可以在一行内显示。
  • 宽度和高度默认由内容决定,不能设置宽度和高度。
  • 只能设置左右 marginpadding
  • 通常用于文本或小部件。

示例

假设我们有以下 HTML 结构:

1
2
3
<h1>Title</h1>
<p>This is a paragraph. <a href="#">Link</a></p>
<div>Block level <span>inline</span> elements.</div>

我们可以观察到以下默认行为:

  • <h1><p> 是块级元素,它们各自占据一行。
  • <a><span> 是行内元素,它们在 <p><div> 内与其他文本并排显示。

转换元素类型

你可以使用 display 属性来转换元素的显示方式:

  • 将行内元素转换为块级元素:
1
2
3
a {
display: block;
}
  • 将块级元素转换为行内元素:
1
2
3
div {
display: inline;
}

行内块元素

  • 元素可以与其他行内元素或行内块元素在同一行显示。
  • 可以直接设置宽度和高度。
  • 可以设置内边距和外边距,包括上下值。

注意事项

  • 块级元素和行内元素的行为可以通过 display 属性进行修改。
  • 根据布局需求选择合适的元素类型可以提高页面的可读性和可维护性。
  • 了解元素的默认行为有助于更有效地进行样式设计。
  • h1~h6标签不能相互嵌套
  • p标签中不要写块级元素

文本标签

HTML 文本标签 是用来格式化网页上的文本内容的。合理使用这些标签可以使你的网页更加易读和语义化。

基础文本格式化标签

  • <strong>: 强调文本的重要性,通常以粗体显示。
  • <em>: 强调文本,通常以斜体显示。
  • <mark>: 高亮文本,通常以黄色背景色显示。
  • <small>: 缩小文本尺寸,常用于版权信息等。
  • <del>: 删除线效果,表示文本已被删除。
  • <ins>: 下划线效果,表示文本被插入。
  • <sub>: 下标,用于化学公式等。
  • <sup>: 上标,用于指数等。
  • <u>: 为文本添加下划线,不建议使用,推荐使用 <ins> 或 CSS。
  • <s>: 为文本添加删除线,不建议使用,推荐使用 <del> 或 CSS。
  • <b>: 粗体文本,不表示重要性,仅用于视觉效果。

注意事项

  • 使用语义化的标签,例如 <article><section><header><footer> 等,可以使文档结构更加清晰。
  • 保持良好的编码习惯,如闭合标签、缩进等,以便于阅读和维护。
  • 确保所有标签正确嵌套,避免交叉嵌套。
  • 通过使用 CSS 进一步增强样式和布局。

超链接标签

HTML 超链接 是网页中不可或缺的一部分,它允许用户从一个页面跳转到另一个页面或其他资源。超链接由 <a>(anchor)标签定义。

基本语法

1
<a href="URL">Link Text</a>
  • href: 指定链接的目标地址。
  • Link Text: 显示给用户的链接文本。

示例

1
<a href="https://www.example.com">Visit Example</a>

不同类型的超链接

  1. 内部链接

    • 链接到同一网站内的其他页面。
    • 可以使用相对路径或绝对路径。
    1
    <a href="/about.html">About Us</a>
  2. 外部链接

    • 链接到其他网站。
    • 必须使用完整的URL。
    1
    <a href="https://www.google.com" target="_blank">Google</a>
  3. 锚点链接

    • 在当前页面内跳转到指定位置。
    • 通过在目标元素上设置 id 属性,并在链接中使用 # 加上该 id
    1
    2
    <a href="#section2">Jump to Section 2</a>
    <h2 id="section2">Section 2</h2>
  4. 电子邮件链接

    • 直接打开用户的默认邮件客户端。
    • 使用 mailto: 协议。
    1
    <a href="mailto:support@example.com">Contact Support</a>
  5. 文件下载链接

    • 当链接指向一个文件时,浏览器会尝试下载这个文件。
    1
    <a href="/downloads/report.pdf">Download Report</a>
  6. JavaScript 功能

    • 可以使用 javascript: 协议来触发 JavaScript 代码。
    1
    <a href="javascript:alert('Hello!')">Click me</a>

属性

  • target: 控制链接打开的方式。
    • _self: 默认值,链接在当前窗口或标签页打开。
    • _blank: 链接在新窗口或标签页打开。
    • _parent: 链接在父框架集打开。
    • _top: 链接在顶层窗口打开。
  • rel: 定义与链接文档的关系。
    • noopener: 告诉浏览器不要给予新打开的窗口访问当前窗口的权限。
    • noreferrer: 隐藏 HTTP Referer 头。
    • nofollow: 告诉搜索引擎不要跟踪此链接。
    • noopener noreferrer nofollow: 综合以上三个属性。
  • download: 如果出现,则强制将链接作为文件下载而不是导航。
    • 可选地,可以提供一个文件名提示。
1
<a href="/downloads/report.pdf" download>Download Report</a>

最佳实践

  • 可用性: 确保链接文本描述了链接的目的。
  • 可访问性: 使用 aria-labeltitle 属性提供额外的信息。
  • 安全性: 对外部链接使用 rel="noopener noreferrer"
  • 性能: 对于较大的文件,考虑使用渐进式加载技术。

表单

HTML 表单 是收集用户输入的主要方式之一。表单由 <form> 标签定义,并包含一系列表单控件,如文本框、按钮、下拉列表等。

基本语法

1
2
3
4
5
6
<form action="submit.php" method="post">
<!-- 表单控件 -->
<input type="text" name="username" placeholder="Username">
<input type="password" name="password" placeholder="Password">
<button type="submit">Submit</button>
</form>
  • action: 表单数据提交的URL。
  • method: 提交表单数据的方式,常见值为 getpost

表单控件

  • 文本输入 (<input type="text">): 单行文本输入。
  • 密码输入 (<input type="password">): 输入字符被隐藏。
  • 复选框 (<input type="checkbox">): 多选输入。
  • 单选按钮 (<input type="radio">): 互斥选择。
  • 下拉列表 (<select>): 下拉选择列表。
  • 文本区域 (<textarea>): 多行文本输入。
  • 文件上传 (<input type="file">): 文件选择器。
  • 提交按钮 (<input type="submit">): 提交表单。
  • 重置按钮 (<input type="reset">): 重置表单。
  • 按钮 (<button>): 通用按钮,可以定义 typebutton, submit, 或 reset

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<form action="/submit.php" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username" required>

<label for="email">Email:</label>
<input type="email" id="email" name="email" required>

<label for="password">Password:</label>
<input type="password" id="password" name="password" required>

<label for="gender">Gender:</label>
<select id="gender" name="gender">
<option value="male">Male</option>
<option value="female">Female</option>
</select>

<label for="newsletter">Subscribe to newsletter:</label>
<input type="checkbox" id="newsletter" name="newsletter" value="yes">

<button type="submit">Submit</button>
</form>

表单属性

  • name: 表单控件的名称,用于标识表单数据。
  • id: 表单控件的唯一标识符,用于关联标签。
  • value: 表单控件的初始值。
  • placeholder: 提供给用户的提示文本。
  • required: 标记控件为必需填写。
  • disabled: 禁用控件。
  • readonly: 只读控件,用户无法更改内容。
  • pattern: 设置输入模式,用于验证输入。
  • minmax: 限制数值或日期范围。
  • multiple: 允许用户选择多个文件或选项。

最佳实践

  • 使用 <label>: 为每个表单控件添加 <label>,提高可访问性。
  • 表单验证: 使用 HTML5 的内置验证属性(如 required, pattern)或 JavaScript 进行验证。
  • 响应式设计: 确保表单在不同设备上都能良好显示。
  • 安全: 使用 HTTPS 加密传输数据,保护用户隐私。
  • 用户体验: 提供即时反馈,减少不必要的步骤。

注意事项

  • 服务器端验证: 即使进行了客户端验证,也需要在服务器端再次验证数据。
  • 数据保护: 不要在表单中收集敏感信息,除非必要。
  • 错误消息: 提供清晰的错误消息,帮助用户理解问题所在。

字符实体

特殊字符

image-20240728152100934

数学符号

  • image-20240728152110054

货币符号

image-20240728152145924

箭头

image-20240728152152486

下面是一个包含上述字符实体的HTML文档示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<head>
<title>HTML Character Entities Example</title>
</head>
<body>
<h1>字符实体示例</h1>
<p>Special characters: &lt; &gt; &amp; &quot; &apos; &nbsp;</p>
<p>Math symbols: &plusmn; &times; &divide; &frac12; &frac14; &frac34; &deg; &infin; &ne;</p>
<p>Currency symbols: &euro; &yen; &pound; &cent;</p>
<p>Arrows: &larr; &uarr; &rarr; &darr;</p>
</body>
</html>

在这个示例中,我们使用了各种字符实体来展示特殊字符、数学符号、货币符号以及箭头。

image-20240728151823172

其他标签

video视频标签

HTML5 的 <video> 标签用于在网页中嵌入视频内容。它提供了一种简单的方式让用户在浏览器中观看视频,而不需要额外的插件如 Flash。以下是 <video> 标签的一些关键属性和用法的总结:

基本用法

1
2
3
4
5
<video controls>
<source src="movie.mp4" type="video/mp4">
<source src="movie.ogg" type="video/ogg">
Your browser does not support the video tag.
</video>

主要属性

  1. controls:

    • 显示播放控件,如播放/暂停按钮、音量控制等。
    • 示例:
      1
      <video controls></video>
  2. autoplay:

    • 视频将自动播放。
    • 前提是开启静音
    • 示例:
      1
      <video autoplay></video>
  3. loop:

    • 视频结束后自动重新播放。
    • 示例:
      1
      <video loop></video>
  4. muted:

    • 默认情况下静音播放视频。
    • 这是自动播放的前提
    • 示例:
      1
      <video muted></video>
  5. preload:

    • 指定视频加载方式:
      • auto: 自动加载整个视频(默认)
      • metadata: 只加载元数据
      • none: 不预先加载任何数据
    • 示例:
      1
      <video preload="metadata"></video>
  6. src:

    • 视频文件的 URL。
    • 示例:
      1
      <video src="movie.mp4"></video>
  7. poster:

    • 在视频开始播放之前显示的图像。
    • 示例:
      1
      <video poster="thumbnail.jpg"></video>
  8. widthheight:

    • 设置视频播放器的宽度和高度。
    • 示例:
      1
      <video width="480" height="320"></video>
  9. playsinline:

    • 视频将在标准模式下播放,而不是全屏模式。
    • 示例:
      1
      <video playsinline></video>
  10. autoplay="true":

    • autoplay,但明确指定了布尔值 true

<source> 元素

  • <source> 元素用于指定多个视频源,以确保在不同浏览器中都能播放视频。
  • 示例:
    1
    2
    3
    4
    5
    6
    <video controls>
    <source src="movie.mp4" type="video/mp4">
    <source src="movie.ogg" type="video/ogg">
    <source src="movie.webm" type="video/webm">
    Your browser does not support the video tag.
    </video>

audio音频标签

HTML5 的 <audio> 标签用于在网页中嵌入音频内容。它提供了一种简单的方式让用户在浏览器中播放音频文件,而不需要额外的插件如 Flash。以下是 <audio> 标签的一些关键属性和用法的总结:

基本用法

1
2
3
4
5
<audio controls>
<source src="song.mp3" type="audio/mpeg">
<source src="song.ogg" type="audio/ogg">
Your browser does not support the audio element.
</audio>

主要属性

  1. controls:

    • 显示播放控件,如播放/暂停按钮、音量控制等。
    • 示例:
      1
      <audio controls></audio>
  2. autoplay:

    • 音频将自动播放。
    • 示例:
      1
      <audio autoplay></audio>
  3. loop:

    • 音频结束后自动重新播放。
    • 示例:
      1
      <audio loop></audio>
  4. muted:

    • 默认情况下静音播放音频。
    • 示例:
      1
      <audio muted></audio>
  5. preload:

    • 指定音频加载方式:
      • auto: 自动加载整个音频文件(默认)
      • metadata: 只加载元数据(例如歌曲长度)
      • none: 不预先加载任何数据
    • 示例:
      1
      <audio preload="metadata"></audio>
  6. src:

    • 音频文件的 URL。
    • 示例:
      1
      <audio src="song.mp3"></audio>
  7. width:

    • 设置音频播放器的宽度。
    • 示例:
      1
      <audio width="320"></audio>
  8. autoplay="true":

    • autoplay,但明确指定了布尔值 true

<source> 元素

  • <source> 元素用于指定多个音频源,以确保在不同浏览器中都能播放音频。
  • 示例:
    1
    2
    3
    4
    5
    6
    <audio controls>
    <source src="song.mp3" type="audio/mpeg">
    <source src="song.ogg" type="audio/ogg">
    <source src="song.wav" type="audio/wav">
    Your browser does not support the audio element.
    </audio>

事件

  • <audio> 元素支持多种事件,可以使用 JavaScript 来监听这些事件。
  • 示例:
    1
    2
    3
    4
    var myAudio = document.querySelector('audio');
    myAudio.addEventListener('play', function() {
    console.log('The audio has started playing.');
    });

表格标签

  • 标签:table

    1
    <table></table>

    属性border:规定表格边框的宽度,width:规定表格的宽度,cellspacing:规定单元之间的空间

  • tr:表格的行,可以包裹多个td

  • td:表格的单元格(普通),可以包裹内容,如果是表头单元格可以用标签th

全局属性

1. 什么是全局属性?

  • 定义:全局属性是可以应用于所有HTML元素的属性。这意味着无论你使用什么元素,都可以附加这些属性以增加更多的功能或信息。

2. 常见的全局属性

  • class: 定义元素的一个或多个类名,用于CSS样式或JavaScript操作。

    1
    <div class="container"></div>
  • id: 定义元素的唯一标识符,用于CSS样式或JavaScript操作。

    1
    <div id="main"></div>
  • title: 定义元素的额外信息,通常作为工具提示显示。

    1
    <a href="#" title="Click here for more information">Link</a>
  • style: 定义元素的内联样式。

    1
    <p style="color: red;">This is a styled paragraph.</p>
  • tabindex: 定义元素在文档中的Tab顺序。

    1
    <input type="text" tabindex="1">
  • lang: 定义元素的语言。

    1
    <p lang="es">Este es un párrafo en español.</p>
  • dir: 定义元素的文本方向。

    1
    <p dir="rtl">This is right-to-left text.</p>
  • hidden: 表示元素不可见。

    1
    <div hidden>This is a hidden element.</div>
  • contenteditable: 允许用户编辑元素的内容。

    1
    <p contenteditable="true">Edit this text.</p>
  • draggable: 指示元素是否可拖动。

    1
    <img draggable="true" src="image.jpg" alt="Draggable Image">
  • spellcheck: 指示浏览器是否应该检查拼写和语法。

    1
    <textarea spellcheck="false"></textarea>
  • accesskey: 定义一个键盘快捷键来激活元素。

    1
    <button accesskey="1">Button</button>
  • data-\*: 自定义数据属性,用于存储页面或应用程序的私有数据。

    1
    <div data-user-id="123">User Profile</div>

对于自定义属性来说,访问方式如下:

  • 通过dataset来读取
1
<div id="example" data-custom-attribute="hello"></div>
1
2
var element = document.getElementById('example');
var customAttribute = element.dataset.customAttribute; // "hello"
  • 通过dataset来设置属性
1
2
var element = document.getElementById('example');
element.dataset.customAttribute = 'world';
  • 如果你的自定义属性名包含连字符,如 data-my-attr,在 dataset 对象中,连字符会被转换成驼峰式命名,即 myAttr
  • 如果你的自定义属性名与某个标准属性名冲突(比如 data-class),那么在 dataset 对象中,你必须使用 class_(带下划线)的形式来引用它。
  • 自定义属性只应该用于存储简单的字符串数据。如果需要存储复杂的数据结构,考虑使用JSON格式的字符串。

CSS基础

1.行内样式

直接写在标签上,通过style属性来指定样式

1
2
3
<body>
<h1 style="color: aqua;">这是一段话</h1>
</body>

效果

image-20240728065832470

2.内部样式

一般位于head标签内,这时,我们需写style标签,并在其中指定样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html lang="en">
<head>
<title>Document</title>
<style>
h1{
color: aqua;
}

</style>
</head>
<body>
<h1>这是一段话</h1>
</body>
</html>

效果

image-20240728070048290

3.外部样式

通过外部引入的方式,来进行样式的匹配。

语法:

通过href来指定外部css文件的路径

1
<link rel="stylesheet" href="">
1
2
3
4
/*这outCSS.css内的内容 */
h1{
color: red;
}
1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html lang="en">
<head>
<title>Document</title>
<link rel="stylesheet" href="./外部CSS文件/outCSS.css">
</head>
<body>
<h1>这是一段话</h1>
</body>
</html>

效果

image-20240728070444911

4.样式表的优先级

  • 优先级规则:行内样式 > 内部样式 = 外部样式
    • 内部样式外部样式优先级相同,但是后面写的会覆盖前面写的样式
    • 同一个样式表中,优先级也和编写顺序有关,同样后面的也会覆盖前面的样式。
分类 优点 缺点 使用频率 作用范围
行内样式 优先级最高 1.结构与样式未分离
2.代码结构混乱
3.样式不能复用
很低 当前标签
内部样式 1.样式可以复用
2.代码结构清晰
1.结构与样式未彻底分离
2.样式不能多页面使用
一般 当前页面
外部样式 1.样式可以多页面复用
2.代码结构清晰
3.可触发游览器缓存机制
4.结构与样式彻底分离
需要引入才能使用 最高 多个页面

5.CSS语法规范

CSS语法由两部分构成:

  • 选择器:找到要添加样式的元素
  • 声明块:设置具体的样式,可以有多个,格式:属性名:属性值;

image-20240728071809366

CSS选择器

CSS基本选择器

  1. 通配选择器
  2. 元素选择器
  3. 类选择器
  4. id选择器

1.通配选择器

  • 选中html中所有元素

  • 语法:

    • * {
          属性名:属性值
      }
      
      1
      2
      3
      4
      5
      6
      7

      * 例子

      * ```css
      * {
      color: red;
      }

2.元素选择器

  • 作用:为页面中 某种元素 统一设置样式

  • 语法:

    • 标签名 {
          属性名:属性值;
      }
      
      1
      2
      3
      4
      5
      6
      7
      8

      * 例子:

      * ```css
      /* 选中所有h1元素 */
      h1 {
      color: blue;
      }

3.类选择器

  • 作用:根据元素的class值,来选中某些元素

  • 语法:

    1
    2
    3
    .类名 {
    属性名:属性值;
    }
  • 举例

    1
    2
    3
    4
    5
    6
    /* 选中所有class值为test的元素 */
    .test{
    color:red;
    font-size:90px;
    }

4.ID选择器

  • 作用:根据元素的id属性来精准选择某个元素。

  • 语法:

    1
    2
    3
    #id值 {
    属性值:属性名;
    }
  • 举例

    1
    2
    3
    4
    5
    /* 选中id为test的元素 */
    #test {
    color: red;
    font-size:40px;
    }

CSS复合选择器

1.交集选择器

  • 交集选择器是由两个或多个选择器直接连接(没有空格)组成。
  • 它们匹配同时符合所有组成部分的选择器的元素。
  • 如果其中一个部分是类型选择器(例如 div),它通常被省略,因为所有元素都是某种类型的元素。
  • 交集有并且的含义

语法示例:

1
2
3
div.myClass {
/* styles go here */
}

这个选择器会选择所有带有 myClass 类的 <div> 元素。

示例

假设我们有以下 HTML 结构:

1
2
3
4
5
6
<div class="container">
<div class="item myItem"></div>
<div class="item"></div>
</div>

<div class="otherItem"></div>

我们可以使用交集选择器来选择同时具有 itemmyItem 类的 <div> 元素:

1
2
3
.item.myItem {
color: blue;
}

这会使得第一个 <div>(即 .item.myItem)的文字颜色变为蓝色,而其他元素则不受影响。

注意事项:

  • 交集选择器不会选择那些只具有其中一个类的元素。
  • 如果一个选择器包含多个类,那么元素必须拥有这些类的所有值。

2.并集选择器

定义:

  • 并集选择器由多个选择器通过逗号分隔组成。
  • 这些选择器匹配的是各自独立选择的元素集合的并集。
  • 并集选择器是或的意思。

语法:

1
2
3
selector1, selector2, selector3 {
/* styles go here */
}

例如,以下选择器会选择所有的 <p> 元素和所有带有 highlight 类的元素:

1
2
3
p, .highlight {
color: red;
}

示例

假设我们有以下 HTML 结构:

1
2
3
<p>This is a paragraph.</p>
<div class="highlight">This is highlighted text.</div>
<span>This is a span element.</span>

我们可以使用并集选择器来选择所有的 <p> 元素以及带有 highlight 类的任何元素:

1
2
3
p, .highlight {
color: red;
}

这会使得 <p> 元素和 .highlight 类的 <div> 的文字颜色都变为红色。

注意事项:

  • 并集选择器中的每个选择器都是独立的,它们之间没有关系。
  • 每个选择器都会应用样式规则到其匹配的元素上。
  • 可以通过这种方式组合不同类型的选择器(如类型选择器、类选择器等)。

3.后代选择器

定义:

  • 后代选择器用于选择某个元素的所有后代元素(子元素的子元素等等)。
  • 后代选择器由两个或多个选择器通过空格分隔组成。

语法:

1
2
3
parent-selector child-selector {
/* styles go here */
}

例如,以下选择器会选择所有 <ul> 下的 <li> 元素:

1
2
3
ul li {
color: blue;
}

示例

假设我们有以下 HTML 结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<div class="container">
<p>Outside the list.</p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3
<ul>
<li>Sub-item 1</li>
<li>Sub-item 2</li>
</ul>
</li>
</ul>
<p>Another paragraph outside the list.</p>
</div>

我们可以使用后代选择器来选择所有位于 <ul> 内的 <li> 元素:

1
2
3
.container ul li {
color: blue;
}

这会使得所有 <ul> 内的 <li> 元素的文字颜色变为蓝色。

注意事项:

  • 后代选择器中的选择器是按照从父到子的顺序排列的。
  • 空格表示“后代”关系,意味着选择器匹配的是第一个选择器所选元素的所有后代元素。
  • 可以通过这种方式选择特定层级的元素或者更深层的元素。

图示

image-20240728082535898

4.子代选择器

定义:

  • 子代选择器用于选择某个元素的**直接子元素(儿子元素)**。
  • 子代选择器由两个或多个选择器通过大于号 (>) 分隔组成。

语法:

1
2
3
parent-selector > child-selector {
/* styles go here */
}

例如,以下选择器会选择所有 <ul> 的直接子元素 <li>

1
2
3
ul > li {
color: blue;
}

示例

假设我们有以下 HTML 结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<div class="container">
<p>Outside the list.</p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3
<ul>
<li>Sub-item 1</li>
<li>Sub-item 2</li>
</ul>
</li>
</ul>
<p>Another paragraph outside the list.</p>
</div>

我们可以使用子代选择器来选择所有 <ul> 的直接子元素 <li>

1
2
3
.container ul > li {
color: blue;
}

这会使得 <ul> 的直接子元素 <li> 的文字颜色变为蓝色,但不会影响 <ul> 内部的子 <ul> 中的 <li>

注意事项:

  • 子代选择器中的选择器是按照从父到子的顺序排列的。
  • 大于号 (>) 表示“直接子元素”关系,意味着选择器仅匹配第一个选择器所选元素的直接子元素。
  • 可以通过这种方式精确地选择特定层级的元素。

5.兄弟选择器

定义:

  • 兄弟选择器用于选择与另一个元素具有相同父元素的元素。
  • CSS 提供了两种主要类型的兄弟选择器:相邻兄弟选择器 (+) 和一般兄弟选择器 (~)。

相邻兄弟选择器 (+):

  • 相邻兄弟选择器用于选择紧接在另一个元素后的元素,且这两个元素有相同的父元素。
  • 语法:element1 + element2 选择紧接在 element1 后面的 element2 元素。

一般兄弟选择器 (~):

  • 一般兄弟选择器用于选择前面有另一个元素的元素,且这两个元素有相同的父元素。
  • 语法:element1 ~ element2 选择位于 element1 后面的所有 element2 元素。

示例

假设我们有以下 HTML 结构:

1
2
3
4
5
6
7
<div class="container">
<p>Paragraph 1</p>
<p>Paragraph 2</p>
<div>Some div content</div>
<p>Paragraph 3</p>
<p>Paragraph 4</p>
</div>

我们可以使用相邻兄弟选择器来选择紧接在第一个 <p> 元素后面的 <p> 元素:

1
2
3
p + p {
color: blue;
}

这会使得紧接在第一个 <p> 元素后面的 <p> 元素的文字颜色变为蓝色。

我们也可以使用一般兄弟选择器来选择所有位于第一个 <p> 元素后面的 <p> 元素:

1
2
3
p ~ p {
color: green;
}

这会使得所有位于第一个 <p> 元素后面的 <p> 元素的文字颜色变为绿色。

注意事项:

  • 相邻兄弟选择器 (+) 仅选择紧接在前一个元素后面的元素。
  • 一般兄弟选择器 (~) 选择所有位于前一个元素后面的元素。
  • 这些选择器要求元素有相同的父元素。

6.属性选择器

定义:

  • 属性选择器用于选择具有指定属性或属性值的元素。
  • 这种选择器允许你根据元素的属性来选择元素,非常灵活且强大。

语法:

  • [attribute]: 选择具有给定属性的元素。
  • [attribute=value]: 选择具有给定属性和值的元素。
  • [attribute^=value]: 选择属性值以指定字符串开头的元素。
  • [attribute$=value]: 选择所有属性值以指定的字符串 value 结尾的元素。
  • [attribute*=value]: 选择属性值包含指定字符串的元素。

示例

假设我们有以下 HTML 结构:

1
2
3
4
<a href="https://example.com">Link to Example</a>
<a href="https://google.com">Google</a>
<a href="https://example.com/about">About Example</a>
<a href="https://example.org">Example Org</a>

我们可以使用属性选择器来选择所有具有 href 属性的 <a> 元素,并将它们的颜色设置为蓝色:

1
2
3
a[href] {
color: blue;
}

如果我们要选择所有链接到 example.com<a> 元素,并将它们的颜色设置为绿色:

1
2
3
a[href^="https://example.com"] {
color: green;
}

如果我们要选择所有链接以 .com 结尾的 <a> 元素,并将它们的颜色设置为红色:

1
2
3
a[href$=".com"] {
color: red;
}

如果我们要选择所有链接中包含 example 字符串的 <a> 元素,并将它们的颜色设置为 orange:

1
2
3
a[href*="example"] {
color: orange;
}

注意事项:

  • 属性选择器可以非常具体,因此它们的优先级高于大多数其他类型的选择器。
  • 使用这些选择器可以更精细地控制样式,特别是在处理具有特定属性或属性值的元素时。
  • 属性选择器可以与其他选择器结合使用,例如类选择器或 ID 选择器。

7.伪类选择器

定义:

  • 伪类选择器用于选择处于特定状态的元素。
  • 这些状态通常是用户交互的结果,比如鼠标悬停或激活链接。

常见伪类选择器

用户动作相关的伪类

  • :hover: 当用户将鼠标指针悬停在元素上时选择该元素。
  • :active: 当元素被激活(例如,鼠标点击时)时选择该元素。
  • :focus: 当元素获得焦点(例如,通过键盘导航)时选择该元素。
  • :focus-within: 当元素或其后代获得焦点时选择该元素。
  • :focus-visible: 当元素获得焦点且浏览器认为应显示焦点指示时选择该元素。

链接相关的伪类

  • :link: 选择未被访问过的链接。
  • :visited: 选择已被用户访问过的链接。
  • :target: 选择当前被激活的 URL 锚点的目标元素。
  • :scope: 选择当前作用域内的元素,通常与自定义伪元素一起使用。

结构相关的伪类

  • :first-child: 选择其父元素的第一个子元素。
  • :last-child: 选择其父元素的最后一个子元素。
  • :only-child: 选择其父元素中唯一的一个子元素。
  • :nth-child(n): 选择其父元素的第 n 个子元素。
  • :nth-last-child(n): 选择其父元素倒数第 n 个子元素。
  • :nth-of-type(n): 选择其父元素的第 n 个同类型子元素。
  • :nth-last-of-type(n): 选择其父元素倒数第 n 个同类型子元素。
  • :first-of-type: 选择其父元素的第一个同类型子元素。
  • :last-of-type: 选择其父元素的最后一个同类型子元素。
  • :only-of-type: 选择其父元素中唯一的同类型子元素。

状态相关的伪类

  • :checked: 选择被选中的 <input type="checkbox"><input type="radio"> 元素。
  • :enabled: 选择可交互的 <input><button> 元素。
  • :disabled: 选择不可交互的 <input><button> 元素。
  • :indeterminate: 选择未完全选中的 <input type="checkbox"><progress> 元素。
  • :valid: 选择有效表单控件。
  • :invalid: 选择无效表单控件。
  • :in-range: 选择在范围内的 <input type="number"><input type="range"> 元素。
  • :out-of-range: 选择超出范围的 <input type="number"><input type="range"> 元素。
  • :placeholder-shown: 选择显示占位符文本的 <input><textarea> 元素。
  • :read-only: 选择只读的 <input><textarea> 元素。
  • :read-write: 选择可编辑的 <input><textarea> 元素。
  • :required: 选择被标记为必填的 <input><select> 元素。
  • :optional: 选择未被标记为必填的 <input><select> 元素。

否定伪类

语法:

:not(选择器):排除满足括号中条件的元素。

假设我们有以下 HTML 结构:

1
2
3
4
5
6
7
<a href="https://example.com" class="link">Visit Example</a>
<button>Click Me</button>
<ul>
<li>First Item</li>
<li>Second Item</li>
<li>Third Item</li>
</ul>

我们可以使用伪类选择器来改变链接在不同状态下的颜色:

1
2
3
4
5
6
7
8
9
10
11
.link:hover {
color: blue;
}

.link:active {
color: red;
}

.link:visited {
color: purple;
}

我们还可以使用伪类选择器来高亮列表的第一项和最后一项:

1
2
3
4
5
6
7
li:first-child {
background-color: yellow;
}

li:last-child {
background-color: lightblue;
}

注意事项:

  • 伪类选择器不改变文档的实际结构,只影响样式。
  • 伪类选择器可以与其他选择器组合使用,例如类选择器或属性选择器。
  • 伪类选择器可以用来实现复杂的交互效果和动态样式变化。
  • 伪类选择器要注意状态的执行顺序。一个标准的执行状态是lvha
  • 伪类选择器中linkvisted是a标签独有的
  • 伪类选择器中focus在表单类元素(输入等)中使用
  • 伪类选择器中的有关n的值
    image-20240728105354066

8.伪元素选择器

定义:

  • 伪元素选择器用于选择元素的特定部分,而不是整个元素本身。
  • 这些选择器通常用于添加装饰性内容或调整元素内部的布局。

常见伪元素选择器

  • ::before: 在元素的内容之前插入内容。
  • ::after: 在元素的内容之后插入内容。
  • ::first-letter: 选择元素的第一字母。
  • ::first-line: 选择元素的第一行。
  • ::selection: 选择用户选取的文本。
  • ::placeholder: 选择 <input><textarea> 元素的占位符文本。(注意:此伪元素在某些浏览器中可能不可用)

语法

伪元素选择器使用两个冒号 (::) 来表示,这是因为早期的单冒号 (:) 语法被保留给伪类选择器。

示例

假设我们有以下 HTML 结构:

1
2
<p>这是一个段落。</p>
<input type="text" placeholder="输入文字">

我们可以使用伪元素选择器来向段落的开始添加一个图标:

1
2
3
4
p::before {
content: "👉";
color: green;
}

我们还可以使用伪元素选择器来更改输入框的占位符文本颜色:

1
2
3
input::placeholder {
color: gray;
}

注意事项:

  • 伪元素选择器创建的内容不会成为文档的一部分,因此不能通过 JavaScript 访问。
  • content 属性通常与伪元素选择器一起使用,用于插入实际的内容。
  • 伪元素选择器可以与其他选择器组合使用,例如类选择器或属性选择器。

选择器的优先级

行内样式 > ID选择器 > 类选择器 > 元素选择器 > 通配选择器 > 继承过来的样式

选择器的权重

image-20240728123822530

在CSS中,选择器的权重(也称为优先级或特异性)决定了当多个规则应用于同一个元素时,哪个规则将被应用。权重越高,该规则就越有可能被浏览器采用。了解选择器的权重对于预测和控制样式如何显示非常重要。

CSS 选择器权重规则
  1. 内联样式 (style 属性):
    • 权重: 1000
    • 示例: <p style="color: red;">Text</p>
  2. ID 选择器
    • 权重: 100
    • 示例: #uniqueId { color: red; }
  3. 类选择器、属性选择器、伪类
    • 权重: 10
    • 示例:
      • .className { color: red; }
      • [attr=value] { color: red; }
      • :hover { color: red; }
  4. 类型选择器、伪元素
    • 权重: 1
    • 示例:
      • p { color: red; }
      • ::before { content: ' '; }
  5. 通配符、子代选择器、相邻兄弟选择器、通用兄弟选择器等
    • 权重: 0
    • 示例:
      • * { color: red; }
      • div > p { color: red; }
      • h1 + p { color: red; }
      • p ~ div { color: red; }
  6. 继承
    • 不计算权重,但继承的样式会根据其来源元素的规则来决定。
  7. 重要性 (!important):
    • 权重: 无限大
    • 示例: .className { color: red !important; }
计算方法
  • 将每个选择器分解为其组成部分,并为每种类型分配一个权重值。
  • 将这些值相加以得出最终的权重总和。
  • 如果两个规则具有相同的权重,则最后定义的规则会覆盖之前的规则(除非其中一个使用了 !important)。
示例

假设我们有以下CSS规则:

  1. .classA .classB { color: blue; } —— 类选择器 (10 + 10 = 20)
  2. #idA.classA { color: green; } —— ID 选择器 (100 + 10 = 110)
  3. div > p { color: yellow; } —— 类型选择器 (1)
  4. body p { color: red; } —— 类型选择器 (1)

如果 <p> 元素同时具有 .classB#idA,则将应用绿色文本,因为它的权重最高 (110)。

注意事项
  • !important 应谨慎使用,因为它可以导致意外的结果并使得样式难以维护。
  • 使用更具体的选择器通常会导致更高的权重,但这可能会使代码变得复杂且难以管理。
  • 在实际开发中,尽量避免复杂的嵌套选择器和不必要的 !important 使用。

CSS的三大特性

image-20240728155701731

能继承的属性不会影响元素的布局。简单来说就是和盒子模型相关的都不可以继承

CSS像素

像素说白了就是屏幕上的一个个小的像素点。

CSS颜色属性

1. 概述

  • 用途:在网页设计中设置元素的背景色、文字颜色等。
  • 语法color: value;
  • :CSS 支持多种颜色表示方式,包括颜色名、十六进制数、RGB、RGBA、HSL、HSLA等。

2. 基本颜色名称

  • 提供了140种预定义的颜色名称,例如:
    • red, blue, green, yellow, purple, orange等。

3. 十六进制数(HEX)

  • 格式#RRGGBB
  • 说明:每个RR, GG, BB分别代表红、绿、蓝三色的亮度值(00到FF)。
    • 示例:#FF0000 (红色), #00FF00 (绿色), #0000FF (蓝色).

4.十六进制颜色加Alpha通道(HEXA)

格式

  • HEXA颜色采用#RRGGBBAA的格式,其中RRGGBB与HEX相同,而AA表示Alpha通道的透明度值,范围同样是从00FF
  • Alpha通道的值同样由两位十六进制数表示,00表示完全透明,FF表示不透明。

示例

  • 不透明的红色:#FF0000FF
  • 半透明的红色(50%透明度):#FF000080 (因为80大约是FF的一半)
  • 完全透明:#00000000

5.RGB

1. RGB (Red, Green, Blue)

  • 格式rgb(r, g, b)rgb(r g b)
  • 说明:r, g, b 分别代表红、绿、蓝三色的亮度值(0到255)。
    • 示例:rgb(255, 0, 0) (红色)

2. RGBA (Red, Green, Blue, Alpha)

  • 格式rgba(r, g, b, a)rgba(r g b / a)
  • 说明:r, g, b 同上;a 是透明度(0.0 到 1.0)。
    • 示例:rgba(255, 0, 0, 0.5) (半透明红色)

6.HSL (Hue, Saturation, Lightness)

1. HSL (Hue, Saturation, Lightness)

  • 格式hsl(h, s%, l%)hsl(h s% l%)
  • 说明:h 表示色调角度(0到360),s 表示饱和度(0%到100%),l 表示亮度(0%到100%)。
    • 示例:hsl(0, 100%, 50%) (红色)

2. HSLA (Hue, Saturation, Lightness, Alpha)

  • 格式hsla(h, s%, l%, a)hsla(h s% l% / a)
  • 说明:同HSL,a 表示透明度(0.0 到 1.0)。
    • 示例:hsla(0, 100%, 50%, 0.5) (半透明红色)

HSL和HSLA依靠色相环来定颜色,下面是色相环

image-20240728190517522

CSS字体属性

1. 概述

  • 用途:用于控制文本的外观,包括字体家族、大小、样式等。
  • 适用性:这些属性主要应用于文本元素,如<p>, <h1>, <span>等。

2. font-size

  • 作用:设置字体大小。
  • 语法font-size: value;
  • 单位:像素(px),百分比(%), em, rem等。
    • 示例:font-size: 16px;font-size: 1.5em;

3. font-family

  • 作用:指定字体家族。
  • 语法font-family: value;
  • 值:一个或多个字体名称,或通用字体家族名称。
    • 示例:font-family: Arial, sans-serif;
    • font-family: "微软雅黑";
    • font-family: "楷体";
    • font-family: "宋体";
    • font-family: "华文彩云";
  • 多个字体家族,会按顺序查找,如果找到即可用,找到能用的为止。并且写多个字体族时,通常在最后写上serif(衬线字体)sans-serif(非称线字体)
  • 衬线字体:有棱有角,笔画分明
  • 非衬线字体:棱角不明显或根本没有,圆润。

4.font-style

font-style 属性用于设置或更改文本的字体样式,主要用于控制文本是否以斜体 (italic) 或正常 (normal) 显示。此外,还有一个特殊的值 oblique,它会倾斜文本但不使用真正的斜体字体。

语法

1
font-style: normal | italic | oblique;
  • normal:
    • 使用字体的正常样式。
    • 这是默认值,如果一个元素没有定义 font-style,那么它将使用正常样式。
  • italic:
    • 使用字体的斜体样式。
    • 如果字体系列包含斜体字体,则使用该斜体字体;如果没有,则浏览器会尝试模拟斜体效果。
  • oblique:
    • 倾斜文本。
    • italic 类似,但是它不会查找斜体字体,而是直接倾斜文本来模仿斜体效果。

5.font-weight

font-weight 属性用于设置或更改文本的粗细程度。它可以让你控制文本显示为粗体、正常体或其他粗细等级。

语法

1
font-weight: normal | bold | bolder | lighter | 100 | 200 | ... | 900;
  • normal:
    • 使用字体的正常粗细。
    • 默认值通常是400(除非字体特别指定)。
  • bold:
    • 使用字体的粗体版本。
    • 如果字体系列包含粗体字,则使用该粗体字;如果没有,则通常会使用加粗效果。
  • bolder:
    • 设置文本比其父元素更粗。
    • 这是一个相对值,取决于父元素的 font-weight
  • lighter:
    • 设置文本比其父元素更细。
    • 同样是一个相对值。
  • 100900:
    • 数字值,表示字体的粗细级别。
    • 100是最细的,900是最粗的。
    • 常见的数值包括100、200、300、400(正常)、500、600、700(粗体)、800和900。

6.字体复合属性

  • 定义:在 CSS 中,font 是一个复合属性,它允许开发者同时设置多个与字体相关的单一属性。
  • 优点:简化 CSS 代码,提高可维护性和可读性。

1. 字体复合属性包含哪些子属性?

  • 字体风格 (font-style):normal | italic | oblique
  • 字体变体 (font-variant):normal | small-caps
  • 字体加粗 (font-weight):normal | bold | 100 | 200900
  • 字体尺寸 (font-size):16px | 1em | 100%
  • 行高 (line-height):24px | 1.5 | 150%
  • 字体家族 (font-family):Arial | sans-serif | serif | monospace

2. 使用顺序

  • 顺序font-stylefont-variantfont-weightfont-size/[line-height] → font-family
  • 注意font-sizefont-family 是必需的,其他属性是可选的。line-height 可以写在 font-size 后面,用 / 分隔。

3.示例

1
2
3
p {
font: italic small-caps bold 16px/1.5 Georgia, serif;
}

CSS常用文本属性

1.文本颜色

1. 什么是文本颜色属性?

  • 定义:CSS 中的文本颜色属性用于控制文本的颜色。
  • 主要属性colortext-decoration-color

2.color 属性

  • 用途:设置文本颜色。
  • 语法color: <color-value>;
  • 值:
    • 关键字:如 red, blue, green
    • 十六进制:如 #FF0000(红色)。
    • RGB:如 rgb(255, 0, 0)(红色)。
    • RGBA:如 rgba(255, 0, 0, 0.5)(半透明红色)。
    • HSL:如 hsl(0, 100%, 50%)(红色)。
    • HSLA:如 hsla(0, 100%, 50%, 0.5)(半透明红色)。

2.文本间距

1. 什么是文本间距?

  • 定义:文本间距指的是文本字符之间的空间,包括字符间距、单词间距、行间距等。

2. letter-spacing 属性

  • 用途:设置字符之间的间距。
  • 语法letter-spacing: <spacing-value>;
  • 值:
    • 正数增加字符间的间距。
    • 负数减少字符间的间距。

示例

1
2
3
p {
letter-spacing: 2px; /* 字符间增加 2px 的间距 */
}

3. word-spacing 属性

  • 用途:设置单词之间的间距。
  • 语法word-spacing: <spacing-value>;
  • 值:
    • 正数增加单词间的间距。
    • 负数减少单词间的间距。

4. line-height 属性

  • 用途:设置行间距。
  • 语法line-height: <line-height-value>;
  • 值:
    • 单位值(如 24px):固定行高。
    • 无单位值(如 1.5):基于字体大小的比例行高。

5. text-indent 属性

  • 用途:设置首行缩进。
  • 语法text-indent: <indent-value>;
  • 值:
    • 单位值(如 2em):首行缩进的距离。

3.文本修饰

1. 什么是文本修饰?

  • 定义:文本修饰是指对文本进行额外的视觉处理,如添加下划线、删除线等。

2. text-decoration 属性

  • 用途:设置文本的修饰效果。
  • 语法text-decoration: none | underline | overline | line-through;
  • 值:
    • none:取消所有修饰。
    • underline:在文本下方添加下划线。
    • overline:在文本上方添加一条线。
    • line-through:在文本中间添加一条线,表示文本被删除。
1
2
3
4
5
6
7
8
9
10
11
a {
text-decoration: none; /* 取消链接的默认下划线 */
}

.highlight {
text-decoration: underline; /* 添加下划线 */
}

.deleted {
text-decoration: line-through; /* 添加删除线 */
}

3.text-decoration 复合属性

下面的组合实际上是text-decoration-line 属性,text-decoration-style 属性,text-decoration-color 属性的组合

我们可以把这三个属性写在一个当中

示例

1
2
3
a {
text-decoration:underline wavy red
}

text-decoration-line的属性值有:

  • none:无修饰线。
  • underline:下划线。
  • overline:上划线。
  • line-through:中划线。

text-decoration-style 的属性值有:

  • solid:实线。
  • double:双线。
  • dotted:点线。
  • dashed:虚线。
  • wavy:波浪线。

text-decoration-color即是颜色属性。

4.文本对齐

1. 什么是文本对齐?

  • 定义:文本对齐是指文本在容器内的水平或垂直方向上的排列方式。

2. text-align 属性(水平对齐)

  • 用途:设置文本的水平对齐方式。

  • 语法text-align: left | right | center | justify;

    • left:文本左对齐。
    • right:文本右对齐。
    • center:文本居中对齐。
    • justify:文本两端对齐,自动调整单词间距使每行文本长度相等。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
p {
text-align: center; /* 文本居中对齐 */
}

.left-align {
text-align: left; /* 文本左对齐 */
}

.right-align {
text-align: right; /* 文本右对齐 */
}

.justify-text {
text-align: justify; /* 文本两端对齐 */
}

3.垂直对齐

image-20240729164020031

5.行高

1. 什么是行高?

  • 定义:行高是指文本行之间的垂直间距。
  • 重要性:良好的行高可以提高文本的可读性和美观度。

2. line-height 属性

  • 用途:设置或更改文本的行高。
  • 语法line-height: <line-height-value>;
  • 值:
    • 单位值:如 24px,表示固定的高度。
    • 比例值:如 1.5150%,表示相对于当前字体大小的比例高度。数字比较常用

3. 示例

1
2
3
4
p {
font-size: 16px; /* 字体大小 */
line-height: 1.5; /* 行高为字体大小的 1.5 倍 */
}

4. 计算行高

  • 计算公式行高 = 字体大小 * 行高比例值
  • 示例:
    • 如果字体大小为 16px,并且 line-height 设置为 1.5,那么行高就是 16px * 1.5 = 24px

5.行高的应用场景

  • 调整多行文字

  • 单行文字的垂直居中

    • 写法:height=line-height即可

    • p {
          heigth: 100px;
          line-height:100px;
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18

      **要注意是单行文字**。

      ### 6.关于行高的一些注意事项

      ![image-20240729153706567](../images/JavaScript/image-20240729153706567.png)

      ## 6.vertical-align

      ### 1. 什么是 `vertical-align`?

      - **定义**:`vertical-align` 属性用于设置行内元素(如 `<span>`、`<img>` 或 `<input>`)在其包含块中的垂直对齐方式。
      - **适用范围**:**仅适用于行内元素或行内块元素。**

      ### 2. `vertical-align` 的语法

      ```css
      vertical-align: baseline | sub | super | top | text-top | middle | bottom | text-bottom | <percentage> | <length>;

3. vertical-align 的值

  • **baseline**:默认值,元素底部与文本基线对齐。
  • **sub**:元素作为下标对齐。
  • **super**:元素作为上标对齐。
  • **top**:元素顶部与包含块的顶部对齐。
  • **text-top**:元素顶部与文本顶部对齐。
  • **middle**:元素垂直居中对齐。
  • **bottom**:元素底部与包含块的底部对齐。
  • **text-bottom**:元素底部与文本底部对齐。
  • **<percentage>**:元素垂直对齐的百分比,相对于包含块的高度。
  • **<length>**:元素垂直对齐的具体长度,如 2px
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
span {
vertical-align: middle; /* 垂直居中对齐 */
}

img {
vertical-align: bottom; /* 图像底部与文本底部对齐 */
}

sup {
vertical-align: super; /* 上标对齐 */
}

sub {
vertical-align: sub; /* 下标对齐 */
}

4. 注意事项

  • 行内元素vertical-align 只适用于行内元素。
  • 块级元素:对于块级元素,可以使用 Flexbox 或 Grid 布局来实现垂直居中。
  • 百分比值:使用百分比时,该百分比是相对于包含块的高度计算的。
  • 长度值:使用长度值时,可以精确控制元素的垂直位置

CSS列表相关属性

1. 什么是列表?

  • 定义:列表是一种常见的 HTML 元素,用于展示一系列条目。

  • 类型

    :主要有两种类型的列表:

    • 有序列表<ol>):带有编号的列表。
    • 无序列表<ul>):带有项目符号的列表。

2. list-style 属性

  • 用途list-style 是一个复合属性,用于设置列表项的样式。

  • 语法list-style: <list-style-type> <list-style-position> <list-style-image>;

  • 值:

    • **list-style-type**:定义列表项的标记类型。
    • **list-style-position**:定义列表项标记相对于文本的位置。
    • **list-style-image**:定义列表项标记为图像。

3. list-style-type 属性

  • 用途:设置列表项的标记类型。

  • 语法list-style-type: disc | circle | square | decimal | lower-roman | upper-roman | ...;

  • 值:

    • disc:实心圆点。
    • circle:空心圆圈。
    • square:方块。
    • decimal:阿拉伯数字。
    • lower-roman:小写罗马数字。
    • upper-roman:大写罗马数字。
    • 更多值,如 lower-alphaupper-alpha 等。

4. list-style-position 属性

  • 用途:设置列表项标记的位置。

  • 语法list-style-position: inside | outside;

  • 值:

    • inside:列表标记位于文本之内。
  • outside:列表标记位于文本之外(默认值)。

5. list-style-image 属性

  • 用途:设置列表项标记为图像。

  • 语法list-style-image: url("image-url");

  • 值:

    • url("image-url"):指定图像 URL。

6. list-style 复合属性

  • 用途:同时设置 list-style-typelist-style-positionlist-style-image

  • 语法list-style: <list-style-type> <list-style-position> <list-style-image>;

    示例:

    1
    2
    3
    ul {
    list-style: square inside url("marker.png");
    }

7.示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* 无序列表 */
ul {
list-style-type: square;
list-style-position: inside;
}

/* 有序列表 */
ol {
list-style-type: lower-roman;
}

/* 自定义列表项图像 */
ul.custom-list {
list-style-image: url("marker.png");
}

CSS边框相关属性

1. 什么是边框?

  • 定义:边框是在元素周围绘制的线,用于定义元素的边界。
  • 用途:边框可以用来美化元素、强调内容或分隔不同的区域。

2. border 属性

  • 用途:设置边框的宽度、样式和颜色。
  • 语法border: <width> <style> <color>;
  • 值:
    • <width>:边框的宽度,如 1px
    • <style>:边框的样式,如 soliddasheddotted 等。
    • <color>:边框的颜色,可以是颜色名称、十六进制值、RGB 值等。

3. border-width 属性

  • 用途:设置边框的宽度。
  • 语法border-width: <top> <right> <bottom> <left>;
  • 值:
    • <top>:上边框宽度。
    • <right>:右边框宽度。
    • <bottom>:下边框宽度。
    • <left>:左边框宽度。
  • 简写形式:可以使用一个值(四边相同),两个值(上下、左右),或三个值(上、左右、下)。

4. border-style 属性

  • 用途:设置边框的样式。
  • 语法border-style: <top> <right> <bottom> <left>;
  • 值:
    • none:没有边框。
    • hidden:隐藏边框,类似于 none,但在表格中有所不同。
    • dotted:点线。
    • dashed:虚线。
    • solid:实线。
    • double:双线。
    • groove:三维凹槽。
    • ridge:三维凸起。
    • inset:三维内嵌。
    • outset:三维外嵌。
  • 简写形式:同 border-width

5. border-color 属性

  • 用途:设置边框的颜色。
  • 语法border-color: <top> <right> <bottom> <left>;
  • 值:
    • <top>:上边框颜色。
    • <right>:右边框颜色。
    • <bottom>:下边框颜色。
    • <left>:左边框颜色。
  • 简写形式:同 border-width

6. border-radius 属性(C3)

  • 用途:设置边框的圆角。
  • 语法border-radius: <top-left> <top-right> <bottom-right> <bottom-left>;
  • 值:
    • <top-left>:左上角圆角半径。
    • <top-right>:右上角圆角半径。
    • <bottom-right>:右下角圆角半径。
    • <bottom-left>:左下角圆角半径。
  • 简写形式:可以使用一个值(四个角相同),两个值(水平、垂直),三个值(第一个值用于顶部角,第二个值用于右下角,第三个值用于左下角,顶部角使用第一个值。),或四个值(第一和第三为水平,第二和第四为垂直)。

7. border-top, border-right, border-bottom, border-left 属性

  • 用途:分别设置顶部、右侧、底部和左侧的边框。
  • 语法border-top: <width> <style> <color>;
  • 简写形式border-top-width, border-top-style, border-top-color

8. 示例

1
2
3
4
5
6
7
8
9
10
11
12
div {
border: 2px solid #000; /* 2px 实线黑色边框 */
border-radius: 10px; /* 圆角半径为 10px */
padding: 20px; /* 内边距 */
margin: 10px; /* 外边距 */
}

button {
border: 1px dashed #ccc; /* 1px 虚线灰色边框 */
border-radius: 5px; /* 圆角半径为 5px */
padding: 10px 20px; /* 内边距 */
}

9. 小贴士

  • 简写形式border 属性可以一次性设置边框的宽度、样式和颜色。
  • **border-radius**:可以给元素添加圆角效果,使界面更加友好。
  • 兼容性:这些属性在所有现代浏览器中都得到了很好的支持。
  • 如果只写了边框的宽度,但是没有样式,会造成边框不显示

CSS表格独有属性

1. border-collapse 属性

  • 用途:控制表格边框是否合并为单一线条。
  • 语法border-collapse: collapse | separate;
  • 值:
    • collapse:边框合并为单一线条。
    • separate:边框各自独立(默认值)。

2. border-spacing 属性

  • 用途:设置表格单元格之间的间距。
  • 语法border-spacing: <horizontal-spacing> <vertical-spacing>;
  • 值:
    • <horizontal-spacing>:水平间距。
    • <vertical-spacing>:垂直间距。
  • 注意:仅在 border-collapse: separate; 时有效。

3. empty-cells 属性

  • 用途:控制是否显示空白单元格的边框和背景。
  • 语法empty-cells: show | hide;
  • 值:
    • show:显示空白单元格的边框和背景(默认值)。
    • hide:隐藏空白单元格的边框和背景。

4. caption-side 属性

  • 用途:设置表格标题的位置。
  • 语法caption-side: top | bottom;
  • 值:
    • top:标题位于表格上方(默认值)。
    • bottom:标题位于表格下方。

5. table-layout 属性

  • 用途:控制表格的布局算法。
  • 语法table-layout: auto | fixed;
  • 值:
    • auto:根据内容自动调整列宽(默认值)。
    • fixed:使用固定的列宽,即使内容超出也会截断。

6. 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
table {
border-collapse: collapse; /* 合并边框 */
border: 1px solid #ccc; /* 添加边框 */
width: 100%; /* 表格宽度 */
table-layout: fixed; /* 固定列宽 */
empty-cells: show; /* 显示空白单元格 */
caption-side: bottom; /* 标题位于下方 */
}

th, td {
border: 1px solid #ddd; /* 单元格边框 */
padding: 8px; /* 内边距 */
text-align: left; /* 文本左对齐 */
}

th {
background-color: #f2f2f2; /* 表头背景色 */
}

7. 小贴士

  • **border-collapse: collapse;**:通常用于创建清晰的表格边框。
  • **table-layout: fixed;**:适用于需要固定列宽的情况,例如打印或限制宽度的设计。
  • **empty-cells: hide;**:可以隐藏空白单元格的边框,使表格看起来更整洁。

CSS背景相关属性

1. background-color

  • 用途:设置元素的背景颜色。

  • 语法background-color: <color>;

  • 示例:

    1
    2
    3
    .example {
    background-color: #ff0000;
    }

2. background-image

  • 用途:设置元素的背景图像。

  • 语法background-image: url(<image-url>);

  • 示例:

    1
    2
    3
    .example {
    background-image: url('path/to/image.jpg');
    }

3. background-repeat

  • 用途:控制背景图像的重复方式。

  • 可选值:

    • repeat (默认) - 横向和纵向重复
    • no-repeat - 不重复
    • repeat-x - 横向重复
    • repeat-y - 纵向重复
  • 语法background-repeat: <repeat-style>;

  • 示例:

    1
    2
    3
    .example {
    background-repeat: no-repeat;
    }

4. background-position

  • 用途:设置背景图像的位置。

  • 语法background-position: <horizontal-value> <vertical-value>;

  • 可选值:

    • 关键字:top, center, bottom, left, right
    • 百分比:如 50% 50% 表示居中位置
    • 长度:如 20px 40px
  • 示例:

    1
    2
    3
    .example {
    background-position: center bottom;
    }

5. background-size(C3)

  • 用途:定义背景图像的尺寸。

  • 可选值:

    • auto (默认) - 图像保持原始大小
    • cover - 图像会拉伸以覆盖整个容器,可能会被裁剪
    • contain - 图像会拉伸以适应容器,但不改变比例
    • 长度或百分比
  • 语法background-size: <size>;

  • 示例:

    1
    2
    3
    .example {
    background-size: cover;
    }

6. background-attachment

  • 用途:设置背景图像是否随页面滚动而滚动。

  • 可选值:

    • scroll (默认) - 背景图像随页面滚动
    • fixed - 背景图像固定在视窗上
  • 语法background-attachment: <attachment>;

  • 示例:

    1
    2
    3
    .example {
    background-attachment: fixed;
    }

7. background(C3)

  • 用途:组合多个背景属性为一个声明。

  • 语法background: <color> <image> <repeat-style> <attachment> <position>;

  • 示例:

    1
    2
    3
    .example {
    background: #f0f0f0 url('pattern.jpg') repeat-x scroll 0 0;
    }

8. background-blend-mode(C3)

  • 用途:指定背景图层间的混合模式。

  • 语法background-blend-mode: <blend-mode>;

  • 示例:

    1
    2
    3
    4
    .example {
    background-image: url('bg1.jpg'), url('bg2.jpg');
    background-blend-mode: multiply;
    }

属性值

  • normal (默认值)
    • 表示背景图层之间没有特殊混合效果,即上层背景完全覆盖下层背景。
  • multiply
    • 乘法混合模式。上层背景的颜色与其下的背景颜色相乘,得到的结果颜色通常比原始颜色更深。
  • screen
    • 屏幕混合模式。上层背景的颜色与其下的背景颜色的补色相乘,得到的结果颜色通常比原始颜色更亮。
  • overlay
    • 覆盖混合模式。根据底层颜色的不同,可能会使上层颜色变暗或变亮。
  • darken
    • 取两层颜色中较暗的颜色作为结果颜色。
  • lighten
    • 取两层颜色中较亮的颜色作为结果颜色。
  • color-dodge
    • 避开颜色混合模式。通常会使颜色变得更亮,除非下层颜色接近黑色。
  • color-burn
    • 烧灼颜色混合模式。通常会使颜色变得更暗,除非下层颜色接近白色。
  • hard-light
    • 硬光混合模式。如果混合色比50%灰亮,则混合色变亮;否则混合色变暗。
  • soft-light
    • 柔光混合模式。类似于硬光,但过渡更加平滑。
  • difference
    • 差异混合模式。取上层和下层颜色的差值作为结果颜色。
  • exclusion
    • 排除混合模式。类似差异混合模式,但对比度较低。
  • hue
    • 色相混合模式。保持下层背景的亮度和饱和度,而使用上层背景的颜色作为色相。
  • saturation
    • 饱和度混合模式。保持下层背景的亮度和色相,而使用上层背景的颜色作为饱和度。
  • color
    • 颜色混合模式。保持下层背景的亮度,而使用上层背景的颜色作为色相和饱和度。
  • luminosity
    • 亮度混合模式。保持下层背景的颜色(色相和饱和度),而使用上层背景的颜色作为亮度。

9. background-origin(C3)

  • 用途:确定背景图像的位置相对于哪个盒子边缘。

  • 可选值:

    • padding-box (默认)
    • border-box
    • content-box
  • 语法background-origin: <origin>;

  • 示例:

    1
    2
    3
    .example {
    background-origin: border-box;
    }

属性值

  • padding-box: 背景图像相对于内边距区域定位。
    • 这意味着背景图像不会延伸到内边距以外的部分,即不会覆盖边框和外边距。
  • border-box: 背景图像相对于边框区域定位。
    • 这意味着背景图像会延伸到边框的外部边缘,覆盖边框区域。
  • content-box: 背景图像相对于内容区域定位。
    • 这意味着背景图像仅在内容区域内显示,不会延伸到内边距或边框以外的部分。

10. background-clip(C3)

  • 用途:确定背景剪切到哪个边界盒。

  • 可选值:

    • border-box(默认值)
    • padding-box
    • content-box
    • text:背景图只呈现在文字上,前提是该文字是透明的
  • 语法background-clip: <clip-area>;

  • 示例:

    1
    2
    3
    .example {
    background-clip: content-box;
    }

CSS鼠标相关属性

  • 作用:控制鼠标在某元素上显示的图示
  • 语法:cursor:value

下面列举几个比较常用的属性值

  • pointer:小手
  • move:移动图标
  • text:文字选择器
  • crosshair:十字架
  • wait:等待
  • help:帮助

拓展:自定义鼠标图片

1
2
3
div {
cursor: url(image),pointer;
}

!!!注意

不要忘了指定光标类型poniter

CSS盒子模型(重点)

1.常用的长度单位

  • 像素(px)

    • 最常用的长度单位。
    • 在大多数情况下,1px等于屏幕上的一个物理像素。
    • 注意不同设备的像素密度可能不同。
  • 百分比(%)

    • 相对于父元素的尺寸。
    • 非常适合响应式设计。
    • 例如,如果一个元素的宽度设置为50%,那么它的宽度将是其父元素宽度的一半。
  • 视口单位(vw, vh, vmin, vmax)

    • 比如我现在的屏幕大小是750 * 1200
    • vw: 视口宽度的百分比(1vw = 1% of viewport width)。则1vw = 7.5px
    • vh: 视口高度的百分比(1vh = 1% of viewport height)。则1vh = 12px
    • vmin: 视口较小尺寸的百分比(或两个百分比中的较小者)。
    • vmax: 视口较大尺寸的百分比(或两个百分比中的较大者)。
    • 这些单位非常适合响应式设计,因为它们基于浏览器窗口的尺寸。
  • em

    • 相对于当前元素的字体大小。
    • 如果当前元素没有显式设置字体大小,则相对于父元素的字体大小。
    • 例如,如果一个元素的字体大小为16px,并且设置了2em的宽度,那么该元素的宽度就是32px。
  • rem

    • 相对于根元素(通常是<html>元素)的字体大小。
    • em类似,但是更易于全局控制,因为它始终相对于根元素。
  • rpx(Responsive Pixel)
    • 定义:rpx 是一种基于屏幕宽度的相对单位,它可以根据屏幕的宽度自动调整大小,从而实现不同屏幕尺寸下的适配。

    • 计算方式

      • 750rpx = 设备宽度(对于iPhone 6/7/8来说,设备宽度为375px)
      • 因此,1rpx = 375px / 750 = 0.5px
    • 适用场景

      • 主要用于微信小程序、React Native、Weex等移动应用开发环境。
      • 特别适合用于跨平台的移动应用开发,可以简化不同屏幕尺寸的适配工作。

示例代码

在微信小程序中使用rpx的例子如下:

1
2
3
4
5
6
7
8
9
/* 微信小程序中的CSS样式 */
.view {
width: 100rpx; /* 宽度为屏幕宽度的1/7.5 */
height: 200rpx; /* 高度为屏幕宽度的2/7.5 */
}

.text {
font-size: 32rpx; /* 字体大小为屏幕宽度的32/750 */
}

总结

  • rpx 单位可以确保在不同屏幕尺寸的设备上元素的尺寸保持一致的比例。
  • 750rpx 相当于 iPhone 6/7/8 的屏幕宽度(375px),这意味着1rpx 大约等于 0.5px。
  • rpx 单位非常适合用于微信小程序和跨平台移动应用开发,能够轻松处理不同设备的屏幕适配问题。

2.元素的显示模型

块级元素 (Block Elements)

  • 定义:块级元素默认独占一行,即每个块级元素都会从新的一行开始,并且其后的块级元素也会在新的一行开始。
  • 特性
    • 宽度默认为容器的100%。
    • 可以设置高度、宽度、对齐等属性。
    • 内部可以包含块级元素和其他类型的元素。
  • 示例
    • <div><p><ul><table><h1><h6> 等。
    • olullidldtdd
    • form

行内元素 (Inline Elements)

  • 定义:行内元素不会独占一行,它们只占据实际所需的宽度,并与相邻的行内元素位于同一行。
  • 特性
    • 不可设置宽度和高度
    • 默认宽度由内容撑开
    • 默认高度由内容撑开
  • 示例
    • <span><a><img><strong><em> 等。

行内块元素 (Inline-Block Elements)

  • 定义:行内块元素结合了块级元素和行内元素的特点,它们像行内元素一样在同一行显示,但又像块级元素那样可以设置宽度和高度。
  • 特性
    • 可以设置宽度和高度。
    • 不会独占一行,可以与其他行内元素并排显示。
    • 默认宽度由内容撑开
    • 默认高度由内容撑开
  • 示例
    • 使用 CSS 属性 display: inline-block; 将任何元素变为行内块元素。

总结

  • 块级元素:独占一行,可设置宽高。
  • 行内元素:不独占一行,不可设置宽高。
  • 行内块元素:在同一行显示,可设置宽高。

3.盒子模型的组成

1. 盒子模型概述

  • 定义:CSS盒子模型描述了HTML元素如何在页面上渲染,每个元素都被视为一个矩形盒子。

  • 组成部分

    :盒子由四个部分组成:

    • **Content (内容)**:元素的实际内容,如文本或图片。
    • **Padding (内边距)**:内容与边框之间的空间。
    • **Border (边框)**:围绕内容和内边距的一条线。
    • **Margin (外边距)**:边框与周围元素之间的空白区域。

2. 盒子模型的计算

  • 元素的总宽度 = width + padding + border + margin
  • 元素的总高度 = height + padding + border + margin

3.盒子模型图示

image-20240730144704507

4.盒子的内边距(padding)

padding实际上是一个复合属性。使用方法如下

  • padding:10px:会在四个方向上同时使用10px的内边距
  • padding:10px 20px:10px会应用在上下方向,20px会应用在左右方向
  • padding:10px 20px 30px:依次是上10px,左右20px,下30px
  • padding:10px 20px 30px 40px:依次是上10px,右20px,下30px,左40px

你也可以单独给一个方向去设置。语法如下

padding-方向:value

方向可以写left,right,top,bottom

注意:

  1. padding不能为负数
  2. padding设置于行内元素时,上下方向的内边距有可能会出现占位问题。左右方向没有问题
  3. 块级元素和行内块级元素没有问题

5.盒子的边框(border)

详见CSS边框相关属性

6.盒子的外边距(margin)

margin实际上是一个复合属性。使用方法如下

  • margin:10px:会在四个方向上同时使用10px的外边距
  • margin:10px 20px:10px会应用在上下方向,20px会应用在左右方向
  • margin:10px 20px 30px:依次是上10px,左右20px,下30px
  • margin:10px 20px 30px 40px:依次是上10px,右20px,下30px,左40px

你也可以单独给一个方向去设置。语法如下

margin-方向:value

方向可以写left,right,top,bottom

注意事项:

  1. 子元素的 margin ,是参考父元素的 content 计算的。(因为是父亲的 content 中承装着子元素)
  2. margin、左 margin:影响自己的位置;下 margin、右 margin:影响后面兄弟元素的位置。
  3. 块级元素、行内块元素,均可以完美地设置四个方向的 margin;但行内元素,左右 margin 可以完美设置,上下 margin 设置无效。
  4. margin 的值也可以是 auto,如果给一个块级元素设置左右 margin 都为 auto,该块级元素会在父元素中水平居中。
  5. margin 的值可以是负值。

7.margin塌陷问题

什么是 margin 塌陷?
第一个子元素的上 margin 会作用在父元素上,最后一个子元素的下 margin 会作用在父元素上。
如何解决 margin 塌陷?

  • 方案一:给父元素设置不为0的 padding。
  • 方案二:给父元素设置宽度不为0的 border。
  • 方案三:给父元素设置 css样式 overflow:hidden

8.margin合并问题

有设定浮动绝对定位的元素不会发生外边距折叠。

什么情况下会发生元素折叠

image-20240730180522748

如何解决上述的margin合并问题呢?

image-20241018220418989

9.处理内容溢出

CSS属性名 功能 属性值
overflow 溢出内容的处理方式 visible:显示,默认值
hidden:隐藏
scroll:显示滚动条,不论内容是否溢出
auto:自动显示滚动条,内容不溢出不显示
overflow-x 水平溢出内容的处理方式 overflow
overflow-y 垂直溢出内容的处理方式 overflow

CSS元素隐藏

1.visibility属性

visibility属性默认值是show,如果设置为hidden,元素会隐藏,虽然元素看不到了,但是还占有原来的位置

2.display属性

设置display:none,就可以让元素隐藏了,元素会彻底隐藏,不会占位。

CSS默认样式

对于一个元素,我们不设置任何样式,那么浏览器也会自动的为其添加一些样式,这些样式就被成为默认样式。

如果查看默认样式呢?

通过F12打开浏览器工具,找到要查看的元素,找到右上角写着user agent stylesheet就是默认样式。

image-20240731141143929

优先级:元素的默认样式 > 继承的样式。可以通过选中该元素来重置元素的默认样式。

CSS布局技巧(重要)

image-20240731143437530

1.元素间的空白问题

image-20240731144555978

2.行内块的幽灵空白问题

image-20240731145557047

CSS浮动

什么是浮动?

  • 浮动让一个元素从正常的文档流中“浮出”,并且可以向左或向右移动,直到碰到容器的边缘或其他浮动元素。
  • 其他非浮动元素会围绕着浮动元素排列。

基本语法

1
2
3
.element {
float: left; /* 或 right, none */
}

可选值

  • left: 元素向左浮动。
  • right: 元素向右浮动。
  • none: 元素不浮动(默认值)。

浮动的例子

假设我们有三个<div>元素,我们将第一个设置为向左浮动,第二个设置为向右浮动,第三个保持不浮动。

1
2
3
<div class="box box1">Box 1</div>
<div class="box box2">Box 2</div>
<div class="box box3">Box 3</div>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.box {
width: 100px;
height: 100px;
margin: 10px;
}

.box1 {
float: left;
background-color: red;
}

.box2 {
float: right;
background-color: blue;
}

.box3 {
background-color: green;
}

在这个例子中,Box 1将向左浮动,Box 2将向右浮动,而Box 3将根据Box 1Box 2的位置来排列自身。

清除浮动(处理浮动后的影响)

当元素浮动时,它们会影响后续的非浮动元素,有时需要使用清除(clear)属性来避免这种情况。

1
2
3
.clear {
clear: both; /* 或 left, right, none */
}
  • both: 在元素之前不允许任何浮动元素。
  • left: 在元素之前不允许左侧的浮动元素。
  • right: 在元素之前不允许右侧的浮动元素。
  • none: 不清除任何浮动元素(默认值)。

其他方法:

  1. 方案一:给父元素指定高度。

  2. 方案二: 给父元素也设置浮动,带来其他影响。

  3. 方案三:给父元素设置 overflow:hidden

  4. 方案四: 在所有浮动元素的最后面,添加一个块级元素,并给该块级元素设置 clear:both。

  5. 方案五: 给浮动元素的父元素,设置伪元素,通过伪元素清除浮动,原理与方案四相同。=-=>推荐使用

    1
    2
    3
    4
    5
    .parent::after {
    content:'';
    display:block;
    clear:both
    }

注意事项

  • 浮动可能会导致父容器的高度塌陷问题。可以使用额外的clearfix类或者overflow属性来解决这个问题。
  • 浮动元素不能被包含在一个固定高度的容器内,因为浮动元素会使容器自动扩展以容纳它们。
  • 浮动只适用于块级元素。对于内联元素,可以先将其转换为块级元素再应用浮动。

浮动的特点

image-20240731151519674

浮动后的影响

  • 对兄弟元素的影响:浮动元素后面的兄弟元素,会占据浮动之前的位置,在浮动元素的下面显示;而位于浮动元素前面的兄弟元素无影响
  • 对父元素的影响:不能撑起父元素的高度,导致父元素高度塌陷;但父元素的宽度依然控制着浮动元素。

(面试题)使用clear清除浮动的原理?

image-20241018213355242

CSS定位(重要)

1.CSS相对定位

1.如何设置相对定位

在CSS中,可以通过设置position属性为relative来使一个元素成为相对定位元素。相对定位意味着元素相对于其正常位置进行偏移。换句话说,元素的位置相对于它原本应有的位置(即如果该元素没有被定位)进行调整。

1
2
3
4
5
6
/* 示例代码 */
.element {
position: relative;
left: 20px; /* 向右移动20像素 */
top: -10px; /* 向上移动10像素 */
}
  • lefttop属性用于控制元素在其原始位置的基础上向右或向上移动的距离。
  • 可以使用rightbottom属性来指定向左或向下移动的距离。
  • 如果同时设置了leftright或者topbottom,则仅最后一个声明有效。

2.相对定位的参考点

当元素被设置为相对定位时,其定位参考点是基于自身未被定位前的位置。也就是说,相对定位的元素会相对于它自己的原始位置进行移动。这种定位不会影响文档流中的其他元素,即其他元素仍然会像该元素不存在一样进行布局。

例如:

1
2
3
4
<div class="container">
<div class="element">A</div>
<div class="element">B</div>
</div>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
.element {
position: relative;
width: 50px;
height: 50px;
}

.element:first-child {
background-color: red;
left: 20px;
}

.element:last-child {
background-color: blue;
}

在这个例子中,第一个.element会向右移动20像素,但它仍然占据原来的空间,并且不会影响到第二个.element的位置。

3.相对定位的特点

  1. 不影响文档流:相对定位元素仍然占据原来的空间,因此不会影响其他元素的位置。
  2. 相对于自身移动:相对定位元素是相对于它们自己在文档流中的初始位置进行移动的。
  3. 层叠上下文:相对定位元素不会创建新的层叠上下文,这意味着位于它上面的元素可能会覆盖它。
  4. 可与其他定位方式结合使用:相对定位可以与绝对定位或固定定位等其他定位类型结合使用,为元素提供更多灵活的布局选项。

相对定位通常用于微调元素的位置,或者作为更复杂布局的一部分,比如当一个父元素需要相对于自身定位一个绝对定位的子元素时。

当然可以。下面是关于CSS绝对定位的学习笔记概要,从如何设置绝对定位、绝对定位的参考点以及绝对定位的特点这三个方面来编写,力求简单易懂。


2.CSS绝对定位

1.如何设置绝对定位

在CSS中,可以通过设置position属性为absolute来使一个元素成为绝对定位元素。绝对定位意味着元素相对于最近的已定位祖先元素(具有非静态定位的父级元素)进行定位。

1
2
3
4
5
6
/* 示例代码 */
.element {
position: absolute;
left: 20px; /* 距离左侧20像素 */
top: 10px; /* 距离顶部10像素 */
}
  • lefttop 属性用于确定元素距离其最近的已定位祖先元素的左侧和顶部的距离。
  • 还可以使用 rightbottom 属性来指定距离右侧和底部的距离。
  • 如果同时设置了 leftright 或者 topbottom,则取值较小的那个属性生效。

2.绝对定位的参考点

  • 参考它的包含块

什么是包含块呢?

  1. 对于没有脱离文档流的元素,包含块就是父元素
  2. 对于脱离了文档流的元素:包含块是第一个拥有定位属性的祖先元素(如果所有祖先都没有定位,那包含块就是整个页面)

3.绝对定位的特点

  1. 脱离文档流:绝对定位元素不再占据文档流中的空间,即其他元素会像它不存在一样进行布局。
  2. 相对于最近的已定位祖先元素定位:绝对定位元素会相对于最近的具有非静态定位(position: relative, position: absolute, position: fixedposition: sticky)的祖先元素进行定位。
  3. 创建新的层叠上下文:绝对定位元素会创建一个新的层叠上下文,这意味着它后面的元素不会覆盖它。
  4. 可与其他定位方式结合使用:绝对定位可以与相对定位的父元素结合使用,以实现更复杂的布局效果。
  5. 无论什么元素(行内、行内块、块级)只要设置了绝对定位后,就会变为定位元素

4.!!!何为定位元素?

默认宽高都被内容撑开,且能自由设置宽高。

3.CSS固定定位

1.如何设置固定定位

在CSS中,可以通过设置position属性为fixed来使一个元素成为固定定位元素。固定定位意味着元素相对于浏览器窗口进行定位,而不是相对于文档或其他元素。

1
2
3
4
5
6
/* 示例代码 */
.element {
position: fixed;
left: 20px; /* 距离左侧20像素 */
top: 10px; /* 距离顶部10像素 */
}
  • lefttop 属性用于确定元素距离浏览器窗口左侧和顶部的距离。
  • 还可以使用 rightbottom 属性来指定距离右侧和底部的距离。
  • 如果同时设置了 leftright 或者 topbottom,则取值较小的那个属性生效。

2.固定定位的参考点

当元素被设置为固定定位时,其定位参考点始终是浏览器窗口。这意味着无论用户如何滚动页面,固定定位的元素都会保持在相同的位置。

例如:

1
2
3
4
<div class="content">
<p>Some content here...</p>
</div>
<div class="fixed-element">Fixed Element</div>
1
2
3
4
5
.fixed-element {
position: fixed;
left: 20px;
top: 10px;
}

在这个例子中,.fixed-element 不论页面如何滚动,都会保持在浏览器窗口左上角20像素、顶部10像素的位置不变。

3.固定定位的特点

  1. 脱离文档流:固定定位元素不再占据文档流中的空间,即其他元素会像它不存在一样进行布局。
  2. 相对于浏览器窗口定位:固定定位元素的位置始终相对于浏览器窗口,不会随着页面滚动而改变位置。
  3. 创建新的层叠上下文:固定定位元素会创建一个新的层叠上下文,这意味着它后面的元素不会覆盖它。
  4. 屏幕边缘定位:固定定位元素总是定位在浏览器窗口的边缘,即使浏览器窗口大小发生变化,位置也不会改变。

固定定位通常用于创建导航栏、侧边栏或者其他始终可见的界面元素,这些元素需要在整个页面滚动时保持不变的位置。

4.CSS黏性定位

1.如何设置黏性定位

在CSS中,可以通过设置position属性为sticky来使一个元素成为黏性定位元素。黏性定位允许元素在滚动到特定位置时变成固定定位。

1
2
3
4
5
/* 示例代码 */
.element {
position: sticky;
top: 0; /* 当元素滚动到视口顶部时,距离顶部0像素 */
}
  • top 属性用于确定元素变为固定定位时距离顶部的距离。
  • 还可以使用 left, right, 和 bottom 属性来指定其他方向的距离。
  • 如果同时设置了多个方向的偏移量,那么它们分别应用于对应的边缘。

2.黏性定位的参考点

黏性定位的参考点:是离该元素最近的具有滚动行为的祖先元素。

  1. 初始行为:默认情况下,黏性定位元素的行为类似于相对定位元素,占据文档流中的空间并相对于其正常位置进行偏移。
  2. 转换为固定定位:当页面滚动使得黏性定位元素达到视口边界时(例如,滚动到视口顶部),它会变成固定定位元素,并保持在视口内特定的位置。
  3. 恢复相对定位:当页面再次滚动时,如果黏性定位元素离开了视口边界,它将恢复为相对定位,并回到其原始位置。
  4. 边界检测:黏性定位元素的边界检测依赖于视口的位置,因此当页面滚动时,它会根据视口的位置自动调整其定位状态。

3.黏性定位的特点

  1. 动态行为:黏性定位元素根据页面滚动自动切换定位模式,从相对定位变为固定定位,再从固定定位变回相对定位。
  2. 不影响文档流:黏性定位元素在文档流中占据空间,即使在变为固定定位时,其他元素也不会因此移动。
  3. 视口相关:黏性定位元素的位置与视口边界有关,而不是与文档流中的其他元素相关。
  4. 可定制的触发条件:通过设置toprightbottomleft属性,可以控制黏性定位何时启动。

示例

假设我们有一个黏性定位的头部导航栏:

1
2
3
4
5
6
7
8
<header class="sticky-header">
<nav>
<!-- 导航链接 -->
</nav>
</header>
<main>
<!-- 主要内容 -->
</main>
1
2
3
4
5
6
.sticky-header {
position: sticky;
top: 0; /* 当滚动到距离顶部0像素时,元素变为固定定位 */
background-color: #f9f9f9;
padding: 20px;
}

5.CSS定位的层级

  1. 定位元素的显示层级比普通元素高,无论什么定位,显示层级都是一样的。
  2. 如果位置发生重叠,默认情况是:后面的元素,会显示在前面元素之上。
  3. 可以通过 css 属性 z-index 调整元素的显示层级。
  4. z-index 的属性值是数字,没有单位,值越大显示层级越高。
  5. 只有定位的元素设置 z-index 才有效。
  6. 如果 z-index 值大的元素,依然没有覆盖掉 z-index 值小的元素,那么请检査其包含块的层级。

6.定位的特殊应用

!!!以下所说的特殊应用,只针对绝对定位和固定定位,不包括相对定位的元素。

1.让定位元素的宽充满包含块

  1. 宽想与包含块一致,可以给定位元素同时设定left:0right:0
  2. 高想与包含块一致,可以给定位元素同时设置top:0bottom:0

2.让定位元素在包含块中居中

  • 方案一:
1
2
3
4
5
6
7
8
9
10
/* 在CSS代码中设置以下属性,切记要是定位元素 */
.test {
/* 必须要有定位 */
position:fixed | absolute
left:0;
right:0;
top:0;
bottom:0;
margin:auto;
}
  • 方案二:执行方案二的定位元素必须设置宽高
1
2
3
4
5
6
7
8
9
/* 在CSS代码中设置以下属性,切记要是定位元素 */
.test {
/* 必须要有定位 */
position:fixed | absolute
left:50%;
top:50%;
margin-left:-宽的一半;
magin-top:-高的一半
}

CSS布局

1.版心

  • 在PC端网页中,一般都会有一个水平居中的盒子,来显示网页的主要内容,这就是版心。
  • 版心的宽度一般是960~1200像素之间。
  • 版心可以有多个。

2.常用布局名称

image-20240803144906710

3.重置页面样式

1.使用全局选择器

1
2
3
4
5
* {
margin:0;
padding:0;
......
}

2.reset.css

选择到具有默认样式的元素,清除其默认样式。一般是程序员封装好的css文件。

3.Normalize.css

Normalize.css是一种新方案,它在清除默认样式的基础上,保留了一些有价值的默认样式。

需要可以直接去官网直接下载使用

4.多列布局(C3)

在CSS3中,多列布局是一个非常实用的功能,可以让你轻松地创建报纸或杂志风格的布局。这种布局允许你将内容分成多个等宽的列,并且浏览器会自动处理内容的分布。以下是使用CSS3实现多列布局的一些关键属性:

column-count

  • 描述: 指定元素应该被分成多少列。
  • 语法: column-count: <number>;
  • 可能的值:
    • <number>: 一个整数,表示要分成的列数。

column-width

  • 描述: 设置每列的宽度。
  • 语法: column-width: <length>;
  • 可能的值:
    • <length>: 一个长度单位值,例如 px, em, rem 等。

columns

  • 描述: 这是一个简写属性,可以同时设置 column-widthcolumn-count
  • 语法: columns: <column-width> <column-count>;
  • 可能的值:
    • <column-width>: 列的宽度。
    • <column-count>: 列的数量。

column-gap

  • 描述: 设置列与列之间的间距。
  • 语法: column-gap: <length>;
  • 可能的值:
    • <length>: 一个长度单位值,例如 px, em, rem 等。

column-rule

  • 描述: 定义列边框的样式、宽度和颜色。
  • 语法: column-rule: <column-rule-style> <column-rule-width> <column-rule-color>;
  • 可能的值:
    • <column-rule-style>: 边框的样式,例如 solid, dashed, dotted 等。
    • <column-rule-width>: 边框的宽度,例如 thin, medium, thick 或者具体的长度值。
    • <column-rule-color>: 边框的颜色,可以是颜色名称、十六进制、RGB 或 HSL 值。

break-before

  • 描述: 控制元素前的分页。
  • 语法: break-before: <break-token>;
  • 可能的值:
    • <break-token>: 可以是 auto, avoid, page, left, right, region, column.

break-after

  • 描述: 控制元素后的分页。
  • 语法: break-after: <break-token>;
  • 可能的值:
    • <break-token>: 同 break-before.

column-span

  • 描述: 指定元素是否应跨越所有列。
  • 语法: column-span: <column-span-value>;
  • 可能的值:
    • <column-span-value>: 可以是 normalall.

希望这可以帮助你更好地理解CSS3多列布局的相关属性和它们的可能值。如果你有任何进一步的问题,请随时提问!

5.两栏布局

使用浮动实现两栏布局

1
2
3
4
5
<div class="container">
<div class="left">Left Column</div>
<div class="right">Right Column</div>
</div>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.container {
width: 100%;
}

.left {
float: left;
width: 70%; /* 左侧栏宽度 */
background: lightblue;
}

.right {
margin-left: 70%; /* 右侧栏宽度 */
background: lightcoral;
}

使用FlexBox实现两栏布局

1
2
3
4
5
<div class="container">
<div class="left">Left Column</div>
<div class="right">Right Column</div>
</div>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.container {
display: flex;
}

.left {
flex: 7; /* 左侧栏,占 7 份 */
background: lightblue;
}

.right {
flex: 3; /* 右侧栏,占 3 份 */
background: lightcoral;
}

6.三栏布局

Float方式

1
2
3
4
5
6
<div class="container">
<div class="left">Left</div>
<div class="center">Center</div>
<div class="right">Right</div>
</div>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.container {
overflow: hidden;
}
.left, .right {
width: 200px;
float: left;
}
.right {
float: right;
}
.center {
margin: 0 200px;
}

FlexBox方式

1
2
3
4
5
6
<div class="container">
<div class="left">Left</div>
<div class="center">Center</div>
<div class="right">Right</div>
</div>

1
2
3
4
5
6
7
8
9
10
.container {
display: flex;
}
.left, .right {
width: 200px;
}
.center {
flex-grow: 1;
}

Grid方式

1
2
3
4
5
6
<div class="container">
<div class="left">Left</div>
<div class="center">Center</div>
<div class="right">Right</div>
</div>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.container {
display: grid;
grid-template-columns: 200px 1fr 200px;
}
.left {
grid-column: 1;
}
.center {
grid-column: 2;
}
.right {
grid-column: 3;
}

HTML5

HTML5 是超文本标记语言(HyperText Markup Language)的第五个主要版本,它是用来创建网页的标准标记语言。HTML5 在之前的 HTML4 标准基础上进行了大量的改进和扩展,以适应现代网络的需求。

H5的特点

  1. 简化语法
    • HTML5 语法更加宽松,允许某些标签不闭合等,以提高兼容性和易用性。
  2. 新的语义化标签
    • 引入了 <article>, <section>, <header>, <footer>, <nav> 等标签来定义页面的不同部分,增强文档结构的清晰度。
  3. 多媒体支持
    • 内置了 <audio><video> 标签,使得在网页中嵌入音频和视频文件变得更加简单直接,减少了对第三方插件如 Flash 的依赖。
  4. 表单控件增强
    • 新增了日期选择器、电子邮件输入验证等功能,简化了表单的创建和处理过程。
  5. 离线存储
    • 提供了 Web Storage API,允许网站在用户的浏览器上存储数据,从而实现离线访问某些功能。
  6. 图形绘制
    • <canvas> 元素提供了绘制图形的能力,可以用于图表、游戏和其他动态图形应用。
  7. 拖放功能
    • 支持直接通过浏览器进行文件拖放操作,增强了用户体验。
  8. Web Workers
    • 允许脚本在后台线程运行,不会影响页面的交互性能。
  9. WebSockets
    • 实现了浏览器与服务器之间的双向通信,可以实时更新数据而无需频繁地请求服务器。
  10. 地理位置API
    • 提供了获取用户地理位置的功能,方便开发基于位置的服务。

应用场景

  • 开发响应式网站
  • 创建复杂的 Web 应用程序
  • 建立跨平台的移动应用程序
  • 制作在线游戏
  • 构建数据可视化工具

HTML5 的出现极大地丰富了 Web 的功能,使得开发者能够构建更强大、更互动的网页体验。

H5新增语意标签

  1. <article>:
    • 代表文档、页面或者应用程序中的独立内容区块,比如新闻文章、博客帖子、论坛帖子等。
  2. <aside>:
    • 表示与页面主要内容相关但又可以被独立出来的信息,例如侧边栏、注释、广告等。
  3. <details>:
    • 用于创建一个可显示或隐藏详细信息的下拉菜单。通常与 <summary> 元素一起使用。
  4. <figcaption>:
    • 用于为 <figure> 元素添加标题或说明文字。
  5. <figure>:
    • 代表媒体内容,如图片、图表、视频等,通常带有 <figcaption> 作为标题或描述。
  6. <footer>:
    • 用于定义文档或区域的底部信息,如版权信息、联系方式等。
  7. <header>:
    • 定义文档或某个区域的头部,常包含导航链接、logo、搜索框等。
  8. <mark>:
    • 用于高亮显示文本中的关键词或短语,以吸引用户的注意。
  9. <nav>:
    • 用于定义文档中的导航链接部分,如菜单、目录列表等。
  10. <section>:
    • 页面中的某段文字,或文章中的某段文字(里面文字通常里面会包含标题)
  11. <summary>:
    • <details> 元素一起使用,定义下拉菜单的可见标题。

关于aritclesection

  1. artical里面可以有多个section
  2. section强调的是分段或分块,如果你想将一块内容分成几段的时候可以用section
  3. articlesection更强调独立性,一款内容如果比较独立或比较完整,应该使用article

H5新增状态标签

HTML5 引入了一些新的状态标签,这些标签用于提供额外的信息或强调特定的状态或功能。以下是一些 HTML5 中新增的状态标签:

  1. <time>:

    • 用于表示时间或日期。它可以是一个具体的日期或时间点,也可以是持续时间(duration)。例如:
      1
      <p>Published on <time datetime="2023-08-04">August 4, 2023</time>.</p>
  2. <progress>:

    • 用于显示任务的完成进度。它通常包含一个最大值和当前值。例如:
      1
      <progress value="75" max="100"></progress>
  3. <meter>:

    • 用于表示指定范围内的数值。它可以用来显示测量结果或分数。例如:
      1
      2
      <meter value="0.6" min="0" max="1" low="0.4" high="0.6" optimum="0.8">60%</meter>

    img

  4. <ruby>:

    • 用于展示注音或拼音,通常用于东亚语言中需要注音的文字。例如:
      1
      2
      3
      <ruby>
      漢字<rt>かんじ</rt>
      </ruby>
  5. <wbr>:

    • 用于指示浏览器可以在单词内部断行的位置。这对于长单词或URL特别有用,避免过长的文本导致布局问题。例如:
      1
      2
      3
      <a href="http://www.example.com/this-is-a-really-long-url-or-something-similar">
      http://www.example.com/this-is-a-really-long-url-or-something-similar<wbr>
      </a>
  6. <dialog>:

    • 用于创建对话框或模态窗口。它可以作为一个弹出框或提示框使用。例如:
      1
      2
      3
      4
      5
      <dialog open>
      <p>Are you sure you want to delete this item?</p>
      <button type="button" onclick="this.parentNode.close()">Cancel</button>
      <button type="button" onclick="this.parentNode.close()">Delete</button>
      </dialog>
  7. <mark>:

    • 虽然 <mark> 不完全是一个状态标签,但它可以用来标记文本中的重要部分或高亮显示。例如:
      1
      <p>The <mark>important part</mark> of the text.</p>

H5新增列表标签

QQ_1722762148978

H5新增文本标签

  1. ruby:用于给文字注音的标签,实现该功能需要包裹rt标签
1
2
3
4
<ruby>
<span>魑隗魍魉</span>
<rt>chī wěi wǎng liǎng</rt>
</ruby>
  1. mark:用于标记关键字(建议标记搜索中的关键字)

H5新增表单控件属性

  1. placeholder:

    • 为输入字段提供一个提示信息,当字段为空时显示,当用户开始输入时消失。

    • 示例:

      1
      <input type="text" placeholder="Enter your name">
  2. required:

    • 表示该字段是必须填写的。

    • 示例:

      1
      <input type="text" required>
  3. autofocus

    • 让输入字段获得初始焦点。

    • 示例:

      1
      <input type="text" autofocus>
  4. autocomplete:

    • 控制是否启动输入记忆,(即当输入提交表单后,下次在输入相同内容时会有一个提示功能)

    • 不适用于:多行输入,单选框(radio),多选框(checkbox)

    • 示例:

      1
      2
      <!--off是关闭,on是开启-->
      <input type="text" autocomplete="off">
  5. pattern:

    • 使用正则表达式来验证输入字段的内容。

    • 使用范围:账号,密码登输入类型的控件,但请注意,对于多行输入来说无法进行正则校验

    • 使用前提:该控件必须为必选项,即必须填写项

    • 示例:

      1
      <input type="text" pattern="[A-Za-z]+">

H5中input的type选项

在 HTML5 中,<input> 元素的 type 属性定义了输入字段的类型。不同的 type 值会改变输入字段的行为和外观。以下是一些常见的 type 属性值及其用途:

  1. text:

    • 默认类型,用于输入单行文本。
    • 示例:
      1
      <input type="text" name="username">
  2. password:

    • 显示为一串星号(*),用于输入密码。
    • 示例:
      1
      <input type="password" name="password">
  3. email:

    • 用于输入电子邮件地址,并自动进行格式验证。
    • 示例:
      1
      <input type="email" name="email" required>
  4. url:

    • 用于输入 URL 地址,并自动进行格式验证。
    • 示例:
      1
      <input type="url" name="website">
  5. tel:

    • 用于输入电话号码。
    • 示例:
      1
      <input type="tel" name="phone">
  6. number:

    • 用于输入数字,可以设置最小值、最大值和步长。步长默认为1
    • 示例:
      1
      <input type="number" name="age" min="18" max="100" step="1">
  7. range:

    • 用于输入数值范围,通常显示为滑块。
    • 示例:
      1
      <input type="range" name="volume" min="0" max="100">
  8. date:

    • 用于输入日期,提供了一个日期选择器。
    • 示例:
      1
      <input type="date" name="birthdate">
  9. month:

    • 用于输入月份和年份。
    • 示例:
      1
      <input type="month" name="join_month">
  10. week:

    • 用于输入周数和年份。
    • 示例:
      1
      <input type="week" name="holiday_week">
  11. time:

    • 用于输入时间。
    • 示例:
      1
      <input type="time" name="appointment_time">
  12. datetime-local:

    • 用于输入日期和时间(不包括时区)。
    • 示例:
      1
      <input type="datetime-local" name="event_datetime">
  13. search:

    • 类似于文本输入,但可能显示为具有放大镜图标的输入框。
    • 示例:
      1
      <input type="search" name="query">
  14. color:

    • 用于选择颜色。
    • 示例:
      1
      <input type="color" name="favorite_color">
  15. checkbox:

    • 用于勾选框,可以选中或取消选中。
    • 示例:
      1
      <input type="checkbox" name="terms" value="agree">
  16. radio:

    • 用于单选按钮,只能在一个组内选择一个选项。
    • 示例:
      1
      2
      <input type="radio" name="gender" value="male">
      <input type="radio" name="gender" value="female">
  17. file:

    • 用于上传文件。
    • 示例:
      1
      <input type="file" name="profile_picture" multiple>
  18. submit:

    • 用于提交表单。
    • 示例:
      1
      <input type="submit" value="Submit">
  19. reset:

    • 用于重置表单。
    • 示例:
      1
      <input type="reset" value="Reset">
  20. image:

    • 用于提交表单,同时可以使用图像作为按钮。
    • 示例:
      1
      <input type="image" src="submit.gif" alt="Submit">
  21. hidden:

    • 用于创建一个隐藏的输入字段。
    • 示例:
      1
      <input type="hidden" name="id" value="123">
  22. button:

    • 用于创建一个按钮,可以绑定 JavaScript 事件。
    • 示例:
      1
      <input type="button" value="Click Me" onclick="alert('Hello!')">

H5中新增全局属性

HTML5 引入了一些新的全局属性,这些属性可以应用于大多数 HTML 元素,以提供更多的功能和控制。以下是一些 HTML5 中新增的全局属性:

  1. tabindex:

    • 用于定义元素在页面上的 tab 键导航顺序。
    • 示例:
      1
      2
      <button tabindex="1">Button 1</button>
      <button tabindex="2">Button 2</button>
  2. draggable:

    • 指定元素是否可以被拖动。
    • 示例:
      1
      <div draggable="true">Drag me!</div>
  3. hidden:

    • 表示元素不可见,与 CSS 的 display: none 类似。
    • 示例:
      1
      <p hidden>This text is not visible.</p>
  4. contenteditable:

    • 表示元素的内容可以被编辑。
    • 示例:
      1
      <p contenteditable="true">Edit me!</p>
  5. spellcheck:

    • 控制是否对元素内容进行拼写检查。
    • 示例:
      1
      <textarea spellcheck="false"></textarea>
  6. data-* 属性:

    • 用于存储自定义数据私有属性。
    • 示例:
      1
      <div data-my-custom-attribute="value">Custom data attribute</div>

H5兼容性问题

QQ_1722769379812

示例

1
2
3
4
5
6
<!--[if IE 8]>仅IE8可见<![endif]-->
<!--[if gt IE 8]>仅IE8以上可见<![endif]->
<!--[if 1t IE 8]>仅IE8以下可见<![endif]->
<!--[if gte IE 8]>IE8及以上可见<![endif]->
<!--[if lte IE 8]>IE8及以下可见<![endif]->
<!--[if !IE 8]>非IE8的IE可见<![endif]-->

CSS3

1.CSS3简介

image-20240806144232828

2.CSS3的私有前缀

1.为什么要有私有前缀

W3C 标准所提出的某个 css 特性,在被浏览器正式支持之前浏览器厂商会根据浏览器的内核,使用私有前缀来测试该 CSS 特性,在浏览器正式支持该 CSS 特性后,就不需要私有前缀了。

  • 举个例子

    1
    2
    3
    4
    5
    -webkit-border-radius:20px;
    -moz-border-radius:20px;
    -ms-border-radius:20px;
    -o-border-radius:20px;
    border-radius:20px;
  • 查询CSS3兼容性的网站:https://caniuse.com

2.常见浏览器的私有前缀

image-20240806145810365

3.CSS3新增的长度单位

详见:盒子模型中的第一条常用长度单位小结

4.CSS3新增颜色的设计方式

详见:CSS颜色属性小结,具体新增的颜色设置方式有:HXL,HXLA,rgb,rgba

5.CSS3新增的选择器

有动态伪类选择器,伪元素选择器,详见CSS选择器章节

6.CSS3新增的盒子模型相关属性

1.box-sizing属性

使用box-sizing属性可以设置盒模型的两种类型

可选值 含义
content-box widthheight设置的盒子是内容区的大小。(默认值)
border-box widthheight设置的盒子的总大小。(也被成为怪异盒模型)

2.resize属性

使用resize属性设置用户能否拖动盒子

可选值 含义
none 不可拖动
horizontal 仅可水平方向拖动
vertical 仅可垂直方向拖动
both 水平、垂直方向均可推动

注:请配合overflow来处理内容溢出,该属性才能生效。

3.box-shadow属性

基本语法

1
box-shadow: h-offset v-offset blur spread color inset;
属性 描述
h-offset 水平偏移量(可正可负)必填
v-offset 垂直偏移量(可正可负)必填
blur 阴影模糊程度(非负值)可选
spread 阴影扩展大小(非负值)可选
color 阴影的颜色 可选
inset 可选关键字,用于创建内阴影效果 可选

示例

示例 CSS 代码 效果描述
简单阴影 .box { box-shadow: 10px 10px 5px #888888; } 水平偏移 10px、垂直偏移 10px、模糊程度 5px、颜色为灰色
模糊阴影 .box { box-shadow: 10px 10px 20px 5px rgba(0, 0, 0, 0.5); } 水平偏移 10px、垂直偏移 10px、模糊程度 20px、扩展大小 5px、半透明的黑色
内阴影 .box { box-shadow: inset 0 0 10px 5px #000; } 创建一个内部阴影效果
多重阴影 .box { box-shadow: 10px 10px 5px #888888, 20px 20px 10px #666666, inset 0 0 5px #000; } 为同一个元素添加三个不同的阴影效果

4.opacity属性

opacity 属性在 CSS 中用于设置元素的不透明度。它可以应用于任何元素,并影响该元素及其所有子元素的不透明度。下面是关于 opacity 属性的一些基本信息和示例:

基本语法

1
opacity: value;
  • value: 不透明度值,取值范围从 0 到 1。
    • 0: 完全透明。
    • 1 (默认值): 完全不透明。

示例

  1. 设置一个元素为半透明:

    1
    2
    3
    .box {
    opacity: 0.5;
    }
  2. 设置一个元素为完全透明:

    1
    2
    3
    .box {
    opacity: 0;
    }
  3. 设置一个元素为几乎完全不透明:

    1
    2
    3
    .box {
    opacity: 0.95;
    }

注意事项

  • 当你改变一个元素的 opacity 时,它的所有子元素也会受到影响。如果你只想改变某个特定子元素的不透明度,你需要单独对该子元素应用 opacity
  • opacity 属性可以与 CSS 动画或过渡一起使用来创建淡入淡出的效果。

浏览器兼容性

opacity 属性在现代浏览器中都有很好的支持,包括 IE9 及以上版本。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* 设置一个 div 的不透明度为 0.5 */
div {
width: 100px;
height: 100px;
background-color: blue;
opacity: 0.5;
}

/* 设置一个 div 的不透明度为 0.2 */
div.transparent {
opacity: 0.2;
}

/* 设置一个 div 的不透明度为 1 (完全不透明) */
div.opaque {
opacity: 1;
}

表格总结

属性 描述
value 不透明度值,范围从 0 到 1
示例 CSS 代码 效果描述
半透明 .box { opacity: 0.5; } 元素不透明度为 50%
完全透明 .box { opacity: 0; } 元素完全透明
几乎不透明 .box { opacity: 0.95; } 元素几乎完全不透明

7.CSS3新增背景属性

详见CSS背景属性小结

8.CSS3新增边框属性

详见本笔记这小结:CSS边框属性

9.CSS3新增文本属性

1.text-shadow(文本阴影)

  • 描述:为文本添加阴影效果。
  • 语法text-shadow: h-offset v-offset blur color;
  • 示例
    1
    2
    3
    p {
    text-shadow: 2px 2px 3px rgba(0, 0, 0, 0.5);
    }
属性 描述
h-offset 水平偏移量(可正可负)必填
v-offset 垂直偏移量(可正可负)必填
blur 阴影模糊程度(非负值)可选
color 阴影的颜色 可选

2.white-space(处理空白符)

white-space 属性在 CSS 中用于控制元素中的空白符(空格、制表符、换行符等)如何被处理。这个属性对于文本布局非常重要,尤其是在需要精确控制文本格式的情况下。

基本语法

1
white-space: value;
  • value: 控制空白符处理的方式。

可接受的值

  • normal: 默认值,空白符会被压缩为一个空格,并且换行符会被替换为一个空格。
  • pre: 保留所有空白符,并且换行符也会保留。
  • nowrap: 合并空白符为空格,但是不允许换行。
  • pre-wrap: 保留空白符,允许换行。
  • pre-line: 合并空白符为空格,允许换行,但换行符会被替换为空格。
  • break-spaces: 保留空格,即使在换行时也保留空格。

示例

  1. 正常处理空白符:

    1
    2
    3
    p {
    white-space: normal;
    }

    这是默认行为,所有空白符会被压缩为一个空格。

  2. 保留所有空白符:

    1
    2
    3
    pre {
    white-space: pre;
    }

    适用于预格式化文本,保留所有空白符和换行符。

  3. 禁止换行:

    1
    2
    3
    .nowrap {
    white-space: nowrap;
    }

    所有空白符会被压缩为一个空格,不允许自然换行。

  4. 保留空白符并允许换行:

    1
    2
    3
    .pre-wrap {
    white-space: pre-wrap;
    }

    保留所有空白符,但允许自然换行。

  5. 合并空白符为空格并允许换行:

    1
    2
    3
    .pre-line {
    white-space: pre-line;
    }

    合并空白符为空格,允许自然换行。

  6. 保留空格并允许换行:

    1
    2
    3
    .break-spaces {
    white-space: break-spaces;
    }

    保留空格,即使在换行时也保留空格。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/* 正常处理空白符 */
p.normal {
white-space: normal;
}

/* 保留所有空白符 */
pre {
white-space: pre;
}

/* 禁止换行 */
p.nowrap {
white-space: nowrap;
}

/* 保留空白符并允许换行 */
p.pre-wrap {
white-space: pre-wrap;
}

/* 合并空白符为空格并允许换行 */
p.pre-line {
white-space: pre-line;
}

/* 保留空格并允许换行 */
p.break-spaces {
white-space: break-spaces;
}

表格总结

属性 描述
normal 默认值,空白符会被压缩为一个空格
pre 保留所有空白符
nowrap 合并空白符为空格,不允许换行
pre-wrap 保留空白符,允许自然换行
pre-line 合并空白符为空格,允许自然换行
break-spaces 保留空格,即使在换行时也保留空格

3.text-overflow(文本溢出)

text-overflow 属性在 CSS 中用于指定当内容被裁剪时应如何显示。当一个元素的内容超出其边界并且设置了 overflow: hiddenoverflow: scroll 时,text-overflow 属性就会生效。

基本语法

1
text-overflow: value;
  • value: 指定当内容被裁剪时的显示方式。

可接受的值

  • clip: 裁剪内容,不显示任何指示内容被裁剪的信息。
  • ellipsis: 显示省略号(…)来表示被裁剪的内容。
  • string: 可以指定一个字符串来替代省略号。

示例

处理单行文本溢出
  1. 显示省略号:下面这种就是处理溢出文字的步骤,溢出隐藏+不换行+溢出文字用省略号表示

    1
    2
    3
    4
    5
    6
    .ellipsis {
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    width: 200px;
    }

    这个例子中,如果内容超出 200px 的宽度,多余的内容会被裁剪,并且在结尾处显示一个省略号。

  2. 使用自定义字符串:

    1
    2
    3
    4
    5
    6
    .custom-ellipsis {
    overflow: hidden;
    white-space: nowrap;
    text-overflow: "[...]"; /* 自定义省略标记 */
    width: 200px;
    }

    如果内容超出 200px 的宽度,多余的内容会被裁剪,并且在结尾处显示自定义的省略标记。

处理多行文本溢出
1
2
3
4
5
6
.multi-line-word {
display:-webkit-box; /*弹性盒子模型*/
-webkit-box-orient:vertical;/*垂直排列子元素*/
-webkit-line-clamp:2;/*限制最多显示两行*/
overflow:hidden;/*溢出部分隐藏*/
}

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* 显示省略号 */
.ellipsis {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
width: 200px;
}

/* 使用自定义字符串 */
.custom-ellipsis {
overflow: hidden;
white-space: nowrap;
text-overflow: "[...]"; /* 自定义省略标记 */
width: 200px;
}

表格总结

属性 描述
clip 裁剪内容,不显示任何指示内容被裁剪的信息
ellipsis 显示省略号(…)来表示被裁剪的内容
string 可以指定一个字符串来替代省略号

4.text-stroke(文本描边)

text-stroke 属性在 CSS3 中用于为文本添加描边效果,类似于为文本添加轮廓。这个属性允许你在文本周围添加一条或多条线条,可以用来增强文本的视觉效果,特别是在背景颜色复杂或需要突出显示文本的情况下。

基本语法

1
text-stroke: thickness color;
  • thickness: 描边的厚度,可以是长度单位(如 1px)或者 none
  • color: 描边的颜色。

示例

  1. 添加黑色描边:

    1
    2
    3
    4
    5
    p {
    font-size: 30px;
    text-stroke: 2px black;
    color: white;
    }

    这个例子中,文本将以白色显示,并在其周围添加 2px 的黑色描边。

  2. 添加蓝色描边:

    1
    2
    3
    4
    5
    p {
    font-size: 30px;
    text-stroke: 1px blue;
    color: yellow;
    }

    这个例子中,文本将以黄色显示,并在其周围添加 1px 的蓝色描边。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
/* 添加黑色描边 */
p.black-stroke {
font-size: 30px;
text-stroke: 2px black;
color: white;
}

/* 添加蓝色描边 */
p.blue-stroke {
font-size: 30px;
text-stroke: 1px blue;
color: yellow;
}

表格总结

属性 描述
thickness 描边的厚度,可以是长度单位(如 1px)或者 none
color 描边的颜色

这个表格概括了 text-stroke 属性的基本用法及其示例,希望对你有所帮助!

请注意,text-stroke 属性在某些浏览器中可能需要使用前缀 -webkit- 来实现兼容性,例如在 Safari 和 Chrome 中。因此,为了确保跨浏览器兼容性,你可能需要这样使用:

1
2
3
4
5
6
p {
font-size: 30px;
-webkit-text-stroke: 2px black;
text-stroke: 2px black;
color: white;
}

10.CSS3新增渐变

在CSS3中,渐变是一种非常实用且强大的功能,可以用来创建平滑的颜色过渡效果。渐变主要分为两种类型:线性渐变(linear-gradient)和径向渐变(radial-gradient)。下面是一些关于这两种渐变的基本使用方法和示例。

1. 线性渐变 (Linear Gradient)

线性渐变沿着一个方向平滑地从一种颜色过渡到另一种颜色。

基本语法:

1
background-image: linear-gradient(direction, color-stop1, color-stop2, ...);
  • direction 可以是角度或者关键词来定义渐变的方向。
  • color-stop 定义颜色以及颜色的位置(可选)。

方向关键词:

  • to top, to bottom, to left, to right 表示方向为垂直或水平。
  • to top left, to bottom right, to bottom left, to top right 表示对角线方向。

示例:

1
2
3
div {
background-image: linear-gradient(to right, red, yellow);
}

带角度的示例:

1
2
3
div {
background-image: linear-gradient(45deg, red, yellow);
}

带位置的颜色停靠点示例:

1
2
3
div {
background-image: linear-gradient(to right, red 0%, yellow 100%);
}

2. 径向渐变 (Radial Gradient)

径向渐变是从中心点开始向外扩散的颜色变化。

基本语法:

1
background-image: radial-gradient(shape size at position, start-color, end-color);
  • shape 可以为 circleellipse
  • size 定义渐变的大小。(x方向,y方向的size必须同时给出才能生效)
  • position 可以是百分比、关键词(如 center)或两者结合。
  • start-colorend-color 分别表示渐变开始和结束时的颜色。

形状与大小示例:

1
2
3
div {
background-image: radial-gradient(circle at center, red, yellow);
}

具体位置示例:

1
2
3
div {
background-image: radial-gradient(circle at 50% 50%, red, yellow);
}

兼容性

为了确保兼容性,你可能需要同时使用浏览器前缀 -webkit--moz--o--ms-

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
div {
/* Standard syntax */
background-image: linear-gradient(to right, red, yellow);

/* For IE10+ */
background-image: -ms-linear-gradient(right, red, yellow);

/* For Webkit browsers */
background-image: -webkit-linear-gradient(right, red, yellow);

/* For Opera 11.1 to 12.0 */
background-image: -o-linear-gradient(right, red, yellow);

/* For Firefox 3.6 to 15 */
background-image: -moz-linear-gradient(right, red, yellow);
}

11.Web字体

1. @font-face 规则

@font-face 是 CSS 中用于定义字体文件的一种规则。它允许开发者将自定义的字体文件加载到网站上,并应用于页面中的文本。

基本语法:

1
2
3
4
5
@font-face {
/*用的时候名字就是MyFont */
font-family: 'MyFont';
src: url('myfont.eot');
}

使用示例:

1
2
3
body {
font-family: 'MyFont', Arial, sans-serif;
}

12.CSS3—2D变换(transform)

CSS3 的 2D 变换允许你在二维空间中改变元素的位置、大小和形状。这包括旋转、缩放、倾斜和移动等操作。以下是 CSS3 中 2D 变换的一些基本介绍和示例。

1. transform 属性

transform 属性是一个可以接受多个变换函数的属性,这些函数可以组合使用。变换函数可以是旋转 (rotate)、缩放 (scale)、倾斜 (skew) 或移动 (translate)。

基本语法

1
transform: function(value);

2. rotate(旋转)

rotate 函数用于旋转元素。角度值可以是度数 (deg)、弧度 (rad)、梯度 (grad) 或者转 (turn)。

示例:

1
2
3
div {
transform: rotate(45deg);
}

3. scale(缩放)

scale 函数用于缩放元素。它可以接受一个或两个参数,第一个参数用于横向缩放,第二个参数用于纵向缩放。如果只提供一个值,则两个方向都按该值缩放。

示例:

1
2
3
4
div {
transform: scale(2); /* 缩放两倍 */
transform: scale(0.5, 0.5); /* 缩小一半 */
}

4. skew(倾斜)

skew 函数用于倾斜元素。可以单独倾斜X轴或Y轴,也可以同时倾斜。

示例:

1
2
3
4
5
6
div {
transform: skew(45deg); /* X轴倾斜 */
transform: skewX(45deg); /* X轴倾斜 */
transform: skewY(45deg); /* Y轴倾斜 */
transform: skew(45deg, 30deg); /* 同时倾斜X轴和Y轴 */
}

5. translate(位移)

translate 函数用于沿X轴和/或Y轴移动元素。可以分别移动X轴和Y轴,也可以同时移动。

示例:

1
2
3
4
5
div {
transform: translate(50px, 100px); /* 沿X轴移动50像素,沿Y轴移动100像素 */
transform: translateX(50px); /* 沿X轴移动50像素 */
transform: translateY(100px); /* 沿Y轴移动100像素 */
}

位移的注意点

QQ_1723012591972

6. 组合变换

可以将多个变换函数组合在一起使用,顺序很重要。由于旋转会改变元素原有的坐标系,所以建议旋转放在最后。

示例:

1
2
3
div {
transform: rotate(45deg) scale(2) translate(50px, 100px);
}

7. 原点变换

transform-origin 属性用于定义变换的原点,即变换发生的点。默认情况下,原点是元素的中心。

  • 变换原点
    • 使用关键词(left,right,top,bottom)来变换原点
    • 使用具体像素值来变换原点(如果使用像素值要写两个值,第一个代表x轴,第二个代表y轴)
    • 变换之后的原点,对于缩放和旋转都有影响,而对位移没有影响。

示例:

1
2
3
4
div {
transform-origin: top left; /* 设置原点为左上角 */
transform: rotate(45deg);
}

8. 兼容性

为了保证兼容性,可以使用浏览器前缀 -webkit--moz--o--ms-

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
div {
/* Standard syntax */
transform: rotate(45deg);

/* For Webkit browsers */
-webkit-transform: rotate(45deg);

/* For Firefox 3.6 to 15 */
-moz-transform: rotate(45deg);

/* For Opera 11.1 to 12.0 */
-o-transform: rotate(45deg);

/* For IE9 */
-ms-transform: rotate(45deg);
}

9. 浏览器支持

目前大多数现代浏览器都已经很好地支持 CSS3 的变换特性,因此通常不需要添加前缀。

示例代码

下面是一个简单的示例,演示如何使用 CSS3 的 2D 变换来创建一个旋转并移动的方块。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>2D Transform Example</title>
<style>
.box {
width: 100px;
height: 100px;
background-color: blue;
margin: 50px;
transition: transform 1s;
}

.box:hover {
transform: rotate(45deg) translate(50px, 100px);
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>

在这个示例中,当鼠标悬停在方块上时,方块会旋转 45 度并移动 50 像素和 100 像素。transition 属性使变换过程平滑进行。

这些就是 CSS3 中 2D 变换的基本概念和用法。通过这些变换,你可以创建动态和交互式的网页布局。

13.CSS3—3D变换(transform)

在 CSS3 中,要使用3D变换,首先得开启 3D 空间,你需要在父元素中使用 transform-styleperspective 属性。这两个属性一起工作,使得子元素能够在三维空间中正确地呈现。

1. transform-style: preserve-3d

该属性还有一个值,是flat,指的是2D空间,也就是默认值。而transform-style: preserve-3d 属性用于指定一个元素及其子元素是否应该在 3D 空间中渲染。如果设置了此属性,那么子元素可以被放置在不同的 z 轴位置上,并且它们之间的遮挡关系也会被正确处理。

示例:

1
2
3
4
5
6
.parent {
transform-style: preserve-3d;
}
.child {
transform: translateZ(100px);
}

2. perspective

perspective 属性用于设置观察者的距离,它决定了元素的透视效果。当元素被放置在 3D 空间中时,perspective 会影响元素看起来的远近程度。较大的值会使透视效果减弱,较小的值会使透视效果加强。

  • 该属性默认值不是0

示例:

1
2
3
.container {
perspective: 1000px;
}

3.透视点的位置

透视点的默认位置在开启了3D空间的元素的正中心,通常情况下我们并不需要去调整。如需调整:

  • 使用perspective-origin属性来调整
  • 语法:perspective-origin:x-position y-position
  • x-positiony-position 可以是百分比、长度单位(如 pxem 等)或关键词(如 leftcenterrighttopbottom)。

4.3D位移

在 CSS3 中,3D 位移(也称为 3D 平移)允许你在一个三维空间中移动元素。这可以通过 translate3d 函数实现,它允许你在 x、y 和 z 轴上移动元素。

translate3d 函数

translate3d 函数接受三个参数,分别对应 x、y 和 z 轴上的位移量。

基本语法:

1
transform: translate3d(tx, ty, tz);
  • tx 表示 x 轴上的位移量。
  • ty 表示 y 轴上的位移量。
  • tz 表示 z 轴上的位移量。

示例

下面是一个简单的示例,演示如何使用 translate3d 函数来在 3D 空间中移动一个元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>3D Translate Example</title>
<style>
.container {
perspective: 800px; /* 设置透视点距离 */
width: 300px;
height: 300px;
margin: 50px auto;
}

.cube {
width: 200px;
height: 200px;
position: relative;
transform-style: preserve-3d;
transform: rotateY(45deg);
transition: transform 1s;
}

.face {
position: absolute;
width: 200px;
height: 200px;
background-color: #f00;
}

.front {
transform: translateZ(100px);
}

.back {
transform: rotateY(180deg) translateZ(100px);
}

.right {
transform: rotateY(90deg) translateZ(100px);
}

.left {
transform: rotateY(-90deg) translateZ(100px);
}

.top {
transform: rotateX(90deg) translateZ(100px);
}

.bottom {
transform: rotateX(-90deg) translateZ(100px);
}

/* 添加 3D 位移 */
.cube {
transform: translate3d(50px, 100px, 200px);
}
</style>
</head>
<body>
<div class="container">
<div class="cube">
<div class="face front"></div>
<div class="face back"></div>
<div class="face right"></div>
<div class="face left"></div>
<div class="face top"></div>
<div class="face bottom"></div>
</div>
</div>
</body>
</html>

示例解释

在这个示例中,我们创建了一个 3D 旋转的立方体,并使用 translate3d 函数将整个立方体在 3D 空间中进行了位移。translate3d(50px, 100px, 200px) 表示立方体在 x 轴上移动了 50 像素,在 y 轴上移动了 100 像素,在 z 轴上移动了 200 像素。

不同的位移方向

你还可以通过更改 translate3d 的参数来探索不同的位移方向。例如:

  • 向前移动translate3d(0, 0, 200px) 表示仅在 z 轴上向前移动 200 像素。
  • 向后移动translate3d(0, 0, -200px) 表示仅在 z 轴上向后移动 200 像素。
  • 向左移动translate3d(-50px, 0, 0) 表示仅在 x 轴上向左移动 50 像素。
  • 向右移动translate3d(50px, 0, 0) 表示仅在 x 轴上向右移动 50 像素。
  • 向上移动translate3d(0, -100px, 0) 表示仅在 y 轴上向上移动 100 像素。
  • 向下移动translate3d(0, 100px, 0) 表示仅在 y 轴上向下移动 100 像素。

5.3D旋转

3D 旋转是在 2D 旋转的基础上,可以让元素沿x轴和y轴旋转,具体使用方式如下
1.先给元素添加 转换属性 transform
2.编写 transform 的具体值, 3D 相关可选值如下:

含义
rotate3D 前三个参数分别表示坐标轴:xyz,第四个参数表示旋转的角度,参数不允许省略,比如transform:rotate3D(1,1,1,30deg)表示xyz分别旋转30°
rotateX 设置x轴旋转角度,需指定一个角度值(单位deg),面对x轴正方向:正值顺时针,负值逆时针
rotateY 设置y轴旋转角度,需指定一个角度值(单位deg),面对y轴正方向:正值顺时针,负值逆时针

6.3D缩放

3D 缩放是在 2D 缩放的基础上,可以让元素沿z轴缩放,具体使用方式如下
1.先给元素添加 转换属性 transform
2.编写 transform 的具体值,3D 相关可选值如下

含义
scaleZ 设置Z轴方向的缩放比例,值是一个数字,1表示不缩放,大于1放大,小于1缩小。
scale3d 第一个参数对应x轴,第二个参数对应y轴,第三个参数对应z轴,注意:参数不能够省略

14.CSS3过渡(transition)

在CSS3中,过渡(transitions)是一种效果,可以平滑地改变一个元素从一种样式到另一种样式的过渡效果。这使得网页设计更加生动和有趣。

!!!过渡有触发条件,即过渡前元素的状态和过渡后的都需要设置

基本概念

  1. 过渡属性 (transition-property): 定义应该对哪些CSS属性应用过渡效果。
  2. 过渡持续时间 (transition-duration): 过渡效果完成所需要的时间。单位是s或者ms
  3. 过渡函数类型 (transition-timing-function): 过渡效果的速度曲线。
    • linear: 动画从头到尾速度相同。
      • 这意味着过渡在整个过程中保持恒定速度。
    • ease: 默认值,动画以低速开始,然后加快,在结束前变慢。
      • 这是浏览器默认使用的函数类型,通常给人一种更自然的感觉。
    • ease-in: 动画以低速开始。
      • 开始时速度较慢,然后逐渐加速直至结束。
    • ease-out: 动画以低速结束。
      • 开始时速度较快,然后逐渐减速直至结束。
    • ease-in-out: 动画以低速开始和结束。
      • 开始和结束时速度较慢,中间速度快。
    • step-start: 动画瞬间改变,之后保持不变直到下一个关键点。
      • 动画在开始时立即跳转到最终状态,然后保持该状态直到过渡结束。
    • step-end: 动画在最后瞬间改变。
      • 动画保持初始状态,直到过渡结束时才瞬间跳转到最终状态。
  4. 过渡延迟 (transition-delay): 在过渡开始前等待的时间。

语法

你可以使用 transition 属性来简写以上所有过渡相关的属性:

1
transition: property duration timing-function delay;

例如:

1
transition: width 2s ease 1s;

这段代码表示宽度将在2秒内平滑变化,使用默认的 ease 函数,并且在开始之前等待1秒。

示例

假设我们有一个按钮,当鼠标悬停在其上时,按钮的颜色会改变,我们可以添加过渡效果来使颜色变化平滑。

HTML

1
<button class="button">Hover Me</button>

CSS

1
2
3
4
5
6
7
8
9
10
11
.button {
background-color: blue;
color: white;
padding: 10px 20px;
border: none;
transition: background-color 0.5s ease-in-out; /* 过渡属性、持续时间和函数类型 */
}

.button:hover {
background-color: red;
}

在这个例子中,当我们把鼠标悬停在按钮上时,背景色会从蓝色变为红色,并且这个变化过程会在0.5秒内平滑进行。

多个过渡效果

如果需要对多个属性应用不同的过渡效果,可以使用逗号分隔多个值:

1
transition: width 2s, color 1s;

注意事项

  • 如果不指定过渡属性,默认会对所有可动画化的属性应用过渡。
  • 可以使用 all 关键字来指定所有属性都应该应用过渡效果。
  • 在某些情况下,可能需要JavaScript来触发过渡效果,特别是当涉及到状态变化或者非用户交互事件时。

15.CSS3动画

当我们讨论动画时,“帧”和“关键帧”是非常基础的概念。在计算机图形学和动画领域,这两个术语经常被提及。让我们来详细了解它们的意义以及它们如何应用于CSS3动画。

帧 (Frame)

在动画中,每一幅单独的画面被称为一帧(frame)。动画是由一系列连续显示的帧组成的,当这些帧快速连续播放时,就会产生动态的效果。例如,在电影中,每秒通常会有24帧,而在电视中可能是25帧或30帧。

关键帧 (Keyframe)

关键帧是指动画中定义变化点的帧。在传统的动画制作中,关键帧是由动画师手动绘制的,它们代表动作的主要转折点。在两个关键帧之间,通过插值或者其他技术来生成过渡帧,从而创建流畅的运动。

CSS3 中的关键帧

在CSS3中,我们可以使用 @keyframes 规则来定义关键帧动画。这使得我们能够在不使用任何脚本的情况下创建复杂的动画效果。

@keyframes 规则的基本语法

1
2
3
4
5
@keyframes animation-name {
0% { /* 开始时的样式 */ }
50% { /* 中间的样式 */ }
100% { /* 结束时的样式 */ }
}

这里的关键帧百分比(如0%,50%,100%)指定了动画过程中各个关键点的时间点。CSS3动画引擎会计算这些关键帧之间的中间值,以创建平滑的过渡效果。

使用 @keyframes 规则(animation属性的属性值)

一旦定义了 @keyframes 动画,就需要将其应用到HTML元素上。这可以通过使用 animation 属性来完成:

它的属性如下

1
2
3
4
5
6
7
8
div {
/*动画的名称*/
animation-name: animation-name;
animation-duration: 3s; /* 动画持续时间 */
animation-timing-function: ease-in-out; /* 动画的速度曲线 */
animation-iteration-count: infinite; /* 动画重复次数 */
animation-direction:reserve; /*动画播放的方向*/
}
animation-timing-function(动画的速度曲线)
  • ease: 默认值。动画以慢速开始,然后加快,最后慢慢结束。这是最常用的函数值,模拟了自然界的加速度和减速度。
  • linear: 动画从头到尾都以相同的速度执行。这通常给人一种更加机械的感觉。
  • ease-in: 动画以慢速开始,逐渐加速到结束。
  • ease-out: 动画以快速开始,然后逐渐减速到结束。
  • ease-in-out: 动画以慢速开始,加速到中间,然后再减速到结束。
  • step-start: 动画在每个关键帧的开始阶段跳跃到下一个值,其他时间保持静止。
  • step-end: 动画在每个关键帧的结束阶段跳跃到下一个值,其他时间保持静止。
  • cubic-bezier(x,y,z,w): 这个函数允许开发者自定义动画的速度曲线。x 和 y 的值范围都是 [0, 1]。其中 x 是时间进度,y 是完成值。z 和 w 分别是 x 和 y 的结束值。通过改变这些值,可以创建各种不同的速度曲线。
animation-iteration-count(动画播放次数)
  • infinite:表示无限循环播放
  • 具体数字:指动画播放的次数
animation-direction(动画播放方向)
  • normal (默认值): 每次迭代完成后动画会按照原始方向重复播放。
  • reverse: 每次迭代完成后动画会反向重复播放。
  • alternate: 动画第一次迭代按正常顺序播放,下一次则反向播放,之后再正常顺序播放,如此交替进行。
  • alternate-reverse: 类似于 alternate,但首次迭代就是反向播放,之后再正常顺序播放,以此类推。
animation-fill-mode(不发生动画时,位于哪里)
  • none (默认值): 动画前后没有样式应用。
  • forwards: 动画结束后保留最后一个关键帧的样式。
  • backwards: 动画开始前应用第一个关键帧的样式。
  • both: 结合了 forwardsbackwards 的效果,即动画开始前应用第一个关键帧的样式,结束后保留最后一个关键帧的样式。
  • initial: 设置为初始值。
  • inherit: 从父元素继承值。
animation-play-state(动画状态)
  • running (默认值): 动画正常播放。
  • paused: 动画暂停。

示例

假设我们要创建一个简单的动画,让一个 <div> 元素在10秒内从屏幕左侧移动到右侧,并在过程中改变背景颜色。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/* 定义关键帧动画 */
@keyframes moveAndChangeColor {
0% {
left: 0;
background-color: red;
}
50% {
background-color: yellow;
}
100% {
left: 100%;
background-color: blue;
}
}

/* 应用动画到元素 */
div {
position: absolute; /* 使 left 属性生效 */
width: 100px;
height: 100px;
animation: moveAndChangeColor 10s ease-in-out infinite;
}

在这个例子中:

  • @keyframes 定义了一个名为 moveAndChangeColor 的动画,它会使元素从屏幕左侧移动到右侧,并在移动过程中改变背景颜色。
  • animation 属性设置了动画的名称、持续时间、速度曲线和重复次数。

关键帧的细节

  • 0% 表示动画开始时的样式。
  • 50% 表示动画进行到一半时的样式。
  • 100% 表示动画结束时的样式。

CSS3动画引擎会自动计算出这些关键帧之间的过渡效果,使得动画看起来非常平滑自然。

动画的复合属性

CSS中的animation是一个复合属性,它可以用来定义一个元素的动画效果。这个属性允许你设置多个与动画相关的子属性,以便更简洁地定义动画行为。这些子属性包括:

  1. animation-name: 指定一个关键帧动画的名称。
  2. animation-duration: 规定动画完成一个周期所花费的时间。
  3. animation-timing-function: 规定动画的速度曲线(线性、缓动等)。
  4. animation-delay: 规定动画开始之前的延迟时间。
  5. animation-iteration-count: 规定动画应该播放的次数,或者infinite表示无限循环。
  6. animation-direction: 规定动画完成后是否反向播放下一个周期。
  7. animation-fill-mode: 规定动画在开始前和结束后元素的状态。
  8. animation-play-state: 规定动画是运行还是暂停。

示例

假设我们想要创建一个简单的动画,使一个 <div> 元素旋转一周,我们可以这样写:

1
2
3
4
5
6
7
8
9
10
11
12
13
/* 定义关键帧动画 */
@keyframes rotate {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}

/* 应用动画 */
div {
width: 100px;
height: 100px;
background-color: red;
animation: rotate 2s linear infinite; /* 使用复合属性 */
}

复合属性的使用

在上面的例子中,animation复合属性包含了:

  • rotate: 关键帧动画的名字。
  • 2s: 动画持续时间为2秒。
  • linear: 动画的速度曲线是线性的。
  • infinite: 动画无限重复。

动画复合属性的语法

复合属性的语法如下:

1
animation: <property-value> || <property-value> || ... || <property-value>;

你可以只指定部分属性,未指定的属性将会采用其默认值。例如:

1
2
3
div {
animation: rotate 2s infinite;
}

这会应用名为 rotate 的动画,动画的持续时间为2秒,并且无限循环播放。其他属性如 timing-functionplay-state 将采用默认值(linearrunning)。

!!!提醒:顺序只需要注意durationdelay即可,先写的时间是动画持续时间(duration)后写的是延迟播放时间(delay)。

使用多个动画

复合属性还支持同时应用多个动画。你只需要为每个动画分别指定所有必要的属性,然后用逗号分隔:

1
2
3
4
5
div {
animation:
rotate 2s linear infinite,
fadeIn 3s ease-in-out 1s;
}

在这个例子中,div 元素将同时执行两个动画:rotatefadeIn。每个动画都有一组独立的属性值。

伸缩盒模型(C3,重要)

1.伸缩盒模型介绍

  • 伸缩盒模型又被称为弹性盒子,英文Flexible Box
  • 它可以轻松的控制:元素分布方式、元素对齐方式、元素视觉顺序…….
  • 截至目前,除了在部分IE浏览器不支持时,其他浏览器均已全部支持
  • 伸缩盒模型的出现,演变成了一种布局方案————flex布局

2.主轴和侧轴

主轴:从左到右,水平方向

侧轴:从上到下,垂直方向

3.容器与项目

伸缩盒模型(Flexbox)是一种用于网页布局的强大工具,它能够帮助开发者更容易地创建响应式的多列或多行布局。Flexbox 主要有两个核心组成部分:Flex Container(弹性容器)和 Flex Items(弹性项目)。

伸缩盒模型(Flexbox)是一种用于网页布局的强大工具,它能够帮助开发者更容易地创建响应式的多列或多行布局。Flexbox 主要有两个核心组成部分:Flex Container(弹性容器)和 Flex Items(弹性项目)。

Flex Container (弹性容器)

  • 定义: 当一个元素被赋予 display: flexdisplay: inline-flex 属性时,这个元素就变成了一个弹性容器。

  • 作用: 弹性容器决定了其内部的 Flex Items 如何排列以及如何利用可用的空间。

  • 开启时,其子元素会横向排列。

  • 语法:

    1
    2
    3
    .flex-container {
    display: flex; /* 或者 display: inline-flex */
    }

Flex Items (弹性项目)

  • 定义: 弹性容器内的直接子元素被称为弹性项目。
  • 特点:
    • 默认情况下,Flex Items 会根据容器的大小和方向进行排列和伸缩。
    • Flex Items 可以通过自身的属性进一步控制其行为。
    • 只要称为了弹性项目,该项目就会”块状化”

弹性容器 的属性

Flex Direction (方向)

  • flex-direction 属性: 决定了 Flex Items 的排列方向。
  • :
    • row: Flex Items 水平排列,从左至右。
    • row-reverse: Flex Items 水平排列,从右至左。
    • column: Flex Items 垂直排列,从上至下。
    • column-reverse: Flex Items 垂直排列,从下至上。

Flex Wrap (换行)

  • flex-wrap 属性: 控制 Flex Items 是否允许换行。
  • :
    • nowrap: 默认值,不允许换行。
    • wrap: 当空间不足时,Flex Items 会换行显示。
    • wrap-reverse: 当空间不足时,Flex Items 会换行显示,并且反向排列。

Justify Content (主轴对齐)

  • justify-content 属性: 控制 Flex Items 沿主轴的对齐方式。
  • :
    • flex-start: Flex Items 聚集在主轴的起始位置。
    • flex-end: Flex Items 聚集在主轴的结束位置。
    • center: Flex Items 居中对齐。
    • space-between: 在 Flex Items 之间平均分配可用空间。
    • space-around: 在每个 Flex Item 周围平均分配可用空间。
    • space-evenly: 在每个 Flex Item 之间以及两端平均分配可用空间。

Align Items (交叉轴对齐,也被称为侧轴对齐)

  • align-items 属性: 控制 Flex Items 沿交叉轴的对齐方式。
  • :
    • stretch: 默认值,使 Flex Items 填充整个侧轴。(生效条件:当伸缩项目没有指定高度时生效)
    • flex-start: Flex Items 聚集在交叉轴的起始位置。
    • flex-end: Flex Items 聚集在交叉轴的结束位置。
    • center: Flex Items 居中对齐。
    • baseline: 对齐元素的基线。

Align Content (多行对齐)

  • align-content 属性: 当 Flex Container 有多行时,控制 Flex Lines 沿侧轴的对齐方式。
  • :
    • stretch: 默认值,使 Flex Lines 填充整个侧轴。(生效条件:当伸缩项目没有指定高度时生效)
    • flex-start: Flex Lines 聚集在交叉轴的起始位置。
    • flex-end: Flex Lines 聚集在交叉轴的结束位置。
    • center: Flex Lines 居中对齐。
    • space-between: 在 Flex Lines 之间平均分配可用空间。
    • space-evenly:在每个 Flex Item 之间以及上下两端平均分配可用空间。
    • space-around: 在每个 Flex Line 周围平均分配可用空间。

小技巧

利用弹性盒子实现元素水平和垂直居中

方法1

给父元素设置如下属性

1
2
3
4
5
6
7
.father {
display:flex;
/* 设置水平居中*/
justify-content: center;
/* 设置垂直居中*/
align-items: center;
}

方法2:

给弹性元素和父元素设置以下属性

1
2
3
4
5
6
.father {
display:flex;
}
.child {
margin: auto;
}

弹性项目的属性

Flex Grow (伸展)

  • flex-grow 属性: 确定当有多余空间时,Flex Item 如何扩展。
  • :
    • <number>: 一个非负数值,表示当有多余空间时,Flex Item 扩展的比例。
    • 如果值为1,那么则等分剩余空间。
    • 如果三个弹性元素的设置的值分别为1,2,3,则分别分到1/62/63/6的空间。
    • 该属性默认值是0

Flex Shrink (收缩)

  • flex-shrink 属性: 确定当空间不足时,Flex Item 如何收缩。
  • :
    • <number>: 一个非负数值,表示当空间不足时,Flex Item 收缩的比例。

QQ_1723193542747

Flex Basis (基础大小)

  • flex-basis 属性: 确定 Flex Item 的默认大小。
  • :
    • <length>: 一个长度单位值,例如 px, em, rem 等。
    • <percentage>: 相对于容器的百分比。
    • content: Flex Item 的大小基于其内容。
    • auto: 默认值,基于内容的大小。
    • 设置该属性会代替元素本身的width

Flex (复合属性)

  • flex 属性: 是一个简写属性,用于同时设置 flex-grow, flex-shrink, 和 flex-basis

  • 语法:

    1
    2
    3
    .flex-item {
    flex: <flex-grow> <flex-shrink> <flex-basis>;
    }
  • 默认值: flex:0 1 auto。可以简写为flex:0 auto

    • 不可以拉伸,可以压缩,不设置基准长度
  • flex:1 1 auto 可以再次简写为flex:auto

    • 可以拉伸,可以压缩,不设置基准长度
  • flex:1 1 0可以再次简写为flex:1

    • 可以拉伸,可以压缩,基准长度设置为0
  • flex:0 0 auto可以再次简写为flex:none

    • 不可以拉伸,不可以压缩,不设置基准长度

Order (排序)

  • order 属性: 控制 Flex Items 在容器中的显示顺序。
  • :
    • <integer>: 一个整数值,用于确定项目的显示顺序。
    • order值小的元素会排在前面,order可以是负值。
    • 默认值是0

align-self(单独对齐)

可以用于控制单个元素的对齐方式

  • auto: 使用容器的 align-items 属性值。
  • flex-start: 项目靠拢交叉轴的起点。
  • flex-end: 项目靠拢交叉轴的终点。
  • center: 项目在交叉轴上居中。
  • baseline: 项目对齐到基线。
  • stretch: 默认值,项目拉伸以填充容器的交叉轴空间(如果项目没有明确的高度或最小高度,则会拉伸)。

示例代码

下面是一个简单的Flexbox布局示例,展示如何创建一个弹性容器,并设置其Flex Items的排列和对齐方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Flexbox Example</title>
<style>
.flex-container {
display: flex;
justify-content: center; /* 沿主轴居中对齐 */
align-items: center; /* 沿交叉轴居中对齐 */
height: 200px; /* 设置容器高度 */
background-color: lightblue;
}

.flex-item {
flex: 1; /* 等宽分配 */
background-color: tomato;
margin: 10px; /* 项目间距 */
padding: 20px;
text-align: center;
}
</style>
</head>
<body>
<div class="flex-container">
<div class="flex-item">Item 1</div>
<div class="flex-item">Item 2</div>
<div class="flex-item">Item 3</div>
</div>
</body>
</html>

在这个示例中,我们创建了一个具有三个Flex Items的Flex Container。容器的Flex Items将沿水平方向居中对齐,并且在垂直方向上也居中对齐。每个Flex Item都会等宽分配空间,并且有一定的间距。

媒体查询

1.媒体类型

含义
all 检测所有设备
screen 检测电子屏幕,包括电脑屏幕,平板屏幕,手机屏幕等
print 检测打印机

基本语法

1
2
3
@media [not | only] [mediatype] [and (expression)]* {
CSS-Code;
}
  • [not | only]: 这些关键词是可选的。(运算符)
  • [mediatype]: 指定媒体类型,例如 screenprint 等。
  • [and (expression)]: 表达式用来限定应用样式的条件,例如 min-width: 320px

2.媒体特性

常用媒体特性(应用于条件)

  • width: 视口宽度。
  • height: 视口高度。
  • orientation: 屏幕方向(portraitlandscape)。
  • aspect-ratio: 宽高比。
  • device-aspect-ratio: 设备的宽高比。
  • resolution: 分辨率。
  • min-width: 最小宽度。
  • max-width: 最大宽度。
  • min-height: 最小高度。
  • max-height: 最大高度。

3.运算符

CSS3 中的媒体查询支持几种逻辑运算符,这些运算符可以帮助你构建更复杂和精确的媒体特性组合。以下是常用的逻辑运算符:

  1. and

    • 作用: 连接两个或多个媒体特性,只有当所有特性都为真时,整个媒体查询才成立。
    • 示例:
      1
      2
      3
      @media only screen and (min-width: 600px) and (max-width: 900px) {
      /* 在屏幕宽度至少为600px但不超过900px时应用的样式 */
      }
  2. not

    • 作用: 否定一个媒体查询,即只有当媒体查询不成立时,样式才应用。

    • 示例:

      1
      2
      3
      @media not all and (min-width: 600px) {
      /* 不满足min-width: 600px时应用的样式 */
      }

      注意:not后面跟的是一个完整的媒体查询,而不仅仅是媒体特性。

  3. only

    • 作用: 保证整个媒体查询只在指定的媒体类型上有效,并且阻止老式浏览器解析媒体查询(因为它们不支持媒体查询)。
    • 示例:
      1
      2
      3
      @media only screen and (min-width: 600px) {
      /* 只在屏幕设备上且最小宽度为600px时应用的样式 */
      }
  4. **逗号 ,**或者or

    • 作用: 将多个媒体查询合并为一个规则,只要其中一个查询成立,样式就会被应用。

    • 示例:

      1
      2
      3
      @media (min-width: 600px), (max-width: 900px) {
      /* 当屏幕宽度至少为600px或不超过900px时应用的样式 */
      }

例子

下面是一个更复杂的媒体查询示例,展示了如何使用上述运算符:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* 当屏幕宽度至少为600px但不超过900px,并且设备的方向为竖直时应用的样式 */
@media only screen and (min-width: 600px) and (max-width: 900px) and (orientation: portrait) {
body {
background-color: lightblue;
}
}

/* 当屏幕宽度不是至少为600px时应用的样式 */
@media not only screen and (min-width: 600px) {
body {
background-color: lightgreen;
}
}

/* 当屏幕宽度至少为600px或不超过900px时应用的样式 */
@media (min-width: 600px), (max-width: 900px) {
body {
background-color: lightyellow;
}
}

注意事项

  • 使用only时,必须指定媒体类型(如screenprint等)。
  • 使用not时,也必须包含媒体类型,除非整个查询被not所否定。
  • 逗号分隔的媒体查询列表中,每个查询都是独立评估的,只要有任意一个查询为真,样式就会被应用。

4.使用方式

媒体查询可以直接写在CSS文件中,也可以通过@import<link>标签引入

  1. 直接在CSS文件中使用:

    1
    2
    3
    @media (min-width: 600px) {
    /* styles for screens wider than 600px */
    }
  2. 使用@import导入:

    1
    2
    3
    4
    @import url("default.css");
    @media (min-width: 600px) {
    @import url("wide.css");
    }
  3. 使用<link>标签:

    1
    2
    <link rel="stylesheet" href="default.css">
    <link rel="stylesheet" media="screen and (min-width: 600px)" href="wide.css">

BFC(面试C3中的重点)

BFC可以想象成一个隔离的独立容器,在这个容器内部的元素不会影响到容器外部的元素。换句话说,BFC内部的元素布局规则不会影响到外部元素,同时外部元素也不会影响到内部元素的布局。

1.BFC的作用(区块格式化上下文)

  1. 元素开启BFC后,其子元素不会在产生margin塌陷问题。
  2. 元素开启BFC后,自己不会被其他浮动元素所覆盖
  3. 元素开启BFC后,就算其子元素浮动,元素自身高度也不会塌陷

2.如何开启BFC

开启BFC(Block Formatting Context,块级格式化上下文)可以通过多种CSS属性来实现。以下是一些常见的方式:

  1. 浮动元素

    • 设置元素的 float 属性为 leftright

    • 示例:

      1
      2
      3
      .element {
      float: left;
      }
  2. 绝对定位或固定定位元素

    • 设置元素的 position 属性为 absolutefixed

    • 示例:

      1
      2
      3
      .element {
      position: absolute;
      }
  3. 溢出隐藏

    • 设置元素的 overflow 属性为 hidden, autoscroll

    • 示例:

      1
      2
      3
      .element {
      overflow: hidden;
      }
  4. Flex容器

    • 设置元素的 display 属性为 flexinline-flex

    • 示例:

      1
      2
      3
      .element {
      display: flex;
      }
  5. Grid容器

    • 设置元素的 display 属性为 gridinline-grid

    • 示例:

      1
      2
      3
      .element {
      display: grid;
      }
  6. Inline-block元素

    • 设置元素的 display 属性为 inline-block

    • 示例:

      1
      2
      3
      .element {
      display: inline-block;
      }
  7. **display: flow-root**:

    • 这个值在CSS3中引入,专门用于创建BFC,而不会改变元素的显示行为。

    • 示例:

      1
      2
      3
      .element {
      display: flow-root;
      }
  8. IE6 兼容性

    • 对于IE6及更低版本,可以使用 zoom 属性来模拟BFC的行为。

    • 示例:

      1
      2
      3
      4
      .element {
      zoom: 1; /* IE6及更低版本 */
      *zoom: 1; /* IE7及更高版本 */
      }

示例

这里有一个具体的示例,展示如何使用overflow: hidden来创建BFC并解决高度塌陷问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>BFC Example</title>
<style>
.container {
border: 1px solid black;
padding: 10px;
overflow: hidden; /* 创建BFC */
}
.box {
width: 100px;
height: 100px;
background-color: lightblue;
float: left;
}
</style>
</head>
<body>
<div class="container">
<div class="box"></div>
<p>Some text here...</p>
</div>
</body>
</html>

在这个示例中,.container设置了overflow: hidden来创建一个BFC,这样即使.box是浮动的,.container的高度也会正确地包含浮动元素和文本。

请注意,选择哪种方法取决于你的具体需求。例如,如果你想保留元素的默认行为,可以选择overflow: hidden或者display: flow-root。如果你需要创建一个容器来布局其子元素,那么display: flexdisplay: grid可能是更好的选择。

关于元素水平垂直居中设置的总结

实现元素的水平垂直居中主要有几种常见的方式,比如使用CSS的「Flexbox」
[Grid]布局,也可以使用绝对定位配合 transform 属性。此外,还可以利用一些传统
的方法如表格布局。让我分别简单介绍-下:

  1. Flexbox:通过设置父元素的 display为 fex,并使用 justify-content 和 align-
    items 属性。
  2. Grid布局:通过设置父元素的 display为 grid,并使用 place-items 属性。
  3. 绝对定位加 transform:通过绝对定位将元素移动到父元素的中心。
  4. 表格布局:通过设置 display为 table 和 display 为 table-cell.

FlexBox布局法

1
2
3
<div class="parent">
<div class="child"></div>
</div>
1
2
3
4
5
6
7
8
9
10
11
.parent {
display: flex;
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
height: 100vh; /* 为了示例效果,父元素设置全屏高度 */
}
.child {
width: 100px;
height: 100px;
background-color: red;
}

Grid布局法

直接给出CSS代码

1
2
3
4
5
6
7
8
9
10
.parent {
display: grid;
place-items: center; /* 同时水平和垂直居中 */
height: 100vh; /* 为了示例效果,父元素设置全屏高度 */
}
.child {
width: 100px;
height: 100px;
background-color: blue;
}

绝对定位加transform

这种方法是通过将元素绝对定位到其父元素中部,然后利用transform 属性的translate 将其移动到中心位置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.parent {
position: relative;
height: 100vh; /* 为了示例效果,父元素设置全屏高度 */
}
.child {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 100px;
height: 100px;
background-color: green;
}

网页元素的层叠顺序

网页元素的层叠顺序是由z-index属性决定的,z-index属性值越大,元素在堆叠顺序中就越靠前。

但是,z-index属性只有在元素有定位属性(position为absolute、relative、fixed、sticky)等其中一个时,z-index属性才会生效。如果元素没有指定z-index或z-index的值相同,则他们的层叠顺序取决于它们在DOM树中的顺序,后面的元素会覆盖前面的元素。

前端中的生成图形

生成三角形

使用css实现三角形的关键是调整元素的border属性,当元素的宽和高都为0时

通过设置不同方向border颜色和宽度来达到目的

控制生成的方向

  • 朝上:设置border-bottom的颜色,其他边为透明。
  • 朝下:设置border-top的颜色,其他边为透明颜色。
  • 朝左:设置border-right的颜色,其他边为透明颜色。
  • 朝右:设置border-left的颜色,其他边为透明颜色。

控制生成的形状

  • 通过调整border的宽度来控制形状。
1
2
3
4
5
6
7
.triangle{
width: 0;
height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-bottom: 50px solid red;
}

image-20241019201739330

生成扇形

生成一个扇形。主要是通过borer属性配合border-radius来绘制一个圆形,然后隐藏

部分边框。

控制扇形的角度

是通过border的宽度和透明部分的边数,可以生成不同角度的扇形:

  • 扇形的角度由border颜色和透明部分的比例决定。

可以通过transform属性中的rotate来旋转扇形

通过transform:rotate()可以调整扇形的起始位置:

  • 比如旋转-45度可以使扇形从顶部开始
1
2
3
4
5
6
7
8
9
  .fan-shape {
width: 0;
height: 0;
border-radius: 50%;
border: 50px solid transparent;
border-top-color: #3498db;
border-left-color: #3498db;
transform: rotate(-45deg);
}

image-20241019204620964

生成宽高自适应的正方形

在网页设计中,创建一个自适应的正方形通常意味着这个正方形能够根据其父容器或视窗大小的变化自动调整自身的尺寸。实现这一目标有多种方法,下面我将介绍几种常见的CSS技术来实现自适应正方形。

方法一:使用 padding 百分比

这种方法利用了百分比 padding 值相对于包含块宽度计算的特点,即使高度没有指定,也能创建一个正方形。

1
<div class="square"></div>
1
2
3
4
5
.square {
width: 50%; /* 可以是任何百分比值 */
padding-top: 50%; /* 与宽度相同的比例 */
background-color: #f00;
}

这里,.square 的宽度设置为父元素宽度的50%,而 padding-top 也设置为50%。因为 padding 的百分比是基于元素宽度计算的,所以这将确保 .square 的高度始终等于它的宽度,从而形成一个正方形。

方法二:使用伪元素

此方法通过在一个容器内创建一个伪元素,并设置其宽高相等来实现正方形。

1
<div class="square-container"></div>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.square-container {
position: relative;
width: 50%;
}

.square-container::before {
content: '';
display: block;
padding-top: 100%; /* 创建一个与容器宽度相等的高度 */
}

.square-container .content {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
/* 这里可以添加更多样式,如背景颜色、边框等 */
background-color: #f00;
}

在这个例子中,.square-container 是一个相对定位的容器,它有一个绝对定位的伪元素 ::before,该伪元素通过 padding-top: 100% 设置了一个与其容器宽度相同的高度。这样就创建了一个自适应的正方形区域,你可以在其中放置任何内容。

方法三:使用 CSS Grid 或 Flexbox

对于更现代的布局需求,可以考虑使用 CSS Grid 或 Flexbox 来创建自适应的正方形。

使用 Grid:

1
2
3
<div class="grid-container">
<div class="grid-item"></div>
</div>
1
2
3
4
5
6
7
8
9
10
.grid-container {
display: grid;
}

.grid-item {
width: 50%;
height: 0;
padding-bottom: 50%;
background-color: #f00;
}

使用 Flexbox:

1
2
3
<div class="flex-container">
<div class="flex-item"></div>
</div>
1
2
3
4
5
6
7
8
9
.flex-container {
display: flex;
}

.flex-item {
flex: 1;
padding-top: 100%; /* 或者使用其他方式设置固定比例 */
background-color: #f00;
}

这些方法都可以有效地创建一个自适应的正方形,选择哪种方法取决于你的具体需求和项目的复杂度。希望这些信息对你有所帮助!

画一条0.5px的线

方法一:使用 CSS transform 属性

通过设置元素的高度为1px,然后使用 transform: scaleY(0.5); 将其垂直压缩到0.5倍,从而实现0.5px的效果。

1
2
3
4
5
6
.line {
width: 100%;
height: 1px;
background-color: black;
transform: scaleY(0.5);
}

方法二:使用 bordertransform 结合

另一种方法是使用 border 属性结合 transform 来实现0.5px的边框效果。具体做法是设置 border 的宽度为1px,然后通过 transform: scaleY(0.5); 将其压缩到0.5倍。

1
2
3
4
5
6
.line {
width: 100%;
border-bottom: 1px solid black;
transform: scaleY(0.5);
transform-origin: 0 100%;
}

详细解释

  1. 使用 transform 属性

    • 设置元素的高度为1px。
    • 使用 transform: scaleY(0.5); 将高度压缩到0.5倍。
    • 这样在高密度屏幕上,1px的高度会被压缩成0.5px,从而实现细线效果。
  2. 使用 bordertransform 结合

    • 设置元素的底部边框宽度为1px。
    • 使用 transform: scaleY(0.5); 将边框的高度压缩到0.5倍。
    • 通过 transform-origin: 0 100%; 确保压缩是从底部开始的,这样不会影响其他布局。

这两种方法都可以有效地在不同设备上实现0.5px的细线效果,确保视觉效果的一致性和美观性。

前端学习路径

QQ_1723199698476

前端研发流程

image-20241021114641698