CSS基础
1. CSS入门
1.1. CSS是什么
CSS是Cascading Style Sheets的缩写,翻译为层叠样式表。CSS是一种样式表语言,用来描述HTML文档的表现方式,如字体、色彩、背景色等等。我们先从一段简单的CSS代码开始。
代码1 CSS示例
p {color: red; }
这段代码的效果是将HTML文档中全部 <p>
元素里的文本设置成红色。
大括号里面的是CSS规则,格式为
属性: 属性值;
每条规则占一行,以半角分号结尾。属性和值之间以半角冒号分割,属性和值的前后可以添加空格。 color
表示文字色彩属性, red
表示将这个属性设置为红色。单独的一条规则叫做声明。大括号前面的 p
表示将这条规则应用到所有 <p>
元素,叫做选择器。
由选择器、大括号、声明共同构成的整个结构叫做规则集,简称规则。CSS就是由许多个类似的规则集构成的。学习CSS就是要弄清楚下列3个问题:
- 属性:HTML标签有哪些样式属性?
- 属性值:这些属性可以设置为什么值,对应的样式是什么?
- 选择器:如何将规则应用到HTML标签上?
1.2. CSS和HTML
前面我们说过,CSS是描述HTML文档样式的语言。如何将CSS和HTML结合起来呢?方法是在HTML中添加 <link>
标签。
代码2 在HTML中引入CSS
<html><head><link href="style.css" rel="stylesheet" /></head><body><!-- 其他内容 --></body> </html>
<link>
标签将CSS和HTML结合起来。浏览器在展示HTML时,根据CSS规则集描述的样式,决定渲染的效果。
2. 属性值和单位
CSS规则由属性和属性值构成。很多属性值带有单位。本章介绍属性值和单位,作为后续属性部分的基础。
每个CSS属性都可以有一个或多个值。下面是一个示例:
p {font-size: 1.2em;height: 100px;letter-spacing: 0;width: 80%;background-color: #00ff00;color: red; }
在例子中, font-size
是字体尺寸, height
和 width
是元素高度和宽度, background-color
是元素背景色彩, color
是文字色彩, letter-spacing
是字间距。这里主要介绍属性值和单位,后面会详细介绍这些属性。
从例子中可以看到,属性值可以是带单位的值( 1.2em
、 100px
)、不带单位的数值( 0
)、百分比( 80%
)、十六进制色彩值( #00ff00
)、预定义名字( red
)等。我们逐一介绍这些属性值和单位。
em
是上级元素中文字的尺寸。 1.2em
表示在元素中的文字大小是上级元素的1.2倍。因为用于描述大小, em
叫做距离单位。因为是相对于上级元素的, em
属于相对距离单位。下表列出了常用的相对距离单位。附录包含一份更完整的表格。
em | 上级元素字符高度 |
rem | 根元素字符高度 |
ex | 小写字母高度 |
cap | 大写字母高度 |
ch | 字符“0”的宽度 |
ic | 字符“水”的宽度 |
px
表示CSS像素(也叫参考像素)。像素是屏幕能显示的最小单位。不同屏幕中像素的大小不一样,为了统一规范,CSS使用“CSS像素”的概念,在上下文没有歧义时简称像素。CSS像素定义为 196 英寸。1英寸是2.54厘米,因此1像素是0.26毫米。请注意,不同设备上,1个CSS像素实际占据的空间可能不同,未必一定是0.26毫米。这里只是一个简单的介绍。要了解更多内容,请查阅本节末尾的参考资料部分。
px
是绝对距离单位。下面列出了常用的绝对距离单位。附录包含更完整的表格。
cm | 厘米 |
mm | 毫米 |
in | 英寸 1in = 2.54cm = 96px |
pt | 点 1pt = 172 in |
px | 像素 1px = 196 in |
如果某个距离的值是0,比如 0px
或 0cm
,此时单位已经不重要了,可以省略,简写为0,如 letter-spacing: 0;
。
80%
属于百分比数据类型。很多关于尺寸的属性可以使用百分比。比如例子中的 width: 80%;
表示元素宽度占上级元素宽度的80%。
#00ff00
和 red
是色彩值,色彩也是CSS数据类型。色彩值可以是色彩名( red
)、十六进制色彩记号( #00ff00
)、 rgb
函数( rgb(31 120 50)
)等。
十六进制色彩记号有4种语法:
代码3 十六进制色彩记号语法
#RGB /* 三值语法,#RRGGBB的缩写 */ #RGBA /* 四值语法,#RRGGBBAA的缩写 */ #RRGGBB /* 六值语法 */ #RRGGBBAA /* 八值语法 */
R、G、B、A分别是红色、绿色、蓝色和透明度分量,值从00到ff。对于透明度分量,00表示完全透明,ff表示完全不透明。为了方便引用色彩值,CSS定义了色彩名,下面是部分常用色彩名。附录包含更完整的列表。
代码4 常见色彩名
aqua #00ffff black #000000 blue #0000ff fuchsia #ff00ff gray #808080 green #008000 lime #00ff00 maroon #800000 navy #000080 olive #808000 purple #800080 red #ff0000 silver #c0c0c0 teal #008080 white #ffffff yellow #ffff00
3. 基础样式
现在我们来学习CSS中的基础样式。所有HTML元素几乎都支持这些样式。
3.1. 文字
字体和文本样式分为两类,一类描述字符样式,如大小、色彩、笔画粗细等。另一类描述字符布局,如对齐方式、字间距、行间距等。
3.1.1. 字符样式
控制字符样式最主要属性的是 font-family
,决定了元素中的文字的字体族。
span {font-family: "Times New Roman", "新宋体", serif; }
如上例所述, font-family
支持设置多个字体族,以半角逗号分隔。CSS中使用的标点都是半角符号。允许设置多个字体族是出于兼容性的考虑,为没有安装对应字体族电脑提供一些备选项。浏览器按照顺序依次选择可用字体族。如果一个都不可用,使用系统默认字体。如果字体族名字包含空格,必须使用双引号包围起来,如 "Times New Roman"
。除了字体族名字,CSS还定义了几个通用字体族,也可以作为 font-family
属性值。
通用字体族 | 说明 |
---|---|
serif | 衬线字体,笔画存在装饰,粗细不同 |
sans serif | 无衬线字体,笔画没有装饰,粗细均匀 |
cursive | 手写体 |
fantasy | 艺术体 |
monospace | 等宽字体 |
fangsong | 仿宋体 |
kai | 楷体 |
另一个影响字体样式的重要属性是 font-size
字号,它决定了字符尺寸。 font-size
值可以是带有距离单位、百分比、或者尺寸名字。
font-size: 32px; font-size: 1em; font-size: 80%; font-size: small;
这里面的 small
是绝对尺寸,是一个比 medium
(大部分浏览器 font-size
的默认值)小的值。至于具体是多少,或者比 medium
小多少,CSS没有定义,由浏览器自行决定。类似的值还有:
绝对尺寸 | 在大部分浏览器中的值 |
---|---|
xx-small | 9-10px |
x-small | 10-12px |
small | 13-14px |
medium | 16px |
large | 18px |
x-large | 24px |
xx-large | 32px |
xxx-large | 48px |
下面我们介绍另外三个影响字符样式的属性: font-weight
、 font-stretch
和 font-style
,它们控制笔画粗细、字符宽度和倾斜风格。要理解它们,首先要明白字体和字体族的区别,弄清楚字形、字体、字体族3个概念。
字形 | 字符的表现形式。 |
字体 | 有相同外观和排版尺寸的字形的集合。 |
字体族 | 有相同风格的,笔画粗细、字宽或倾斜风格s不同的字体的集合。 |
字体族中的字体看起来差不多,区别就在于笔画粗细( font-weight
)、字符宽度( font-stretch
)和倾斜风格( font-style
)不同。
font-weight
叫做字重,取值从1到1000,越大笔画越粗。字重的默认值是 bold
,定义为400。另一个常用值是 bold
,定义为700。
font-stretch
叫做字宽,用于在水平方向上拉伸或压缩字符,值是百分比。小于100%表示压缩,大于100%是拉伸,默认值是100%。
名字 | 值 |
---|---|
ultra-condensed | 50% |
extra-condensed | 62.5% |
condensed | 75% |
semi-condensed | 87.5% |
normal | 100% |
semi-expanded | 112.5% |
expanded | 125% |
extra-expanded | 150% |
ultra-expanded | 200% |
font-style
表示字符的倾斜风格,取值可以是 normal
(不倾斜)或 italic
(倾斜)。
还有几个和字体样式有关的属性: color
是字体色彩。 text-decoration
是文字上下的修饰符,例如 text-decoration: underline dotted red;
在文字下方绘制一个红色虚线下划线。 text-shadow
是文字阴影, text-shadow: #fc0 2px 4px 8px;
表示绘制颜色 #fc0
的文字阴影,阴影相对文字在x轴偏移2像素,y轴偏移4像素,阴影渐变半径8px。
属性 | 说明 | 示例 |
---|---|---|
font-family | 字体族 | "Times New Roman" |
font-size | 字体大小 | 1.2rem |
font-weight | 字重,笔画粗细 | bold |
font-stretch | 字宽 | 100% |
font-style | 倾斜风格 | italic |
color | 字体色彩 | red |
text-decoration | 文字装饰 | underline dotted red |
text-shadow | 文字阴影 | #fc0 2px 4px 8px |
3.1.2. 字符布局
除了字符自身的样式属性外,还有一些属性决定了字符的排列方式。 text-align
是文字排列方向,可以是 left
左对齐、 right
右对齐、 center
剧中、 justify
两端对齐。 line-height
是一行文字占用的高度,包括字符和字符上下的空白空间。 letter-spacing
是字间距, word-spacing
是词间距。
属性 | 说明 | 示例 |
---|---|---|
text-align | 文本对齐方式 | left |
line-height | 行高 | 4px |
letter-spacing | 字间距 | 1px |
word-spacing | 词间距 | 6px |
3.2. 背景
background-color
决定了元素背景色彩,值可以是色彩名、十六进制色彩值、色彩函数等。
background-color: red; background-color: #bbff00; background-color: rgb(255 255 128); background-color: rgb(117 190 218 / 50%); background-color: transparent;
这里的 rgb(117 190 218 / 50%)
等效于 #75beda80
,斜杠 /
后面的百分比是透明通量, 0% 是完全透明,100% 是完全不透明。透明通量也可以使用数值表示,0表示完全透明,1.0表示完全不透明。如果希望将背景设置为透明,可以使用 background-color: transparent;
。
CSS不仅支持设置背景色的透明通量,也支持设置元素的透明通量。
opacity: 1; /* 完全不透明 */ opacity: 0.6; /* 半透明 */ opacity: 0; /* 完全透明 */
如果希望使用图片作为背景,可以使用 background-image
属性。
background-image: url("background.png");
背景图片的位置和大小由 background-position
和 background-size
控制。
background-position: top; /* 顶部水平居中 */ background-position: bottom; /* 底部水平居中 */ background-position: left; /* 左对齐垂直居中 */ background-position: right; /* 右对齐垂直居中 */ background-position: center; /* 水平和垂直居中 */background-position: top right; /* 顶部右对齐 */ background-position: 25% 75%; /* 距离左边25%,顶边75%处 */ background-position: 1cm 2cm; /* 距离左边1cm,顶边2cm处 */background-size: cover; /* 缩放图片覆盖元素,可能裁剪图片。 */ background-size: contain; /* 缩放图片到能够让元素完整包含的最大尺寸,以空白填充剩余空间。 */background-size: 50%; /* 设置图片宽度。 */ background-size: 12px; /* 设置图片宽度。 */background-size: 3em 25%; /* 设置图片宽度和高度。 */ background-size: auto 6px; /* 设置图片宽度和高度。 */
如果图片尺寸较小,希望用图片铺满元素,可以使用 background-repeat
属性。
background-repeat: repeat space;
background-repeat
属性有两个值,分别表示在水平、垂直方向上如何重复排列图片。可取的值有
值 | 说明 |
---|---|
repeat | 重复排列图片,铺满整个元素。最后一个图片可能被裁剪。 |
space | 重复排列图片,首个最左,末尾右边,均匀排列,间以空白。 |
round | 类似space,适当放大图片,覆盖间隔。 |
no-repeat | 不重复排列图片。 |
为了简化编码,CSS提供了单值简写。
单值 | 等价于双值 |
---|---|
repeat-x | repeat no-repeat |
repeat-y | no-repeat repeat |
repeat | repeat repeat |
space | space space |
round | round round |
no-repeat | no-repeat no-repeat |
3.3. 边框
边框样式由3个主要属性控制: border-width
是边框宽度, border-style
是边框样式,比如虚线、短横线、实线等, border-color
是边框色彩。
代码5 边框属性
border-width: 4px; border-width: 2px 1.5em; /* 顶底 | 左右 */ border-width: 1px 2em 1.5cm; /* 顶 | 左右 | 底 */ border-width: 1px 2em 0 4rem; /* 顶 | 右 | 底 | 左 */border-color: red; border-color: red #f015ca; /* 顶底 | 左右 */ border-color: red yellow green; /* 顶 | 左右 | 底 */ border-color: red yellow green blue; /* 顶 | 右 | 底 | 左 */border-style: none; /* 不显示 */ border-style: dotted; /* 圆点 */ border-style: dashed; /* 短虚线 */ border-style: solid; /* 实线 */ border-style: double; /* 双实线 */ border-style: groove; /* 浮雕 */ border-style: ridge; /* 浮雕 */border-style: dotted solid; /* 顶底 | 左右 */ border-style: hidden double dashed; /* 顶 | 左右 | 底 */ border-style: none solid dotted dashed; /* 顶 | 右 | 底 | 左 */
此外还有两个重要的属性, border-radius
是边框圆角半径, border-image
是边框图片。
border-radius: 30px; border-radius: 25% 10%; /* 顶底 | 左右 */ border-radius: 10% 30% 50% 70%; /* 顶 | 右 | 底 | 左 */ border-image: url("/images/border.png");
轮廓是在边框外侧,紧贴边框绘制的线条,和边框有些类似。我们常见的输入框,周围的细线就是边框。轮廓的样式和边框几乎一样。
代码6 轮廓属性
outline-width outline-color outlint-style
4. 选择器
对属性和属性值有了一定了解之后,我们开始介绍选择器。选择器决定了属性值应用到哪个元素上。首先介绍最基础的选择器,然后介绍如何将选择器组合起来,实现更丰富的效果。最后介绍按照元素状态或位置进行的选择的伪选择器。
4.1. 基本选择器
我们重温第一个例子:
p {color: red; }
这段规则会应用到全部 <p>
元素上。因为按照元素进行选择,这个选择器叫做元素选择器。此外还有按照元素的class属性值进行选择的类选择器,按照id属性值选择的标识选择器,以及更通用的,按照一般属性值进行选择的属性选择器。最后一个是选择全部元素的通用选择器。
代码7 基本选择器语法
元素 { 样式声明 } /* 元素选择器,按元素选择。 */.类名 { 样式声明 } /* 类选择器,按class属性选择。 */ 元素.类名 { 样式声明 } /* 类选择器可以指定适用元素。 */#标识 { 样式声明 } /* 标识选择器,按id属性选择。 */[属性] { 样式声明 } /* 属性选择器 */ [属性=值] { 样式声明 } [属性~=值] { 样式声明 } [属性|=值] { 样式声明 } [属性^=值] { 样式声明 } [属性$=值] { 样式声明 } [属性*=值] { 样式声明 } 元素[属性=值] { 样式声明 } /* 属性选择器可以指定适用元素。 */ [属性1=值1][属性2=值2] { 样式声明 } /* 属性选择器并集。 */*{ 样式声明 } /* 通用选择器,选择全部元素。 */
这里规则相对复杂的是属性选择器,我们逐一介绍。
[attr]{ 样式声明 }
选择拥有属性attr
的元素。[attr=value] { 样式声明 }
选择拥有属性attr
,并且值是value
的元素。[attr~=value] { 样式声明 }
如果元素的attr
属性值是以空格分隔的列表,且列表包含value
,选择元素。[attr|=value] { 样式声明 }
如果元素的attr
属性值以value
或value-
为前缀,选择元素。[attr^=value] { 样式声明 }
如果元素的attr
属性值以value
为前缀,选择元素。[attr$=value] { 样式声明 }
如果元素的attr
属性值以value
为后缀,选择元素。[attr*=value] { 样式声明 }
如果元素的attr
属性值以value
为子串,选择元素。
4.2. 组合起来
选择器列表和组合器是将多个选择器结合起来,实现更强大功能的方法。选择器列表允许多个选择器使用相同的样式规则。组合器将多个选择器结合,构造更精细的选择方式。
4.2.1. 选择器列表
如果多个选择器需要使用同一组样式,可以使用选择器列表。列表选择器是用逗号分隔的选择器列表,逗号前后可以有空格、换行符或者其他空白符。
代码8 选择器列表
h1, h2, h3, h4, h5, h6 {font-family: helvetica; }
这个例子表示 <h1>
- <h6>
标题元素都使用 helvetica
字体族。效果和分别使用6个元素选择器是一样的。
使用选择器列表可以简化编码,但有一点需要注意:如果列表中的某个选择器无效,整个规则都会被忽略。例如
代码9 无效的选择器列表
h1, h2:invalid-pseudo, h3 {font-family: sans-serif; }
由于 h2:invalid-pseudo
无效, h1
和 h3
也不会采用样式块。
4.2.2. 组合器
组合器将多个选择器结合,构造更精细的选择方式。
代码10 组合器
选择器1 选择器2 { 样式声明 } /* 下级组合器 */ 选择器1 > 选择器2 { 样式声明 } /* 直接下级组合器 */ 选择器1 ~ 选择器2 { 样式声明 } /* 后续同级组合器 */ 选择器1 + 选择器2 { 样式声明 } /* 邻接后续同级组合器 */
下级组合器 | 选择器1 选择器2 { 样式声明 } |
选择器1匹配的元素中,若其下级元素匹配选择器2,选择下级元素。 | |
直接下级组合器 | 选择器1 > 选择器2 { 样式声明 } |
选择器1匹配的元素中,若其直接下级元素匹配选择器2,选择下级元素。 | |
后续同级组合器 | 选择器1 ~ 选择器2 { 样式声明 } |
选择器1匹配的元素中,若后续同级元素匹配选择器2,选择同级元素。 | |
邻接后续同级组合器 | 选择器1 + 选择器2 { 样式声明 } |
选择器1匹配的元素中,若紧邻的后续同级元素匹配选择器2,选择同级元素。 |
4.3. 伪类和伪元素
伪类和伪元素是选择器的扩展,放置在选择器后面,提供了更精细的选择机制。伪类以冒号开头,如 button:hover
。伪元素以双冒号开头,如 p::first-letter
。
伪类 | 说明 |
---|---|
:hover | 鼠标悬停时 |
:active | 元素被点击瞬间 |
:focus | 元素获得焦点时 |
:visited | 已访问链接 |
:checked | 选中的表单元素 |
:disabled | 禁用状态 |
:nth-child(n) | 元素的第n个下级元素 |
:not(选择器列表) | 排除指定选择器 |
:is(选择器列表) | 匹配任意一个选择器 |
:has(选择器列表) |
伪元素 | 说明 |
---|---|
::before | 元素内容前 |
::after | 元素内容后 |
::first-letter | 元素内容的首字母 |
::first-line | 元素内容的首行 |
::selection | 用户选中的文本 |
::placeholder | 输入框占位符 |
伪类和伪元素作为选择器的扩展,必须跟在选择器后面,不能独立使用。可以同时使用多个伪类,依次排列。伪类和伪元素也可以同时使用,伪类在前,伪元素在后。
代码11 伪类在前,伪元素在后。
span:hover:active { ... } div[data-tooltip]:hover::after { ... }
5. 优先级和层叠
学习了选择器之后,我们会遇到一个问题:如果两个选择器命中了同一个元素,要选哪个呢?选优先级高的。优先级相同时,选层叠顺序靠后的。
每个选择器都有优先级,简单来说,越具体的选择器优先级越高。标识选择器比类选择器具体,因此优先级高于类选择器。类选择器可以看做是属性选择器的特例,二者优先级相同,又都高于元素选择器。
优先级 | 选择器 |
---|---|
高 | 标识选择器 |
类选择器 属性选择器 | |
低 | 元素选择器 |
如果两个选择器优先级相同,将会按照层叠顺序,即样式块的编写顺序,选择靠后的一个。
代码12 优先级相同时,选层叠顺序靠后者
p {color: red; }/* 层叠顺序靠后者生效 */ p {color: blue; }
6. 盒模型
CSS把元素放到一个“盒子”里面,通过排列盒子实现布局。每个盒子分为4层,由内而外依次是内容、内边距、边框、外边距。内容的宽度和高度由 width
和 height
确定。内边距是内容到边框之间的距离,由 padding
确定。边框是在内容周围的修饰性线条,线条宽度由 border-width
确定。外边距是边框到其他元素(边框)的距离,由 margin
确定。元素实际占据的空间包括内容、内边距和边框,不包括外边距。外边距是控制元素(边框)之间距离的。
图1 盒模型
内容的宽度和高度可以通过 width
和 height
设置。值可以是带距离单位的值、百分比(相对于上级元素)或 auto
。 auto
是默认值,表示让浏览器自行元素宽度。使用 min-width
和 max-width
可以设置元素的最小和最大宽度,这两个属性的优先级高于 width
。类似的,高度属性有 height
、 min-height
和 max-height
。
从内容到边框(内层)的距离叫内边距,使用 padding
设置,也可以在每个方向上单独设置内边距。内边距可以设置为负数。
代码13 内边距
padding: 12px; /* 内边距 */ padding: 8px 16px; /* 顶底 | 左右 */ padding: 8px 16px 12px; /* 顶 | 左右 | 底 */ padding: 8px 16px 12px -24px; /* 顶 | 右 | 底 | 左 */ padding-top: 12px; /* 顶部内边距 */ padding-right: 12px; /* 右侧内边距 */ padding-bottom: 12px; /* 底部内边距 */ padding-left: 12px; /* 左侧内边距 */
边框是在内容周围的修饰性线条,线条有粗细,边框也会占用空间。同样的,可以为四个方向的边框单独设置样式。
代码14 边框样式
border-top-width border-top-style border-top-color border-right-width border-right-style border-right-color border-bottom-width border-bottom-style border-bottom-color border-left-width border-left-style border-left-color
轮廓是在边框外侧紧贴边框的线条。轮廓不占用空间,意思是不会因为绘制轮廓而将其他元素“推开”,因此盒模型不包含轮廓。轮廓在边框外侧,这里通常是属于外边距的空间。如果外边距是0而轮廓宽度大于0,轮廓将“侵入”到其他元素的边框、内边距或内容所占用的空间。
外边距是边框(外侧)到其他元素边框(外侧)的距离。和内边距一样,外边距也可以设置成负值。
代码15 外边距
margin: 12px; /* 外边距 */ margin: 8px 16px; /* 顶底 | 左右 */ margin: 8px 16px 12px; /* 顶 | 左右 | 底 */ margin: 8px 16px 12px -24px; /* 顶 | 右 | 底 | 左 */ margin-top: 12px; /* 顶部外边距 */ margin-right: 12px; /* 右侧外边距 */ margin-bottom: 12px; /* 底部外边距 */ margin-left: 12px; /* 左侧外边距 */
由于外边距和两个元素有关,必然产生一个问题:如果两个相邻元素都设置了 margin
,那么它们边框外侧之间的距离是多少呢?这个计算规则叫做外边距折叠,方法如下:
- 两个正外边距取最大值。
- 两个负外边距取最小值(绝对值最大)。
- 一正一负外边距取和。
相关文章:
CSS基础
1. CSS入门 1.1. CSS是什么 CSS是Cascading Style Sheets的缩写,翻译为层叠样式表。CSS是一种样式表语言,用来描述HTML文档的表现方式,如字体、色彩、背景色等等。我们先从一段简单的CSS代码开始。 代码1 CSS示例 p {color: red; }这段代…...
【Linux系统篇】:什么是信号以及信号是如何产生的---从基础到应用的全面解析
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:Linux篇–CSDN博客 文章目录 一.信号概念1.生活角度的信号2.技术应用角度的信号3.补充内容前…...
SpringSecurity源码解读AbstractAuthenticationProcessingFilter
一、介绍 AbstractAuthenticationProcessingFilter 是 Spring Security 框架里的一个抽象过滤器,它在处理基于表单的认证等认证流程时起着关键作用。它继承自 GenericFilterBean,并实现了 javax.servlet.Filter 接口。此过滤器的主要功能是拦截客户端发送的认证请求,对请求…...
Python torchvision.transforms 下常用图像处理方法
torchvision.transforms 是 PyTorch 用于处理图像数据的一个模块,提供了丰富的图像变换功能。 1. transforms.Compose 的使用方法 transforms.Compose 用于将多个 transforms 操作组合起来,形成一个变换序列,然后按顺序对图像进行处理。其输…...
Zynq7020 制作boot.bin及烧录到开发板全流程解析
Zynq7020作为Xilinx推出的经典SoC芯片,其PS(Processing System)与PL(Programmable Logic)协同工作的特性使其在嵌入式开发中广泛应用。然而,初次接触Zynq的开发者在制作启动文件boot.bin及烧录时࿰…...
【办公类-89-02】20250424会议记录模版WORD自动添加空格补全下划线
背景需求 4月23日听了一个MJB的征文培训,需要写会议记录 把资料黏贴到模版后,发现每行需要有画满下划线 原来做这套资料,就是手动按空格到一行末,有空格才会出现下划线,也就是要按很多的空格(凑满一行&…...
Python-36:饭馆菜品选择问题
问题描述 小C来到了一家饭馆,这里共有 nn 道菜,第 ii 道菜的价格为 a_i。其中一些菜中含有蘑菇,s_i 代表第 ii 道菜是否含有蘑菇。如果 s_i 1,那么第 ii 道菜含有蘑菇,否则没有。 小C希望点 kk 道菜,且希…...
某大型电解铝厂电解系统谐波治理装置改造沃伦森电气
电解铝行业谐波治理解决方案——无源滤波装置优化升级,保障稳定运行 在电解铝生产过程中,谐波污染问题严重影响电网电能质量,甚至可能导致滤波装置损坏,引发群爆事故。河南登封某大型电解铝厂通过无源滤波装置智能化改造ÿ…...
基于YOLO+DeepSeek的农作物病虫害检测系统
前言 本系统是一个基于YOLODeepSeek的农作物病虫害检测系统。 可使用YOLOV1-YOLOV12的任意模型进行目标检测。可以实现检测图片、批量检测图片、视频检测、摄像头检测四种方式。 能够检测出[“苹果-黑腐病”, “苹果-健康”, “苹果-结痂”, “甜椒-细菌性斑疹”, “甜椒-健康…...
Python实现技能记录系统
Python实现技能记录系统 来自网络,有改进。 技能记录系统界面如下: 具有保存图片和显示功能——允许用户选择图片保存,选择历史记录时若有图片可预览图片。 这个程序的数据保存在数据库skills2.db中,此数据库由用Python 自带的…...
【专题刷题】二分查找(一):深度解刨二分思想和二分模板
📝前言说明: 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码;ÿ…...
基于Python+Flask的MCP SDK响应式文档展示系统设计与实现
以下是使用Python Flask HTML实现的MCP文档展示系统: # app.py from flask import Flask, render_templateapp Flask(__name__)app.route(/) def index():return render_template(index.html)app.route(/installation) def installation():return render_templa…...
Flask + ajax上传文件(一)
一、概述 本教程将教你如何使用Flask后端和AJAX前端实现文件上传功能,包含完整的代码实现和详细解释。 二、环境准备 1. 所需工具和库 Python 3.xFlask框架jQuery库Bootstrap(可选,用于美化界面)2. 安装Flask pip install flask三、项目结构 upload_project/ ├── a…...
【每天一个知识点】熵(Entropy)
“熵(Entropy)”是信息论、热力学、机器学习等多个领域的核心概念。它可以用一句话概括为: 🔑 熵表示系统的不确定性或信息混乱程度。 📚 一、信息论中的熵(Information Entropy) 在 Claude Sh…...
GIT 使用小记
全局设置 PS C:\workspace> git config --global user.name "FreeMan" PS C:\workspace> git config --global user.email "12323772wawhyuser.noreply.gitee.com" PS C:\workspace> git remote add origin https://gitee.com/wawhy/mountain.git…...
如何保证高防服务器中的系统安全?
对于高防服务器中的系统安全,企业通常会采取一系列的防护措施和策略防止网络攻击、入侵、恶意软件和其他网络安全威胁,下面是几个较为主要的安全防护措施,能够帮助企业提升高防服务器的安全性。 定期更新服务器中操作系统以及所有安装的软件&…...
【go语言】window环境从源码编译go
背景 早就听过go语言已经实现自举, 也就是使用旧版本go,来编译新版源码,得到新版本go。 步骤 1. 下载源码 git clone https://github.com/golang/go.git 2. 开始make cd go\src make.bat 3. 等待编译 卡住就按下回车 验证新版本 ……...
医学图像(DICOM数据)读取及显示(横断面、冠状面、矢状面、3D显示)为什么用ITK+VTK,单独用ITK或者VTK能实一样功能吗?
在医学图像处理中,结合使用 ITK 和 VTK 是常见的做法,因为它们各自专注于不同的核心功能。以下是逐步解释为何代码中同时使用两者,以及单独使用是否可行的分析: 1. 为什么用ITK处理DICOM数据? 1.1 ITK的DICOM处理优势…...
TiDB 深度解析与 K8S 实战指南
一、TiDB 核心特性与架构原理 1. 核心特性 分布式架构: 采用计算(TiDB Server)、存储(TiKV)、调度(PD)分离设计,支持水平扩展至 PB 级数据量。通过 PD 动态调度 Region(…...
WPS右键菜单中“上传到云文档”消失,使用命令行注册解决
关于上传到wps云文档,右键菜单莫名消失的问题 尝试在WPS设置显示上传到wps云文档的右键菜单,以及使用设置和修复工具修复,均无法显示菜单。 最终解决方法: regsvr32 "D:\Program Files (x86)\WPS Office\12.1.0.20784\offic…...
计算机求职面经内容与技巧分享
计算机求职面经内容与技巧分享 一、求职前的充分准备 (一)简历优化 突出技术能力:在简历中,务必清晰呈现自己精通的编程语言,例如熟练掌握 Java、Python 等语言的核心语法、常用库及框架。详细列举熟悉的技术栈&#x…...
java Springboot使用扣子Coze实现实时音频对话智能客服
一、背景 因公司业务需求,需要使用智能客服实时接听顾客电话。 现在已经完成的操作是,智能体已接入系统进行对练,所以本文章不写对联相关的功能。只有coze对接~ 扣子提供了试用Realtime WebSocket,点击右上角setting配…...
焦化烧结行业无功补偿解决方案—精准分组补偿 稳定电能质量沃伦森
在焦化、烧结等冶金行业,负荷运行呈现长时阶梯状变化,功率波动相对平缓,但对无功补偿的分组精度要求较高。传统固定电容器组补偿方式无法动态跟随负荷变化,导致功率因数不稳定,甚至可能因谐波放大影响电网安全。 行业…...
机器人项目管理新风口:如何高效推动智能机器人研发?
在2025年政府工作报告中,“智能机器人”首次被正式纳入国家发展战略关键词。从蛇年春晚的秧歌舞机器人惊艳亮相,到全球首个人形机器人马拉松的热议,智能机器人不仅成为科技前沿的焦点,也为产业升级注入了新动能。而在热潮背后&…...
ZooKeeper配置优化秘籍:核心参数说明与性能优化
#作者:张桐瑞 文章目录 tickTime:Client-Server通信心跳时间initLimit:Leader-Follower初始通信时限syncLimit:Leader-Follower同步通信时限dataDir:数据文件目录clientPort:客户端连接端口服务器名称与地…...
uniapp -- 实现微信小程序、app、H5端视频上传
布局及实现代码: <template><view class"flex flex-column p-4 grid-gap-4"><view class"flex flex-column grid-gap-4 bg-white p-4 rounded-4"><view class"font-weight-600">视频名称</view><i…...
2025年Redis分片存储性能优化指南
一、分片规则与负载均衡 动态哈希分片 采用CRC16算法计算键哈希值,通过hash_slot CRC16(key) % 16384确定槽位分布,结合Redis Cluster自动管理槽位迁移。 总分片数按需动态调整,例如从16节点扩容至32节点时,触发槽位重分配以…...
前端跨端框架的开发以及IOS和安卓的开发流程和打包上架的详细流程
以下是关于 前端跨端框架开发 以及 iOS/Android 原生开发流程与上架 的详细指南,涵盖技术选型、开发工具、打包发布全流程: 一、前端跨端开发框架对比与流程 主流跨端框架 框架技术栈性能接近原生生态成熟度适用场景React NativeJS/React80%⭐⭐⭐⭐⭐…...
项目《基于Linux下的mybash命令解释器》(二)
一、使用系统命令的完整代码 #include<stdio.h> #include<wait.h> #include<stdlib.h> #include<unistd.h> #include<assert.h> #include<string.h> #include<pwd.h>#define ARG_MAX 10//防止参数不够,可以做到一改全改…...
arm64适配系列文章-第十章-arm64环境上jenkins的部署
ARM64适配系列文章 第一章 arm64环境上kubesphere和k8s的部署 第二章 arm64环境上nfs-subdir-external-provisioner的部署 第三章 arm64环境上mariadb的部署 第四章 arm64环境上nacos的部署 第五章 arm64环境上redis的部署 第六章 arm64环境上rabbitmq-management的部署 第七章…...
PyTorch生成式人工智能实战(2)——PyTorch基础
PyTorch生成式人工智能实战(2)——PyTorch基础 0. 前言1. 创建 PyTorch 张量2. PyTorch 张量索引和切片3. PyTorch 张量形状4. 在 PyTorch 张量数学运算小结系列链接 0. 前言 为了训练生成式人工智能模型,我们可以使用多种数据格式ÿ…...
解决高德地图AMapUtilCoreApi、NetProxy类冲突
问题: Duplicate class com.amap.apis.utils.core.api.AMapUtilCoreApi found in modules jetified-3dmap-10.0.600 (com.amap.api:3dmap:10.0.600) and jetified-search-9.7.1 (com.amap.api:search:9.7.1) Duplicate class com.amap.apis.utils.core.api.NetProx…...
java—14 ZooKeeper
一、ZooKeeper简介 ZooKeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务 是一种复杂的过程,ZooKeeper通过简单的架构和API解决了这个问题。ZooKeeper运行开 发人员专注于核心应用程序逻辑,而不必担心应用程序的分…...
特征存储的好处:特征存储在机器学习开发中的优势
随着企业寻求提升机器学习生产力和运营能力 (MLOps),特征存储 (Feature Store) 的普及度正在迅速提升。随着 MLOps 技术的进步,特征存储正成为机器学习基础设施的重要组成部分,帮助企业提升模型的性能和解释能力,并加速新模型与生产环境的集成。这些存储充当集中式存储库,…...
【Promethus(普罗米修斯)介绍安装及使用】
一、系统介绍 1、什么是Prometheus? Prometheus:不仅是一款时间序列数据库,在整个生态上还是一套完整的监控系统。同时,还涉及许多以“explore”命名的客户端数据采集工具以及pushgateway网关。 官网:https://prometheus.io/ 文献:https://prometheus.io/docs/introdu…...
力扣热题100题解(c++)—矩阵
73.矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 int m matrix.size(); // 行数int n matrix[0].size(); // 列数bool firstRowZero false; // 标记第一行是否包含 0bool f…...
Spring Boot Controller 单元测试撰写
文章目录 引言标准用法必需依赖项核心注解说明代码示例 当涉及静态方法时的测试策略必需依赖项核心注解说明代码示例 引言 之前在编写 Controller 层的单元测试时,我一直使用 SpringBootTest 注解,但它会加载整个 Spring 应用上下文,资源开销…...
MVCC详解
目录 undo日志版本链 read view一致性视图 MVCC过程分析 读事务&写事务 Multi-Version Concurrency Control,多版本并发控制在读已提交和可重复读隔离级别下都实现了MVCC机制 undo日志版本链 一行数据被修改后,MySQL会保留修改前的数据(u…...
【通关函数的递归】--递归思想的形成与应用
目录 一.递归的概念与思想 1.定义 2.递归的思想 3.递归的限制条件 二.递归举例 1.求n的阶乘 2.顺序打印一个整数的每一位 三.递归与迭代 前言:上篇博文分享了扫雷游戏的实现,这篇文章将会继续分享函数的递归相关知识点,让大家了解并掌握递归的思…...
Python爬虫实战:移动端逆向工具Fiddler经典案例
一、引言 在移动互联网迅猛发展的当下,移动端应用产生了海量的数据。对于开发者而言,获取这些数据对于市场调研、竞品分析、数据挖掘等工作具有重要意义。Fiddler 作为一款功能强大的 Web 调试代理工具,能够有效捕获、分析和修改移动端的网络请求,为开发者深入了解移动端网…...
从平台工程视角出发,重塑云原生后端的工程体系
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:从 DevOps 到平台工程,云原生后端的演进逻辑 云原生的广泛应用,使得后端系统的开发、部署与运维逐渐从“编写业务代码”演进为“构建工程平台”。过去,后端开发者通常将注意力集中于 API 编写…...
【Hive入门】Hive分区与分桶深度解析:优化查询性能的关键技术
引言 在大数据领域,Apache Hive作为构建在Hadoop之上的数据仓库工具,因其类SQL的查询语言(HiveQL)和良好的扩展性而广受欢迎。然而,随着数据量的增长,查询性能往往成为瓶颈。本文将深入探讨Hive中两种关键的数据组织技术——分区(…...
Pytorch中的Dataset和DataLoader
1. PyTorch数据处理的核心概念 在PyTorch中,数据处理主要依赖两个核心组件: torch.utils.data.Dataset:定义如何访问数据集(单个样本的数据和标签)。torch.utils.data.DataLoader:负责批量加载数据、打乱数据、并行加载等。1.1 为什么需要Dataset和DataLoader? 问题:深…...
中介者模式:解耦对象间复杂交互的设计模式
中介者模式:解耦对象间复杂交互的设计模式 一、模式核心:用中介者统一管理对象交互,避免两两直接依赖 当系统中多个对象之间存在复杂的网状交互时(如 GUI 界面中按钮、文本框、下拉框的联动),对象间直接调…...
IEEE综述 | 车道拓扑推理20年演进:从程序化建模到车载传感器
导读 车道拓扑推理对于高精建图和自动驾驶应用至关重要,从早期的程序化建模方法发展到基于车载传感器的方法,但是很少有工作对车道拓扑推理技术进行全面概述。为此,本文系统性地调研了车道拓扑推理技术,同时确定了未来研究的挑战和…...
手撕C++STL list:深入理解双向链表的实现
目录 1. 引言 3. list 类的实现 (1) 基本结构 (2) 初始化与清理 (3) 插入与删除 (4) 常用接口 (4) 常用接口 4. 测试代码 5. 总结 1. 引言 在C STL中,list是一个基于双向链表的容器,支持高效的头尾插入/删除操作(O(1)时间复杂度&…...
QMT学习课程Day1
我们先从交易的最基础,如何进行下单,最为简答的下单,帮助大家建立自信心。 首先导入相关函数: #encoding:gbk import pandas as pd import numpy as np import datetime import pandas as pd import numpy as np import talib i…...
【Rust结构体】Rust结构体详解:从基础到高级应用
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
Java面试实战:音视频场景下的微服务架构与缓存技术剖析
面试场景描述 谢飞机,一位自称“全栈工程师”的程序员,来到一家互联网大厂参加Java开发岗位的面试。面试官是一位严肃的技术专家,他希望通过一系列问题考察谢飞机的实际技术水平。 第一轮提问(基础问题) 面试官&…...
Vue 3 的核心组合式 API 函数及其完整示例、使用场景和总结表格
以下是 Vue 3 的核心组合式 API 函数及其完整示例、使用场景和总结表格: 1. ref 作用 创建一个响应式引用值,用于管理基本类型或单个值的响应式状态。 示例 <template><div><p>Count: {{ count }}</p><button click&quo…...