当前位置: 首页 > news >正文

【CSS in Depth 2 精译_087】14.4:CSS 中的浮动特效以及在文字环绕中的应用 + 14.5:本章小结

当前内容所在位置(可进入专栏查看其他译好的章节内容)

  • 第四部分 视觉增强技术 ✔️
  • 【第 14 章 蒙版、形状与剪切】 ✔️
    • 14.1 滤镜
      • 14.1.1 滤镜的类型
      • 14.1.2 背景滤镜
    • 14.2 蒙版
      • 14.2.1 带渐变效果的蒙版特效
      • 14.2.2 基于亮度来定义蒙版
      • 14.2.3 其他蒙版属性
    • 14.3 剪切路径
      • 14.3.1 多边形的裁剪路径
      • 14.3.2 Firefox 内置的剪切路径工具
      • 14.3.3 其他剪切路径类型
    • 14.4 浮动与形状 ✔️
      • 14.4.1 浮动 ✔️
      • 14.4.2 形状的定义 ✔️
    • 14.5 本章小结 ✔️

文章目录

  • 14.4 浮动和形状 Floats and shapes
    • 14.4.1 浮动 Floating
    • 14.4.2 形状的定义 Defining a shape
      • 14.4.2.1 让形状贴合渐变蒙版 Matching a shape to a gradient mask
  • 14.5 本章小结

《CSS in Depth》新版封面

《CSS in Depth》新版封面

译者按
趁着今天冬至,本着夏练三伏冬练三九的原则,顺便把第 14 章的剩余内容全部拿下。这一节作者其实是在为 CSS 的浮动特效正名,多年来浮动特效一直被业内人士带偏,还美其名曰“浮动布局”;而它真正的设计初衷一直被人们忽略,直到 Flexbox 和 Grid 布局的出现情况才逐渐改善。要是再将浮动与 CSS 新推出的文字环绕形状相结合,就能实现很多经常在 PPT 中才会见到的效果。一起来看看吧!

14.4 浮动和形状 Floats and shapes

使用蒙版和剪切路径来重塑元素外观看着很有意思,但从页面布局的角度看,该元素仍然是一个普通的矩形框。想让基础布局拥有更复杂的形状,就需要用到 shape-outside 属性。这就会让文本这样的行内内容(inline content)以另外一种方式环绕在该元素周围,不同于以往沿着元素的直角边进行排列。

shape-outside 属性非常适合与遵循相同轮廓的蒙版、剪切路径或圆角半径相结合来实现一些页面特效。此时,页面元素看似有了不同的形状,文字也紧密环绕在相同的形状周围。图 14.12 就给出了这样一个典型案例:猎鹰图片被剪切成圆形,一旁的文字也围绕在由 shape-outside 属性定义的同心圆周围。

图 14.12 定义形状会让行内内容围绕该形状的轮廓进行排列

【图 14.12 定义形状会让行内内容围绕该形状的轮廓进行排列】

要使用 shape-outside 属性,元素就必须设为 浮动(floated 元素。设为浮动元素后,该元素将向页面左右两侧的某一侧靠拢,并让行内内容围绕其外边距盒(margin box)排布。鉴于浮动本身就是个复杂的话题,本节将先行阐述它的基本概念与工作原理,然后再介绍与形状(shapes)相关的知识。

14.4.1 浮动 Floating

浮动设置会将一个元素(通常为图片)拉到所在容器的左侧或右侧,让文档流环绕在该元素周围。某浮动元素在一段文字内的渲染效果如图 14.13 所示。由于这样的布局在报纸和杂志排版中非常常见,CSS 也为此添加了浮动这一特效。

图 14.13 多行文本环绕在浮动元素周围的效果示意图

【图 14.13 多行文本环绕在浮动元素周围的效果示意图】

浮动元素会从常规文档流中移除,并被带往所在容器的边缘位置。随后,文档流重新排布,但行内内容会围绕浮动元素当前占据的空间进行排列。浮动元素并没有从文档流中的初始位置向上或向下移动;换句话说,其最终位置取决于该元素在 HTML 文本中的初始方位。

通过声明 float: left 或者 float: right 可以将一个元素浮动到指定的方向。如果将多个元素浮动到同一个方向,这些元素就会并排排列,如图 14.14 所示。

图 14.14 并排排列的两个浮动元素效果图

【图 14.14 并排排列的两个浮动元素效果图】

下面我们将在示例页中添加一些内容,实现图片浮动到一旁的效果。然后再设置一些剪切特效,让文字排列呈现出某个形状。请根据代码清单 14.13 同步更新本地 HTML 示例页面。您既可以删除 <body> 元素中的内容,也可以将示例代码添加到现有内容的下面。

代码清单 14.13 带浮动图片的示例页 HTML 标记

<div><div class="poem-image"><!-- 待浮动的元素 --><img src="images/eagle.jpg" alt="Golden Eagle"></div><h1>Hope is the thing with feathers</h1><p><cite>Emily Dickinson</cite></p><p>“Hope” is the thing with feathers<br>That perches in the soul,<br>And sings the tune without the words,<br>And never stops at all,</p><p>And sweetest in the Gale is heard;<br>And sore must be the storm<br>That could abash the little bird<br>That kept so many warm.</p><p>I’ve heard it in the chillest land,<br>And on the strangest sea;<br>Yet, never, in extremity,<br>It asked a crumb of me.</p>
</div>

提示

在本例中,<img> 元素被放在了一个 div 容器中。这并非浮动样式的专属写法。但我发现在某些情况下,在 “普通”(“normal”) 元素上处理形状比在图片元素上更简单。从专业技术的角度看,图片元素在 HTML 中是一个 可替换元素(replaced element;在某些情况下,该元素的尺寸大小及方位可能与普通元素的行为模式略有不同。具体来说,在 Chrome 浏览器中使用 object-position 属性会出现一个 Bug,可能会对环绕在该元素附近的文本位置产生不良影响。

接着,我们将设置一些 CSS 样式来适当调整图片的尺寸,并将其浮动到页面左侧。完成设置后的页面最终效果将如图 14.15 所示。

图 14.15 将图片浮动到文字左侧的页面效果图

【图 14.15 将图片浮动到文字左侧的页面效果图】

请将代码清单 14.14 中的 CSS 样式添加到本地样式表,并在浏览器中查看渲染效果。我们在图片上声明了 display: block,这样行高就不会给父级 div 元素增加额外的高度 —— 尽管在重置样式(reset styles)中我也常常这样声明(详见第 8 章)。

代码清单 14.14 将图片元素浮动到页面左侧的示例样式代码

.poem-image {float: left;margin-right: 15px;
}.poem-image > img {display: block;height: 350px;width: 350px;object-fit: cover;
}

在 HTML 中,浮动元素在其余行内内容中的位置,对于确定哪些文本行将会环绕该元素而言至关重要。图片上方的文字仍旧在图片上方不变,但与图片同行或者在该行下方渲染的文字将会环绕该浮动元素排列。在本例中,我们希望整首诗歌都围绕在图片的右侧,因此需要将图片放到 HTML 文档的最前面。

如果对浮动的基本特性不太熟悉,建议您挪一挪该浮动元素来切身感受它的特点。比如将其放到段落中间,看看渲染出的最终位置。如果浮动元素是一个行内元素(inline element),还可以将其放到某个句子中。

浮动元素的另一个有趣、偶尔也会让人猝不及防的行为特征,是它们不会给所在的父元素贡献任何高度。如果一个浮动元素是某个 <div> 元素的唯一子元素,则该 div 的高度将渲染为 0。这么做是为了让您可以在某个段落(<p>)内浮动一张图片时,让后续段落的内容也能继续围绕该图片排列,如图 14.16 所示。

图 14.16 某容器内的浮动样式会扩展到下一个容器,让两个容器内的文字均围绕该浮动元素排列

【图 14.16 某容器内的浮动样式会扩展到下一个容器,让两个容器内的文字均围绕该浮动元素排列】

浮动的这一行为特征,不仅在两个容器均为段落元素时是有意义的,且当它们是两个 div 元素、或者其他任意块级元素(block-level element)时也同样适用。若偏要让另一个元素出现在浮动元素的下方,则需要使用 clear: both;当然除了 both 外,也可以使用 leftright 来清除指定方向上的元素浮动。

此外,还可以在容器的 ::after 伪元素上设置 clear 属性来让容器强行包含其浮动的子元素。这样一来容器元素的高度便可以扩展到浮动子元素的底部:

.contain-floats::after {display: block;content: "";clear: both;
}

在 CSS 引入 Flexbox 布局或网格布局之前,浮动元素(floats)是构建页面复杂布局的唯一选择。由于这并非浮动样式的设计初衷,因此在实现页面布局的过程中往往存在一定的困难,实现手法也不太优雅;但随着全新布局技术的出现,这样的局面已然成为了历史。人们可以仅仅出于浮动设计的本意来使用浮动,即:当确实需要让文字环绕在某元素周围时,再考虑启用浮动。

14.4.2 形状的定义 Defining a shape

让示例页中的图片浮动起来后,就可以利用 shape-outside 属性为一旁的文字定义形状了。该属性的合法值与 clip-path 属性大同小异,都支持:margin-boxborder-boxpadding-boxcontent-boxinset()circle()ellipse() 以及 polygon();最显著的区别在于处理 SVG 路径时的 path() 函数。尽管这个值已经纳入 CSS 规范,但目前在任何浏览器中 shape-outside 均不支持属性值为 path()。没准今后就可以用了。

这就意味着,人们通常可以给元素的剪切路径和形状指定完全相同的属性值。一个值得推荐的做法是:将这个值赋给某个自定义属性,然后在设置这两个属性时直接引用这个值。该做法尤其适用于需要定义某个复杂多边形的应用场景中。请根据代码清单 14.15 同步更新本地样式表,按照上述思路将这个属性值设为圆形。

代码清单 14.15 剪切路径和形状皆为圆形时的示例样式代码

.poem-image {float: left;margin-right: 15px;--shape: circle(50%);clip-path: var(--shape);shape-outside: var(--shape);
}.poem-image > img {display: block;height: 350px;width: 350px;object-fit: cover;
}

这样一来,猎鹰图片按圆形剪切,并且旁边的文字会整机环绕在它周围,最终效果如图 14.17 所示(与前面展示的图 14.12 相同)。

图 14.17 文字同样按圆形环绕排列的效果图

【图 14.17 文字同样按圆形环绕排列的效果图】

您也可以将自定义属性 --shape 改为其他值,例如 polygon()ellipse() 或者其他有效取值,然后观察文字对应的环绕情况。如果想让文字紧密环绕浮动元素的圆角半径 border-radius 时,也可以考虑以下属性值:margin-boxborder-boxpadding-box 以及 content-box

另外,鉴于圆形也可以通过设置圆角半径为 50% 来实现,因此也可以不通过剪切路径、而改用圆角半径来达到同样的效果,如代码清单 14.16 所示。注意,此时需要同时在图片元素(为了剪切图片)和图片所在的 div 容器上(为了影响 shape-outside 属性)设置圆角半径。

代码清单 14.16 围绕边框圆角定义的形状样式代码

.poem-image {float: left;margin-right: 15px;shape-outside: margin-box; /* 围绕圆角边框轮廓定义的形状 */border-radius: 50%;
}.poem-image > img {display: block;height: 350px;width: 350px;object-fit: cover;border-radius: 50%;
}

在本例中,我们用了一个右外边距来将图片和环绕文字隔开一小段距离。也可以使用 shape-margin 属性,例如声明 shape-margin: 15px 将在 shape-outside 指定的轮廓周围再增加 15px 的外边距。

但是设置的 shape-margin 外边距并不会延伸到浮动元素的外边距之外。此时,剪切路径只能到达元素的边缘而非外边距边缘,这并非我们想要的效果。尽管上下两端的文字依然会环绕圆形轮廓排列,但中间的文本环绕的却是由元素外边距盒(margin box)构成的直角边。并且在使用 shape-margin 前,最好能确保环绕形状的边缘与元素边缘留有足够的空间才敢放心使用。关于这一点稍后我会用一个案例来演示说明。

译注

改为 shape-margin 后的这段描述感觉有点抽象,为便于理解,这里附上我本地实测的效果截图:

补图:容器样式改为 shape-margin: 15px 后的实际文字环绕效果

【补图:容器样式改为 shape-margin: 15px 后的实际文字环绕效果】

14.4.2.1 让形状贴合渐变蒙版 Matching a shape to a gradient mask

shape-outside 属性也可以像蒙版那样对某个图片元素生效。这对渐变特效来说尤为适用,因为这样一来就能将元素沿某个斜边进行剪切并让文字环绕斜边排列,如图 14.18 所示。

图 14.18 利用线性渐变定义的对角线形状

【图 14.18 利用线性渐变定义的对角线形状】

在本例中,我们在图片蒙版以及环绕形状上同时设置了相同的线性渐变特效,倾斜角均为 65 度。试根据代码清单 14.17 提供的渐变样式代码同步修改本地样式表。注意,示例代码中并未限制图片的宽度,这样可以给斜边提供更多空间。

代码清单 14.17 利用渐变特效定义的环绕形状的样式代码

.poem-image {float: left;--gradient: linear-gradient( /* 对角线型渐变样式 */65deg,black 0 375px,transparent 375px);mask: var(--gradient);shape-outside: var(--gradient);shape-margin: 15px;
}.poem-image > img {display: block;height: 350px;object-position: -100px 0; /* 将猎鹰调整到画面中心 */
}

将颜色节点设置在 375px 的位置,可以实现从黑色到透明的突变效果。该节点的位置坐标、连同 65 度的倾斜角,都是在浏览器的开发者工具中微调得到的。接着我又设置了 object-position 属性,将猎鹰重新调至画面正中位置,否则会被右侧的环绕形状切掉一部分。建议您在浏览器中多改改这些数值,看看渐变效果会怎样变化。

由于浮动元素向右延伸并超出了环绕形状的边缘,此时改用 shape-margin 也是没问题的。此外,也可以使用径向渐变,例如:将自定义属性 --gradient 改为 radial-gradient(circle at 175px, black 175px, transparent 175px) 将得到一个圆形的剪切路径特效,几乎与代码清单 14.15 中演示的 circle(50%) 的效果完全相同。

在本例的线性渐变特效中,我们定义了一个从黑色突变到透明色的颜色节点,但这并不是什么固定操作。如果定义的是一个由黑色平滑过渡到透明的渐变特效,则环绕形状的边缘将由不透明度变为 0% 时的位置来界定。

您也可以通过 shape-image-threshold 属性来动手调整渐变效果对应的边缘。例如,指定 shape-image-threshold: 0.3 会让文字紧密环绕在图片不透明度渐变到 30% 时所形成的形状周围。您也可以利用该方法实现文字与图片的重叠渲染,让文字环绕在图片仍然依稀可见的位置,效果如图 14.19 所示。

图 14.19 设置容器的 shape-image-threshold 属性可以定义形状边缘对应的不透明度

【图 14.19 设置容器的 shape-image-threshold 属性可以定义形状边缘对应的不透明度】

本章演示的页面特效能够让您的页面从网上大量的常见样式设计中脱颖而出。这些功能特性往往更接近人们在报刊杂志或者其他类型的印刷设计中见到的样式效果。随着 Flexbox 弹性布局和 Grid 网格布局的出现,利用浮动元素来实现页面布局的做法几乎销声匿迹了,但浮动样式仍然有它的用武之地,尤其是当您想实现某些独具风格且引入注目的页面特效时,情况更是如此。


14.5 本章小结

  • 滤镜具备的颜色管理功能与模糊特效将会在整个元素范围内生效。
  • 背景滤镜的滤镜特效只对透过当前元素背后渲染出来的图片或内容部分生效。
  • 蒙版可以根据蒙版图片或蒙版渐变特效中的透明部分有选择地隐藏被遮挡元素的局部区域。
  • 剪切路径可以根据其路径定义的形状有选择地隐藏元素的局部区域。该路径通常为圆形、椭圆形或其他自定义的多边形。
  • 设置了浮动的页面元素将被拉到所在容器的左侧或右侧,并使得行内内容(inline content)围绕浮动元素边缘排列。
  • 浮动元素的文字环绕形状可以通过 shape-outside 属性手动调整。其属性值可以利用元素的剪切路径或者蒙版图片来定义。这样一来,一旁的文字将紧密环绕在元素可见区域形成的轮廓外围。


关于《CSS in Depth》(中译本书名《深入解析 CSS》)

第 1 版第 2 版
读者评分原版:4.7(亚马逊);中文版:9.3(豆瓣)原版:5.0(亚马逊);中文版:暂无,待出版
出版时间原版:2018 年 3 月;中文版:2020 年 4 月原版:2024 年 7 月;中文版:暂无,待出版
原价原版:$44.99;中文版:¥139.00原版:$59.99;中文版:暂无,待出版
现价原版:$36.49;中文版:¥52.54 起步原版:$52.09;中文版:暂无,待出版
原版国内预订起步价 ¥461.00起步价 ¥750.00

本专栏为该书第 2 版高分译文专栏,全网首发,精译精校,持续更新,计划今年内完成全书翻译,敬请期待!!!

目前已完结的章节(可进入本专栏查看详情,连载期间完全免费):

  • 第一章 层叠、优先级与继承(已完结)
    • 1.1 层叠
    • 1.2 继承
    • 1.3 特殊值
    • 1.4 简写属性
    • 1.5 CSS 渐进式增强技术
    • 1.6 本章小结
  • 第二章 相对单位(已完结)
    • 2.1 相对单位的威力
    • 2.2 em 与 rem
    • 2.3 告别像素思维
    • 2.4 视口的相对单位
    • 2.5 无单位的数值与行高
    • 2.6 自定义属性
    • 2.7 本章小结
  • 第三章 文档流与盒模型(已完结)
    • 3.1 常规文档流
    • 3.2 盒模型
    • 3.3 元素的高度
    • 3.4 负的外边距
    • 3.5 外边距折叠
    • 3.6 容器内的元素间距问题
    • 3.7 本章小结
  • 第四章 Flexbox 布局(已完结)
    • 4.1 Flexbox 布局原理
    • 4.2 弹性子元素的大小
    • 4.3 弹性布局的方向
    • 4.4 对齐、间距等细节处
    • 4.5 本章小结
  • 第五章 网格布局(已完结)
    • 5.1 构建基础网格
    • 5.2 网格结构剖析 (上)
      • 5.2.1 网格线的编号(下)
      • 5.2.2 网格与 Flexbox 配合(下)
    • 5.3 两种替代语法
      • 5.3.1 命名网格线
      • 5.3.2 命名网格区域
    • 5.4 显式网格与隐式网格(上)
      • 5.4.1 添加变化 (中)
      • 5.4.2 让网格元素填满网格轨道(下)
    • 5.5 子网格(全新增补内容)
    • 5.6 对齐相关的属性
    • 5.7 本章小结
  • 第六章 定位与堆叠上下文(已完结)
    • 6.1 固定定位
      • 6.1.1 创建一个固定定位的模态对话框
      • 6.1.2 在模态对话框打开时防止屏幕滚动
      • 6.1.3 控制定位元素的大小
    • 6.2 绝对定位
      • 6.2.1 关闭按钮的绝对定位
      • 6.2.2 伪元素的定位问题
    • 6.3 相对定位
      • 6.3.1 创建下拉菜单(上)
      • 6.3.2 创建 CSS 三角形(下)
    • 6.4 堆叠上下文与 z-index
      • 6.4.1 理解渲染过程与堆叠顺序(上)
      • 6.4.2 用 z-index 控制堆叠顺序(上)
      • 6.4.3 深入理解堆叠上下文(下)
    • 6.5 粘性定位
    • 6.6 本章小结
  • 第七章 响应式设计(已完结)
    • 7.1 移动端优先设计原则(上篇)
      • 7.1.1 创建移动端菜单(下篇)
      • 7.1.2 给视口添加 meta 标签(下篇)
    • 7.2 媒体查询(上篇)
      • 7.2.1 深入理解媒体查询的类型(上篇)
      • 7.2.2 页面断点的添加(中篇)
      • 7.2.3 响应式列的添加(下篇)
    • 7.3 流式布局
    • 7.4 响应式图片
    • 7.5 本章小结
  • 第八章 层叠图层及其嵌套
    • 8.1 用 layer 图层来操控层叠规则(上篇)
      • 8.1.1 图层的定义(上篇)
      • 8.1.2 图层的顺序与优先级(下篇)
      • 8.1.3 revert-layer 关键字(下篇)
    • 8.2 层叠图层的推荐组织方案
    • 8.3 伪类 :is() 和 :where() 的用法
    • 8.4 CSS 嵌套的使用
      • 8.4.1 嵌套选择器的使用
      • 8.4.2 深入理解嵌套选择器
      • 8.4.3 媒体查询及其他 @规则 的嵌套
    • 8.5 本章小结
  • 第九章 CSS 的模块化与作用域
    • 9.1 模块的定义
      • 9.1.1 模块和全局样式
      • 9.1.2 一个简单的 CSS 模块
      • 9.1.3 模块的变体
      • 9.1.4 多元素模块
    • 9.2 将模块组合为更大的结构
      • 9.2.1 模块中多个职责的拆分
      • 9.2.2 模块的命名
    • 9.3 CSS 的作用域
      • 9.3.1 CSS 作用域的就近原则
      • 9.3.2 划定作用域的边界
      • 9.3.3 CSS 中的隐式作用域
      • 9.3.4 关于 CSS 作用域与层叠图层
    • 9.4 CSS 模式库
    • 9.5 本章小结
  • 第十章 CSS 容器查询
    • 10.1 容器查询的一个简单示例
      • 10.1.1 容器尺寸查询的用法
    • 10.2 深入理解容器
      • 10.2.1 容器的类型
      • 10.2.2 容器的名称
      • 10.2.3 容器与模块化 CSS
    • 10.3 与容器相关的单位
    • 10.4 容器样式查询的用法
      • 10.4.1 将模块与所在容器解耦
      • 10.4.2 减少重复代码
    • 10.5 本章小结
  • 第 11 章 颜色与对比
    • 11.1 通过对比进行交流
      • 11.1.1 模式的建立
      • 11.1.2 还原设计稿
    • 11.2 颜色的定义
      • 11.2.1 色域与色彩空间
      • 11.2.2 CSS 颜色表示法(RGB、Hex、HSL、HWB、LAB/OKLAB、LCH/OKLCH)
    • 11.3 利用 OKLCH 处理颜色(上篇)
      • 11.3.4 从页面其他颜色衍生出新颜色(下篇)
    • 11.4 思考字体颜色的对比效果
    • 11.5 本章小结
  • 第 12 章 CSS 排版与间距
    • 12.1 间距设置
      • 12.1.1 使用 em 还是 px
      • 12.1.2 对行高的深入思考
      • 12.1.3 行内元素的间距设置
    • 12.2 Web 字体
    • 12.3 谷歌字体
    • 12.4 @font-face 的工作原理
      • 12.4.1 字体格式与回退处理
      • 12.4.2 同一字型的多种变体形式
    • 12.5 性能因素考量
      • 12.5.1 font-display 属性解析
      • 12.5.2 可变字体的用法
    • 12.6 调整字间距,提升可读性
      • 12.6.1 正文的字间距
      • 12.6.2 标题、小元素和间距
    • 12.7 本章小结
  • 第 13 章 渐变、阴影与混合模式
    • 13.1 渐变
      • 13.1.1 使用多个颜色节点(上)
      • 13.1.2 颜色插值方法(中)
      • 13.1.3 径向渐变(下)
      • 13.1.4 锥形渐变(下)
    • 13.2 阴影
      • 13.2.1 利用渐变和阴影打造立体感
      • 13.2.2 使用扁平化设计创建元素
      • 13.2.3 创建混合风格的按钮外观
    • 13.3 混合模式
      • 13.3.1 为图片上色
      • 13.3.2 混合模式的类型
      • 13.3.3 图片纹理的添加
      • 13.3.4 融合混合模式的用法
    • 13.4 本章小结
  • 附录
    • 附录A:CSS 选择器参考
    • 附录B:CSS 预处理器简介

相关文章:

【CSS in Depth 2 精译_087】14.4:CSS 中的浮动特效以及在文字环绕中的应用 + 14.5:本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 14 章 蒙版、形状与剪切】 ✔️ 14.1 滤镜 14.1.1 滤镜的类型14.1.2 背景滤镜 14.2 蒙版 14.2.1 带渐变效果的蒙版特效14.2.2 基于亮度来定义蒙版14.2.3 其他蒙版属…...

探索 Python编程 调试案例:计算小程序中修复偶数的bug

在 学习Python 编程的过程里&#xff0c;会遇到各种各样的bug。而修复bug调试代码就像是一场充满挑战的侦探游戏。每一个隐藏的 bug 都是谜题&#xff0c;等待开发者去揭开真相&#xff0c;让程序可以顺利运行。今天&#xff0c;让我们通过一个实际案例&#xff0c;深入探索 Py…...

探索 CI/CD 工具的力量

CI/CD 工具是什么&#xff1f; CI/CD 工具是开发者的“生产力加速器”。它通过自动化代码构建、测试、部署等流程&#xff0c;消除了繁琐的手动操作&#xff0c;确保开发和运维的无缝衔接。借助这些工具&#xff0c;开发者不仅能够更快地发布产品&#xff0c;还能更早发现问题…...

MySQL和Oracle的区别

MySQL和Oracle的区别 MySQL是轻量型数据库&#xff0c;并且免费&#xff0c;没有服务恢复数据。 Oracle是重量型数据库&#xff0c;收费&#xff0c;Oracle公司对Oracle数据库有任何服务。 1.对事务的提交 MySQL默认是自动提交&#xff0c;而Oracle默认不自动提交&#xff0…...

亚马逊云科技 re:Invent 2024重磅发布!Amazon Bedrock Data Automation 预览版震撼登场

AWS re:Invent 2024 已圆满落幕&#xff01; 在本次大会中&#xff0c;隆重推出了一项全新功能&#xff1a; Amazon Bedrock Data Automation&#xff08;预览版&#xff09;震撼登场&#xff01; New Amazon Bedrock capabilities enhance data processing and retrieval | …...

SQL语句练习

阅读《SQL必知必会》&#xff08;第五版&#xff09;然后结合往常表做的练习记录 这里使用的数据库时sqlite3,使用的工具时navicat 表资源链接https://wenku.baidu.com/view/349fb3639b6648d7c1c74652.html 表录入后如上图所示。后面如果有多张表之间的操作&#xff0c;在引入…...

保姆级教程Docker部署RabbitMQ镜像

目录 1、创建挂载目录 2、运行RabbitMQ容器 3、Compose运行RabbitMQ容器 4、开启界面插件 5、查看RabbitMQ运行状态 6、常见问题处理 1、创建挂载目录 # 创建宿主机rabbitMQ挂载目录 sudo mkdir -p /data/docker/rabbitmq/log# 修改log目录权限 sudo chmod 777 /data/do…...

P6打卡—Pytorch实现人脸识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 1.检查GPU import torch import torch.nn as nn import matplotlib.pyplot as plt import torchvisiondevicetorch.device("cuda" if torch.cuda.is_…...

clickhouse-介绍、安装、数据类型、sql

1、介绍 ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;使用C语言编写&#xff0c;主要用于在线分析处理查询&#xff08;OLAP&#xff09;&#xff0c;能够使用SQL查询实时生成分析数据报告。 OLAP&#xff08;On-Line A…...

基于单片机的智能婴儿床监护系统多功能婴儿床摇篮系统

功能介绍 以STM32单片机为控制核心蓝牙传输控制可以进行哭闹检测、尿床检测、音乐播放、语音提醒、哭闹时可以进行摇床有不同的模式自动模式和睡眠模式 实物可做&#xff0c;其他功能也可以 电路图 PCB 源代码 u8 Temperature_High; //室内温度高阈值 u8 Temperature_…...

微服务??

1、微服务架构的定义是什么&#xff1f; 微服务架构是一种将应用程序拆分为多个小型、独立服务的架构风格&#xff0c;每个服务专注于完成特定功能&#xff0c;通过轻量级通信协议&#xff08;如HTTP/REST、gRPC&#xff09;进行协作。 2、微服务和单体架构有哪些主要区别&am…...

14-zookeeper环境搭建

0、环境 java&#xff1a;1.8zookeeper&#xff1a;3.5.6 1、下载 zookeeper下载点击这里。 2、安装 下载完成后解压&#xff0c;放到你想放的目录里。先看一下zookeeper的目录结构&#xff0c;如下图&#xff1a; 进入conf目录&#xff0c;复制zoo_sample.cfg&#xff0…...

计算机网络 八股青春版

什么是HTTP&#xff1f;HTTP和HTTPS的区别 HTTP HTTP是超文本运输协议&#xff0c;是一种无状态&#xff08;每次请求都是独立的&#xff09;的应用层协议。用于在客户端和服务器之间传输超文本数据&#xff08;如HTML文件&#xff09;。默认端口是80数据以明文形式传输&#…...

快速解决oracle 11g中exp无法导出空表的问题

在一些生产系统中&#xff0c;有些时候我们为了进行oracle数据库部分数据的备份和迁移&#xff0c;会使用exp进行数据的导出。但在实际导出的时候&#xff0c;我们发现导出的时候&#xff0c;发现很多空表未进行导出。今天我们给出一个快速解决该问题的办法。 一、问题复现 我…...

Unity 6 Preview(预览版)新增功能

原文链接&#xff1a;Unity - 手册&#xff1a;Unity 6 预览版中的新增功能 目录 原文链接&#xff1a;Unity - 手册&#xff1a;Unity 6 预览版中的新增功能 编辑器和工作流程 UI 工具包 实体 图形 URP HDRP &#xff08;HDRP&#xff09; 多人游戏 游戏对象的 Netc…...

Halcon单相机+机器人=眼在手上#标定心得

首先&#xff0c;这个标定板肯定是放在我们要作业的工作台上的 目的 **1&#xff0c;得到标定物&#xff08;工作台&#xff09;与机器人底座之间的pose转换关系。2&#xff0c;得到相机与机器人末端tool的的转换关系。 两个不确定的定量 1&#xff0c;标定板与机器人底座b…...

Django 模板分割及多语言支持案例【需求文档】-->【实现方案】

Django 模板分割及多语言支持案例 这个案例旨在提供一个清晰的示范&#xff0c;展示如何将复杂的页面分解为多个可复用的模板组件&#xff0c;使代码更加模块化和易于管理。希望这篇案例文章对你有所帮助。 概述 在 Django 项目开发中&#xff0c;使用模板分割和多语言支持能…...

【hackmyvm】Diophante 靶场

1. 基本信息^toc 这里写目录标题 1. 基本信息^toc2. 信息收集2.1. 端口扫描2.2. 目录扫描2.3. knock 3. WordPress利用3.1. wpscan扫描3.2. smtp上传后门 4. 提权4.1. 提权leonard用户4.2. LD劫持提权root 靶机链接 https://hackmyvm.eu/machines/machine.php?vmDiophante 作者…...

基于MATLAB的图像增强

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;传知代码 欢迎大家点赞收藏评论&#x1f60a; 目录 一、背景及意义介绍背景图像采集过程中的局限性 意义 二、概述三、代码结构及说明&#xff08;一&#xff09;整体结构&#xff08;二&#xf…...

P10425 [蓝桥杯 2024 省 B] R 格式

题目描述&#xff1a; 小蓝最近在研究一种浮点数的表示方法&#xff1a;R 格式。对于一个大于 00 的浮点数 d&#xff0c;可以用 R 格式的整数来表示。给定一个转换参数 n&#xff0c;将浮点数转换为 R 格式整数的做法是&#xff1a; 将浮点数乘以 2^n。四舍五入到最接近的整…...

《软件工程文档攻略:解锁软件开发的“秘籍”》

《软件工程文档攻略&#xff1a;解锁软件开发的“秘籍”》 一、引言&#xff08;一&#xff09;简述软件工程文档的重要地位 二、软件文档的分类及作用&#xff08;一&#xff09;按形式分类1. 工作表格2. 文档或文件 &#xff08;二&#xff09;按产生和使用范围分类1. 开发文…...

Python从0到100(七十八):神经网络--从0开始搭建全连接网络和CNN网络

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…...

sqlilabs靶场二十一关二十五关攻略

第二十一关 第一步 可以发现cookie是经过64位加密的 我们试试在这里注入 选择给他编码 发现可以成功注入 爆出表名 爆出字段 爆出数据 第二十二关 跟二十一关一模一样 闭合换成" 第二十三关 第二十三关重新回到get请求&#xff0c;会发现输入单引号报错&#xff0c…...

时间管理系统|Java|SSM|JSP|

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…...

长轮询DeferredResult原理

DeferredResult常用来实现客户端长轮询&#xff0c;可以将异步处理的结果在特定时间内&#xff08;如果设置了超时时间&#xff09;返回给客户端。 Slf4j RestController RequestMapping("/demo") public class DemoDeferredResult {GetMapping("/deferredResu…...

TouchGFX移植(5)增加触屏驱动

一&#xff09;增加驱动代码gt9xxx.c和ctiic.c到工程中的BSP目录下: 二&#xff09;更改触摸文件STM32TouchController.cpp 1&#xff09;在STM32TouchController.cpp文件中增加&#xff1a; #include “gt9xxx.h” 2&#xff09;增加gt9xxx_init(); void STM32TouchControlle…...

(九)腾讯cloudstudio(ubuntu)+akiaaa大神 Stable Diffusion整合包 AI绘画教程

一、说明 在网上转了一圈&#xff0c;发现确实akiaaa大神的整合包不错&#xff0c;看看这界面就比我前面的流弊多了&#xff0c;后面我们就要把这个界面一步一步干出来 二、环境准备 这里和前面的一样 &#xff08;七&#xff09;腾讯cloudstudioStable-Diffusion-webui AI绘…...

设计模式-访问者设计模式

介绍 访问者模式&#xff08;Visitor&#xff09;&#xff0c;表示一个作用于某对象结构中的各元素的操作&#xff0c;它使你可以在不改变个元素的类的前提下定义作用于这些元素的新操作。 问题&#xff1a;在一个机构里面有两种员工&#xff0c;1.Teacher 2.Engineer 员…...

深度学习实战车辆目标跟踪【bytetrack/deepsort】

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对车辆目标数据集进行训练和优化&#xff0c;该数据集包含丰富的车辆目标图像样本…...

lammps中EDGE、INF、NULL等常量的含义

在lammps命令中,有几个比较常见的量:EDGE、INF、NULL,不少初学者不知道什么意思,本文详细介绍一下这几个量的含义及用法。 1. EDGE EDGE表示当前box的边界,常用到需要设置坐标的命令中,如region、fix wall/reflect。 EDGE仅表示当前box边界的坐标值,当box尺寸发生变化后…...

Mono里建立调试C#脚本运行环境

前面已经介绍了怎么样来执行一个嵌入式的脚本框架, 这个框架是mono编写的一个简单的例子。 如果不清楚,可以参考前文: https://blog.csdn.net/caimouse/article/details/144632391?spm=1001.2014.3001.5501 本文主要来介绍一下,我们的C#脚本是长得怎么样的,它大体如下…...

241221面经

1&#xff0c;JVM 的实现中堆、栈和方法区的区别是什么&#xff1f; 堆&#xff08;Heap&#xff09; 功能 堆是 JVM 内存中最大的一块&#xff0c;主要用于存储对象实例。无论是通过new关键字创建的对象&#xff0c;还是数组&#xff0c;都在堆上分配内存。它是被所有线程共享…...

【论文复刻】新型基础设施建设是否促进了绿色技术创新的“量质齐升”—来自国家智慧城市试点的证据(C刊《中国人口·资源与环境》

一、数据来源&#xff1a;住建部、国家知识产权局、中国城市统计年鉴&#xff0c;内含原始数据、处理代码和基准回归 二、数据范围&#xff1a; DID 为了延长政策效应估计的时间区间&#xff0c;将住建部公布的首批国家智慧城市作为处理组&#xff0c;非试点城市作为对照组。将…...

libreoffice表格python宏教程 一

一、安装python宏扩展 LibreOffice自带了一个宏编辑器&#xff0c;但是只能用basic语言&#xff0c;无法用Python。 所以&#xff0c;我们必须在单独的编辑器中编写Python代码。 需要安装apso扩展&#xff0c;此扩展可以创建删除管理python宏文件&#xff0c;同时还能设置偏好…...

C/C++语言基础--C++STL库之仿函数、函数对象、bind、function简介

本专栏目的 更新C/C的基础语法&#xff0c;包括C的一些新特性 前言 STL无疑是C史上一个重要的发明&#xff0c;未来我将更新STL有关的知识点&#xff0c;入门绝对够了(看目录就知道了&#x1f440;)这是第二篇&#xff0c;讲仿函数C语言后面也会继续更新知识点&#xff0c;如…...

前端导出PDF的组件及方法

前端导出PDF的组件及方法 在Web应用程序中&#xff0c;导出PDF文件是一项常见的需求。无论是为了打印、分享还是存档&#xff0c;能够将网页内容转换为PDF格式都非常有用。幸运的是&#xff0c;前端开发者有多种方法和组件可以实现这一功能。在本文中&#xff0c;我们将详细介…...

大数据-256 离线数仓 - Atlas 数据仓库元数据管理 正式安装 启动服务访问 Hive血缘关系导入

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…...

水文知识图谱构建-学习+代码

文章目录 水文模型知识图谱构建与应用&#xff08;核心&#xff09;面向水利防汛抢险的知识图谱构建与应用知识图谱在水利工程中的构建与应用代码 水文模型知识图谱构建与应用&#xff08;核心&#xff09; 水文模型知识图谱构建与应用 题目&#xff1a;水文模型知识图谱构建…...

python rabbitmq实现简单/持久/广播/组播/topic/rpc消息异步发送可配置Django

windows首先安装rabbitmq 点击参考安装 1、环境介绍 Python 3.10.16 其他通过pip安装的版本(Django、pika、celery这几个必须要有最好版本一致) amqp 5.3.1 asgiref 3.8.1 async-timeout 5.0.1 billiard 4.2.1 celery 5.4.0 …...

clickhouse优化记录

一、注重使用分区键来加快查询 在大数据量的情况下&#xff0c;如果查询语句中&#xff0c;可以使用分区键来进行查询&#xff0c;可以极大缩小数据的查询范围&#xff0c;加快查询速度。 二、使用order by的列&#xff0c;适用最左前缀匹配原则 比如表的结构是 order by(id…...

RabbitMQ如何构建集群?

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ如何构建集群&#xff1f;】面试题。希望对大家有帮助&#xff1b; RabbitMQ如何构建集群&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在RabbitMQ中&#xff0c;集群&#xff08;Cluster&#x…...

Python解压tar压缩文件

import tarfile import os# 解压文件def untar(self, log_tar_file, destination_dir):# 打开tar文件tar_file_path for tar_file_path in glob.glob(os.path.join(log_tar_file, **/*.tar), recursiveTrue):print(日志压缩文件&#xff1a;,tar_file_path)if ! tar_file_pat…...

Mac升级macOS 15 Sequoia后,无法ssh连接本地虚拟机

现象 macOS 15后&#xff0c;无法ssh连接本地启动的虚拟机&#xff0c;提示错误&#xff1a; No route to host&#xff0c;也ping不通。包括UTM、Parallels Desktop这两个虚拟机软件。之前都是没问题的&#xff0c;通过一些简单排查&#xff0c;目前没发现什么问题。 在虚拟…...

Unity录屏插件-使用Recorder录制视频

目录 1.Recorder的下载 2.Recorder面板 2.1常规录制属性 2.2录制器配置 2.2.1添加录制器 2.2.2配置Input属性 2.2.3配置 Output Format 属性 2.2.4配置 Output File 属性 3.Recorder的使用 3.1录制Game View视频 3.1.1Recorder配置与场景搭建 3.1.2开始录制 3.1.3…...

[ESP]从零开始的Arduino IDE安装与ESP环境配置教程

一、前言 最近也是在比赛方面比较忙&#xff0c;没有更多的时间和精力去更新长文章了。这几周都更倾向于环境搭建的教程&#xff0c;这类教程写起来确实方便&#xff0c;也不怎么费时间&#xff0c;一个下午基本可以搞定&#xff0c;哈哈&#xff0c;我保证不是在为自己想摆烂找…...

重拾设计模式--状态模式

文章目录 状态模式&#xff08;State Pattern&#xff09;概述状态模式UML图作用&#xff1a;状态模式的结构环境&#xff08;Context&#xff09;类&#xff1a;抽象状态&#xff08;State&#xff09;类&#xff1a;具体状态&#xff08;Concrete State&#xff09;类&#x…...

2024年全球办公键盘行业总体规模、主要企业国内外市场占有率及排名

根据QYResearch研究团队调研统计&#xff0c;2023年全球办公键盘市场销售额达到了 亿元&#xff0c;预计2030年将达到 亿元&#xff0c;年复合增长率&#xff08;CAGR&#xff09;为 %&#xff08;2024-2030&#xff09;。中国市场在过去几年变化较快&#xff0c;2023年市场规模…...

ThreadLocal用法详解

ThreadLocal 是 Java 中的一个类&#xff0c;它提供了线程局部变量的功能。线程局部变量是线程隔离的&#xff0c;每个使用该变量的线程都有其自己的变量副本&#xff0c;因此每个线程可以操作自己的线程局部变量&#xff0c;而不会和其他线程冲突。 以下是 ThreadLocal 的一些…...

linux中docker命令大全

基本命令 docker pull 拉取镜像 docker pull docker push 推送镜像到DockerRegistry docker push docker images 查看本地镜像 docker images docker rmi 删除本地镜像 docker rmi docker run 创建并运行容器&#xff08;不能重复创建&#xff09; docker run d…...

linux-----常用指令

文件和目录操作指令 ls&#xff08;list&#xff09;指令 功能&#xff1a;用于列出目录的内容&#xff0c;包括文件和子目录。示例&#xff1a; ls&#xff1a;列出当前目录下的所有非隐藏文件和目录。例如&#xff0c;在一个包含文件file1.txt、file2.txt和目录dir1的目录中&…...