CSS基础知识04

文本溢出通常是指在限定的空间内不能容纳所输入的文字,导致文字超出了容器的边界

一、文本溢出

1.1.css属性处理

所用到的属性

属性属性值
overflowvisible:默认值,内容不会被修剪,会呈现在元素框之外。
hidden:内容会被修剪,并且其余内容是不可见的。
scroll:内容会被修剪,但是浏览器会显示滚动条,以便查看其余的内容。
auto:如果内容被修剪,则浏览器会显示滚动条,以便查看其它的内容(超出会显示,不超出不显示,只显示y方向的)。
inherit:规定应该从父元素继承overflow属性值。

属性属性值
white-spacenormal:默认值,空白会被浏览器忽略。

nowrap:文本不会换行,文本会在同一行上继续,直到遇到<br>标签为止。

pre:空白会被浏览器保留,其行为方式类似HTML中的<pre>标签。
pre-wrap:保留空白序列,但是正常地进行换行。
pre-line:合并空白符,但是保留所有换行符。
inherit:规定应该从父元素继承white-space属性值。

属性属性值
text-overflowclip:不显示省略号(...),而是简单地裁剪。
ellipsis:当对象文本溢出时,显示省略标记(...),省略标记插入的位置通常是最后一个字符或最后一个词(取决于具体实现)。

要实现溢出时产生省略号的效果,通常需要结合使用white-space: nowrap(或pre-wrap等根据需求选择)和overflow: hidden属性。

例:

.text-container {width: 200px; /* 容器宽度 */white-space: nowrap; /* 强制文本在一行内显示 */overflow: hidden; /* 溢出内容为隐藏 */text-overflow: ellipsis; /* 溢出省略号 */
}

1.2.多行文本溢出处理

对于多行文本溢出,可以使用CSS的一些高级属性或JavaScript来实现。

1.CSS 多行文本溢出处理

CSS3 引入了-webkit-line-clamp属性(非标准属性,但得到了广泛支持),它允许限制在一个块元素显示的文本的行数。结合overflow: hiddentext-overflow: ellipsis-webkit-box-orient: vertical属性,可以实现多行文本溢出显示省略号的效果。

例如:

.multiline-text {overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 2; /* 控制显示的行数 */max-height: 3.2em; /* 根据行数计算出的高度,用于确保容器高度正确 */
}

2.JavaScript截断文本

使用JavaScript可以更加灵活地处理文本截断和省略号的添加。可以通过编写一个截断算法来确定截断位置并添加省略号。

例如:

function truncateText(text, maxLength) {if (text.length <= maxLength) {return text;}const truncated = text.substr(0, maxLength - 1);return truncated + '…';
}const text = '这是一段很长的文本,可能需要截断显示在页面上';
const maxLength = 20;
const truncatedText = truncateText(text, maxLength);
console.log(truncatedText); // 输出: '这是一段很长的文本…'

1.3.使用JavaScript库

还可以使用一些专门处理文本溢出的JavaScript库,如clamp-jsline-clamp等。这些库提供了更多灵活的选项和配置,可以根据需要来处理多行文本的溢出情况。例如,使用clamp-js库可以非常方便地实现多行文本溢出显示省略号的效果:

import clamp from 'clamp-js';
const element = document.getElementById('myText');
clamp(element, { clamp: 2 }); // 控制显示的行数为2

二、设置透明度

1.使用opacity属性(需要子元素都变透明)

opacity 属性可以应用于任何元素,并设置其整体透明度。值范围为 0(完全透明)到 1(完全不透明)

.element {opacity: 0.5; /* 设置50%的透明度 */
}

注意,使用 opacity 会使元素及其所有子元素都变得透明。

2.使用 RGBA 或 HSLA 颜色值(针对特定的颜色属性)

RGBA 和 HSLA 颜色模式允许你指定颜色的红、绿、蓝(或色调、饱和度、亮度)值以及一个额外的 alpha 通道值,用于设置透明度。

RGBA 示例:

.element {background-color: rgba(255, 0, 0, 0.5); /* 红色背景,50%透明度 */
}

HSLA 示例

.element {background-color: hsla(0, 100%, 50%, 0.5); 
/* 红色(色调为0),100%饱和度,50%亮度,50%透明度 */
}

使用 RGBA 或 HSLA 的好处是你可以只针对特定的颜色属性(如背景色或文本色)设置透明度,而不会影响元素的其他部分。

 3.使用 background-color 的 rgba() 与 background 的结合

有时你可能想要一个元素有透明的背景色,但文本或其他内容保持不透明。这时,你可以使用 rgba() 来设置 background-color

.element {background-color: rgba(0, 0, 0, 0.5); /* 黑色背景,50%透明度 */color: white; /* 白色文本 */
}

4. 使用 ::before 或 ::after 伪元素和 opacity(部分透明)

如果你想要一个元素的部分内容透明,而另一部分不透明,你可以使用伪元素。例如,你可以创建一个半透明的背景覆盖在元素上:

.element {position: relative; /* 确保伪元素相对于此元素定位 */z-index: 1; /* 确保元素本身在伪元素之上 */
}.element::before {content: "";position: absolute;top: 0;left: 0;right: 0;bottom: 0;background-color: rgba(0, 0, 0, 0.5); /* 黑色背景,50%透明度 */z-index: -1; /* 确保伪元素在元素之下 */
}

上述例子,.element 的内容将保持不透明,而一个半透明的黑色背景将覆盖在它之上。

可以使用盒模型来创建固定宽度的布局、流式布局、响应式布局等。

三、渐变边框

3.1.使用背景图像和box-shadow

可以将渐变色设置为元素的背景图像,并使用box-shadow来模拟边框的效果。这种方法的一个缺点是,它不会创建一个真正的边框,而是一个在元素外部的阴影效果。

.element {width: 200px;height: 100px;background: linear-gradient(to right, red, blue); /* 渐变色背景 */box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1); /* 模拟边框的阴影,但这里不是真正的边框 *//* 注意:这里的box-shadow只是为了演示,它并不真正创建渐变色边框 */
}

注意:上面的box-shadow示例并不创建渐变色边框,而是创建了一个围绕元素的阴影。要真正模拟渐变色边框,你可能需要更复杂的技巧,比如使用伪元素

3.2.使用伪元素(::before和::after)

可以使用伪元素来创建一个真正的渐变色边框。这种方法涉及为元素添加额外的层,并为这些层设置渐变色背景和适当的尺寸和位置。

.element {position: relative;width: 200px;height: 100px;z-index: 1; /* 确保内容在伪元素之上 */
}/* 顶部边框 */
.element::before {content: '';position: absolute;top: 0;left: 0;right: 0;height: 4px;background: linear-gradient(to right, red, blue); /* 渐变色 */z-index: -1; /* 确保伪元素在元素之下 */
}/* 右侧边框 */
.element::after {content: '';position: absolute;top: 0;right: 0;bottom: 0;width: 4px;background: linear-gradient(to bottom, red, blue);
/* 垂直渐变色,但这里为了与顶部边框一致,可以调整为与顶部相同的水平渐变,或根据需要调整 */z-index: -1; 
/* 确保伪元素在元素之下,但这里由于::before已经设置了-1,所以实际上这个z-index可以是-2或其他小于1的值,只要保证它在内容之下即可 */
/* 注意:由于CSS的层叠规则,如果两个伪元素有相同的z-index且都设置为-1,它们的堆叠顺序由它们在CSS中出现的顺序决定。在这个例子中,::before会先被渲染,然后是::after,但由于它们都是-1,所以视觉上它们是在同一层上的。然而,由于我们只需要确保伪元素在内容之下,所以这里的z-index值可以稍有不同,只要它们都小于内容的z-index即可。 */
}/* 为了完整性,添加底部和左侧边框的伪元素 */
/* 底部边框,使用一个新的伪元素,但这里我们可以利用已有的::after通过调整样式来避免额外的DOM节点,不过为了清晰起见,我们还是单独写出 */
/* 注意:在实际应用中,为了性能优化和代码简洁性,你可能会考虑合并伪元素,但这里为了教学目的,我们分开写 */
.element-bottom-border::after { 
/* 假设我们为需要底部边框的特定元素添加了这个类,或者你可以直接写在.element里并调整样式 */content: '';position: absolute;bottom: 0;left: 0;right: 0;height: 4px; /* 与顶部边框相同的厚度 */background: linear-gradient(to right, red, blue); /* 与顶部边框相同的渐变色 */z-index: -1; /* 确保在内容之下 *//* 注意:这里我们其实没有真正创建一个新的伪元素,而是假设了如果需要一个底部边框,应该如何设置。在实际应用中,你应该将这部分样式合并到.element::after中,并通过调整top和bottom属性来创建一个完整的边框框架,或者为.element添加一个新的伪元素(比如::after用于右侧和底部,再添加一个::before的变种用于左侧和可能需要的顶部调整,但在这个例子中我们已经有了顶部) */
}/* 左侧边框,同样地,我们可以利用已有的伪元素或添加一个新的 */
.element-left-border::before { /* 同样地,这是一个假设的类,用于说明如何添加左侧边框 */content: '';position: absolute;top: 0;bottom: 0;left: 0;width: 4px; /* 与右侧边框相同的厚度 */background: linear-gradient(to bottom, red, blue); /* 可以与右侧边框相同,也可以根据需要调整 */z-index: -1; /* 确保在内容之下 *//* 注意:同样地,这里我们其实是在描述如何添加左侧边框的样式,而不是真正创建了一个新的伪元素。在实际应用中,你应该将这些样式合并到已有的伪元素中,或者为.element添加一个新的伪元素来处理左侧边框 */
}/* 但是,为了简洁和性能,我们通常会尝试合并伪元素。下面是一个合并了所有边框样式的例子,但注意这只是一个概念性的展示,因为CSS不允许单个伪元素同时覆盖元素的四个边(至少不是以这种方式)。然而,你可以通过调整伪元素的尺寸和位置来模拟一个完整的边框框架。 *//* 合并边框样式的尝试(概念性展示,不完全正确) */
/* .element::pseudo-all-borders {content: '';position: absolute;top: 0; left: 0; right: 0; bottom: 0;/* 这里无法直接设置四个边的渐变色边框,因为伪元素是一个单独的层,它不能同时拥有四个独立的边框。但是,你可以通过一些技巧来模拟,比如使用多个背景层(虽然这通常不是通过伪元素实现的,而是通过元素本身和CSS的多背景特性),或者通过JavaScript动态创建和定位多个伪元素。在这个例子中,我们将继续使用两个伪元素(::before和::after)来分别处理水平和垂直方向的边框。*//* 由于这个伪类/伪元素是不存在的,并且上面的注释说明了为什么,所以下面的代码将被注释掉以避免混淆。background: linear-gradient(to right, red, blue) top left / 100% 4px no-repeat,  // 顶部边框linear-gradient(to bottom, red, blue) top right / 4px 100% no-repeat, // 右侧边框(但这样设置并不会正确显示,因为背景是层叠的,且这里尝试将两个渐变放在同一个伪元素上是不正确的)/* ...(省略了底部和左侧边框的尝试,因为它们同样不会按预期工作)*/z-index: -1;
} *//* 正确的做法是使用两个伪元素,并分别设置它们的样式来模拟四个边框 */
/* 下面的代码是实际可行的,它使用了.element::before和.element::after,并通过调整它们的尺寸和位置来模拟边框 */
.element::before,
.element::after {content: '';position: absolute;z-index: -1;
}.element::before {/* 合并顶部和左侧边框的样式(通过调整宽度和高度) */top: 0;left: 0;width: calc(100% - 4px); /* 减去右侧边框的宽度 */height: 4px; /* 顶部边框的高度 */background: linear-gradient(to right, red, blue); /* 顶部边框的渐变色 */
}.element::after {/* 合并右侧和底部边框的样式(通过调整宽度和高度,并设置top为底部边框的上边缘位置,但这里为了简单起见,我们将其设置为覆盖整个右侧和底部) */top: 4px; /* 从顶部边框下方开始 */right: 0;bottom: 0;width: 4px; /* 右侧边框的宽度 */background: linear-gradient(to bottom, red, blue) right top / 4px 100% no-repeat, /* 右侧边框的渐变色(但这样设置只会显示右侧边框的顶部部分,因为背景是层叠的,我们需要另一个伪元素或方法来处理底部部分,或者调整这个伪元素的尺寸和位置来覆盖整个右侧和底部,但这里为了简化,我们仅展示右侧边框的顶部) *//* 注意:这里的背景设置是不完整的,因为它不能同时显示右侧和底部的渐变色边框。在实际应用中,你可能需要为底部边框创建一个额外的伪元素,或者调整这个伪元素的尺寸和位置来覆盖整个右侧和底部,并使用多个背景层(但CSS不允许单个元素或伪元素有多个独立的背景层用于不同的边框),或者通过其他方法(如JavaScript)来动态创建和定位多个伪元素。然而,为了这个示例的简洁性,我们将仅展示如何设置右侧边框的顶部部分。*//* 由于上述限制,下面我们将仅设置右侧边框的样式,并省略底部边框的尝试,因为那将需要额外的技巧或伪元素。 */linear-gradient(to bottom, transparent, transparent 39px, red 40px, blue 100%) 0 4px / 100% calc(100% - 4px) no-repeat; /* 这是一个尝试同时显示右侧和底部边框的技巧,但它依赖于透明到渐变的过渡,并且不是完美的解决方案。这里的39px和40px是为了在右侧边框和假设的底部边框之间创建一个微小的间隙(因为渐变会覆盖到边框的边缘),但这种方法并不推荐,因为它依赖于固定的尺寸和可能的视觉不一致性。在实际应用中,你应该寻找更可靠的方法来处理这种情况。 *//* 注意:上面的背景设置尝试同时处理右侧和底部边框是不正确的,并且可能会导致不可预测的结果。这里仅作为展示尝试和

四、阴影

4.1.文字阴影

文字阴影使用 text-shadow 属性来定义。你可以指定水平偏移、垂直偏移、模糊半径和阴影颜色。

语法:

text-shadow: 水平阴影 垂直阴影 模糊距离 阴影颜色;
水平阴影:可以是正值(向右)或负值(向左)

垂直阴影:可以是正值(向下)或负值(向上)

模糊距离:值越大,阴影越模糊。如果不需要模糊效果,可以设置为 0。

示例:

p {text-shadow: 2px 2px 5px rgba(0, 0, 0, 0.3);
}

4.2.盒阴影

盒子阴影使用 box-shadow 属性来定义。你可以指定水平偏移、垂直偏移、模糊半径、扩展半径和阴影颜色。

语法:

box-shadow:水平阴影 垂直阴影 模糊距离  阴影扩展半径 阴影颜色 inset;

水平阴影:可以是正值(向右)或负值(向左)

垂直阴影:可以是正值(向下)或负值(向上)

模糊距离:值越大,阴影越模糊。如果不需要模糊效果,可以设置为 0。

阴影的扩展半径:正值会使阴影变大,负值会使阴影变小。
阴影的颜色

inset:可选,将外部阴影 (outset) 改为内部阴影。如果指定为 inset,则阴影会出现在盒子内部。

示例:

div {box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.5), -1px -1px 2px rgba(255, 255, 255, 0.3) inset;
}

这将为 <div> 元素添加一个向右偏移 3 像素、向下偏移 3 像素、模糊半径为 5 像素、颜色为半透明的黑色的外部阴影,以及一个向左偏移 -1 像素、向上偏移 -1 像素、模糊半径为 2 像素、颜色为半透明的白色的内部阴影。

效果:

五、transform

5.1.  2D转换函数

平移(Translate)

语法:transform: translate(x, y); 或 transform: translateX(x); 或 transform: translateY(y);

功能:将元素在水平方向(X轴)和/或垂直方向(Y轴)上移动指定的距离。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Translate Example</title>
<style>.translate-box {width: 100px;height: 100px;background-color: lightblue;transform: translate(50px, 50px); /* 平移50px到右和50px到下 */}
</style>
</head>
<body>
<div class="translate-box">Translate</div>
</body>
</html>

旋转(Rotate)

语法:transform: rotate(angle);

功能:围绕元素的中心点将元素旋转指定的角度。角度为正时表示顺时针旋转,为负时表示逆时针旋转。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Rotate Example</title>
<style>.rotate-box {width: 100px;height: 100px;background-color: lightcoral;transform: rotate(45deg); /* 旋转45度 */}
</style>
</head>
<body>
<div class="rotate-box">Rotate</div>
</body>
</html>

缩放(Scale)

语法:transform: scale(x, y); 或 transform: scaleX(x); 或 transform: scaleY(y);

功能:改变元素的宽度(X轴)和/或高度(Y轴)的缩放比例。数值大于1表示放大,小于1表示缩小。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Scale Example</title>
<style>.scale-box {width: 100px;height: 100px;background-color: lightgreen;transform: scale(1.5, 1.5); /* 宽度和高度都放大1.5倍 */}
</style>
</head>
<body>
<div class="scale-box">Scale</div>
</body>
</html>

倾斜(Skew)

语法:transform: skew(x-angle, y-angle); 或 transform: skewX(x-angle); 或 transform: skewY(y-angle);

功能:使元素在水平方向(X轴)和/或垂直方向(Y轴)上倾斜指定的角度。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Skew Example</title>
<style>.skew-box {width: 100px;height: 100px;background-color: lightpink;transform: skew(20deg, 10deg); /* X轴倾斜20度,Y轴倾斜10度 */}
</style>
</head>
<body>
<div class="skew-box">Skew</div>
</body>
</html>

矩阵变形(Matrix)

语法:transform: matrix(a, b, c, d, e, f);

功能:通过一个包含六个值的变换矩阵来指定一个2D变换。这个矩阵可以包含旋转、缩放、移动(平移)和倾斜功能。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>2D Matrix Example</title>
<style>.matrix-box {width: 100px;height: 100px;background-color: lightsteelblue;transform: matrix(1, 0.5, -0.5, 1, 0, 0); /* 2D矩阵变形 */}
</style>
</head>
<body>
<div class="matrix-box">Matrix 2D</div>
</body>
</html>

5.2.  3D转换函数(部分)

虽然问题主要关注2D转换,但CSS3 transform属性还支持3D转换函数,如:

3D旋转(Rotate3d)

语法:transform: rotate3d(x, y, z, angle);

功能:围绕一个通过元素原点的3D向量(由x、y、z定义)将元素旋转指定的角度。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Rotate3d Example</title>
<style>.container {perspective: 1000px; /* 设置透视效果 */}.rotate3d-box {width: 100px;height: 100px;background-color: lightgoldenrodyellow;transform: rotate3d(1, 1, 0, 45deg); /* 绕X和Y轴组成的平面旋转45度 */transform-style: preserve-3d; /* 保持子元素的3D转换 */}
</style>
</head>
<body>
<div class="container"><div class="rotate3d-box">Rotate3d</div>
</div>
</body>
</html>

3D缩放(Scale3d)

语法:transform: scale3d(x, y, z);

功能:改变元素在3D空间中的缩放比例。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>3D Scale Example</title>
<style>.container {perspective: 1000px; /* 设置透视效果 */}.scale3d-box {width: 100px;height: 100px;background-color: lightseagreen;transform: scale3d(1.5, 1, 1); /* 沿X轴放大1.5倍,Y轴和Z轴保持不变 */transition: transform 1s; /* 添加过渡效果 */}.scale3d-box:hover {transform: scale3d(2, 1, 1); /* 沿X轴放大2倍,Y轴和Z轴保持不变 */}
</style>
</head>
<body>
<div class="container"><div class="scale3d-box">Scale3D</div>
</div>
</body>
</html>

transform-origin属性

功能:用于设置元素转换的基点(参照点)。默认点是元素的中心点。

语法:transform-origin: x y; 其中x和y可以是数值(带单位,如px、em等)、百分比或关键字(left、right、bottom、top、center)。

示例1:改变旋转的原点
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Transform Origin Example</title>
<style>.box {width: 100px;height: 100px;background-color: lightcoral;transform-origin: top left; /* 设置旋转的原点为左上角 */transform: rotate(45deg); /* 旋转45度 */}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
示例2:使用百分比设置原点位置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Transform Origin Percentage Example</title>
<style>.box {width: 200px;height: 200px;background-color: lightblue;transform-origin: 50% 50%; /* 使用百分比设置原点为元素中心 */transform: scale(1.5); /* 缩放1.5倍 */}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>

5.3.注意事项

transform-origin 属性只有在设置了 transform 属性时才会起作用。

transform-origin 属性可以接受两个或三个值来指定原点位置。两个值时,第一个值表示X轴偏移量,第二个值表示Y轴偏移量。三个值时,第三个值表示Z轴偏移量(用于3D变换)。

原点位置可以使用百分比、具体的长度单位(如px、em等)或关键字(如top、right、bottom、left、center)来指定。

变换效果(如旋转、缩放等)会基于指定的原点位置进行。

在使用transform属性时,需要注意元素的布局和定位关系,以确保转换效果符合预期。

某些转换函数(如3D转换)可能需要浏览器支持特定的前缀(如-webkit-)才能正常工作。

转换函数可以组合使用,以实现更复杂的视觉效果。但需要注意性能问题,过多的转换可能会影响页面的渲染速度。

5.4.案例

@keyframes 是 CSS 中用于定义动画关键帧的规则。它允许指定动画在特定时间点的样式,从而在动画的起始和结束之间创建平滑的过渡效果。通过 @keyframes,可以控制动画中的每一个细节,包括动画何时开始、何时结束、以及动画过程中元素如何变化

1.爱心

<style>* {margin: 0;padding: 0;}.box {position: absolute;Left: 50%;top: 50%;transform: translate(-50%, -50%);}.left,.right {width: 100px;height: 150px;background-color: red;fLoat: left;border-radius: 50% 50% 0 0;}.left {transform: rotate(46deg);transform-origin: right bottom;animation: move1 0.8s infinite;}.right {transform: rotate(-46deg);transform-origin: left bottom;animation: move2 0.8s infinite;}@keyframes move1{0%{transform: rotate(46deg) scale(1);}100%{transform: rotate(46deg) scale(1.4);}}@keyframes move2{0%{transform: rotate(-46deg) scale(1);}100%{transform: rotate(-46deg) scale(1.4);}}
</style>
<body><div class="box"><div class="left"></div><div class="right"></div></div>
</body>

2.风车

<style>* {padding: 0;margin: 0;}.box {width: 200px;height: 200px;position: relative;transform: rotate(90deg);    animation: one 2.0s infinite;}@keyframes one{0%{transform: rotate(0deg);}100%{transform: rotate(1800deg);}}.triangle {border-top: 50px solid transparent;border-right: 50px solid green;border-bottom: 50px solid transparent;border-left: 50px solid transparent;position: absolute;}.box div:nth-of-type(2) {top: 0;left: 100px;border-right: 50px solid yellow;transform: rotate(90deg);}.box div:nth-of-type(3) {top: 100px;left: 100px;border-right: 50px solid red;transform: rotate(180deg);}.box div:nth-of-type(4) {top: 100px;left: 0;border-right: 50px solid blue;transform: rotate(270deg);}
</style>
<div class="box"><div class="triangle"></div><div class="triangle"></div><div class="triangle"></div><div class="triangle"></div>
</div>

上述内容若有遗漏或不足之处,恳请各位大佬不吝赐教,指正并帮助美化,以期更加完善

码字不易,给孩子点点赞呗!!!

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

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

相关文章

【从零开始的LeetCode-算法】3239. 最少翻转次数使二进制矩阵回文 I

给你一个 m x n 的二进制矩阵 grid 。 如果矩阵中一行或者一列从前往后与从后往前读是一样的&#xff0c;那么我们称这一行或者这一列是 回文 的。 你可以将 grid 中任意格子的值 翻转 &#xff0c;也就是将格子里的值从 0 变成 1 &#xff0c;或者从 1 变成 0 。 请你返回 …

浅层神经网络

浅层神经网络 浅层神经网络通常指包含一个隐藏层的神经网络。这个网络由输入层、隐藏层和输出层构成&#xff1a; 输入层&#xff1a;输入层负责接收网络的输入特征&#xff0c;通常表示为列向量 x T [ x 1 , x 2 , x 3 ] x^T [x_1, x_2, x_3] xT[x1​,x2​,x3​]&#xff…

web与网络编程

使用HTTP协议访问Web 通过发送请求获取服务器资源的Web浏览器等&#xff0c;被成为客户端(client)。 Web使用一种名为HTTP(超文本传输协议)的协议作为规范&#xff0c;完成从客户端到服务器端等一系列运作流程。 可以说&#xff0c;Web时建立在HTTP协议上通信的。 网络基础T…

HARCT 2025 分论坛4:智能系统传感、传感器开发和数据融合中的智能数据分析

机电液一体化与先进机器人控制技术国际会议&#xff08;HARCT 2025&#xff09;将于2025年1月3日-6日在中国广西桂林召开。本届会议围绕“机电液一体化”“机器人”“控制技术”等最新研究成果&#xff0c;邀请海内外在这一领域贡献卓著的专家学者做精彩致辞和报告。 会议期间…

Vue3中一级导航栏的吸顶导航交互以及Pinia优化重复请求

一、前言 在日常的网站中&#xff0c;当鼠标滚轮往页面的底部滑动时&#xff0c;会出现顶部导航栏的隐藏&#xff0c;而出现新的导航栏显示&#xff0c;这就是一级导航栏的吸顶导航交互。本文当实现改模块功能的实现。 二、示例图 参考黑马程序员小兔仙儿PC端项目&#xff1a;…

计算机网络HTTP——针对实习面试

目录 计算机网络HTTP什么是HTTP&#xff1f;HTTP和HTTPS有什么区别&#xff1f;分别说明HTTP/1.0、HTTP/2.0、HTTP/3.0请说明访问网页的全过程请说明HTTP常见的状态码Cookie和Session有什么区别&#xff1f;HTTP请求方式有哪些&#xff1f;请解释GET和POST的区别&#xff1f;HT…

Win11 终端执行 python xxx.py 没反应

在 Win11 上写了一段 Python 代码来分析日志文件&#xff0c; 发现执行没反应。是在 VSCode 里的终端中执行的 python log_stats.py, 是 PowerShell&#xff1b; 也尝试了 cmd&#xff0c; 情况一样。 一开始怀疑代码写错&#xff0c;直到故意在代码里加打印&#xff0c;发现没…

自由学习记录(22)

最后再总结一下吧 虽然过程里很多细节也许我没有去管&#xff0c;毕竟现在就已经存在更好的解决方案了 但大致思想是了解了 A星是一种网格上的遍历方式&#xff0c;为了找到一个目标点和起点之间的要经过的最短节点组 里面更像是动态规划 每一次的遍历&#xff0c;都是当前…

如何保证MySQL与Redis缓存的数据一致性?

文章目录 一、引言二、场景来源三、高并发解决方案1. 先更新缓存&#xff0c;再更新数据库2. 先更新数据库&#xff0c;再更新缓存3. 先删除缓存&#xff0c;再更新数据库4. 先更新数据库&#xff0c;再删除缓存小结 四、拓展方案1. 分布式锁与分布式事务2. 消息队列3. 监听bin…

java-Day06 内部类 Lambda表达式 API

内部类 内部类:就是在一个类中定义一个类 格式例: public class Outer { public class Inner { } } 内部类分类 1.成员内部类(了解) 创建成员内部类 外部类.内部类 对象名new外部类().new内部类() 2.静态内部类(了解) 3.局部内部类(了解) 4.匿名内部类…

【3D Slicer】的小白入门使用指南八

3D Slicer DMRI(Diffusion MRI)-扩散磁共振认识和使用 0、简介 大脑解剖 ● 白质约占大脑的 45% ● 有髓神经纤维(大约10微米轴突直径) 白质探索 朱尔斯约瑟夫德杰林(Jules Joseph Dejerine,《神经中心解剖学》(巴黎,1890-1901):基于髓磷脂染色标本的神经解剖图谱)…

Spring Boot框架:构建可扩展的网上商城

4 系统设计 网上商城系统的设计方案比如功能框架的设计&#xff0c;比如数据库的设计的好坏也就决定了该系统在开发层面是否高效&#xff0c;以及在系统维护层面是否容易维护和升级&#xff0c;因为在系统实现阶段是需要考虑用户的所有需求&#xff0c;要是在设计阶段没有经过全…

【Pikachu】任意文件上传实战

将过去和羁绊全部丢弃&#xff0c;不要吝惜那为了梦想流下的泪水。 1.不安全的文件上传漏洞概述 不安全的文件上传漏洞概述 文件上传功能在web应用系统很常见&#xff0c;比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后&#xff0c;后台会对上传的…

vue3:computed

vue3:computed 扫码或者点击文字后台提问 computed 支持选项式写法 和 函数式写法 1.选项式写法 支持一个对象传入get函数以及set函数自定义操作 2.函数式写法 只能支持一个getter函数不允许修改值的 基础示例 <template><div><div>姓&#xff1a;<i…

Python调用API翻译Excel中的英语句子并回填数据

一、问题描述 最近遇到一个把Excel表中两列单元格中的文本读取&#xff0c;然后翻译&#xff0c;再重新回填到单元格中的案例。大约有700多行&#xff0c;1400多个句子&#xff0c;一个个手动复制粘贴要花费不少时间&#xff0c;而且极易出错。这时&#xff0c;我们就可以请出…

NFS-Ganesha 核心架构解读

NFSv4 简要概述 NFS 这个协议( NFSv2 )最初由 Sun Microsystems 在 1984 年设计提出&#xff0c;由于存在一些不足&#xff0c;因此在随后由几家公司联合推出了 NFSv3。到了 NFSv4 时&#xff0c;开发完全由 IETF 主导&#xff0c;设计目标是&#xff1a; 提高互联下的 NFS 访…

直流保护电路设计及保护器件参数说明和选型

在工控产品设计中时常会涉及到电源保护的电路设计的问题&#xff0c;在深圳瑞隆源电子给出的参考电路来切入主题&#xff0c;对气体放电管、压敏电阻和TVS这三类保护器件的参数及选型进行详细说明&#xff0c;以达到深刻理解的目的。 图1 直流保护电路 举例说明&#xff0c;若…

VBA学习笔记:点击单元格显示指定的列

应用场景&#xff1a; 表格中列数较多&#xff0c;特定条件下隐藏一些无关的列&#xff0c;只保留相关的列&#xff0c;使表格更加清晰。 示例&#xff1a;原表格如下 点击一年级&#xff0c;只显示一年级相关的科目&#xff1a; 点击二年级&#xff0c;只显示二年级相关的科…

一种时间戳对齐的方法(离线)

这段代码的主要功能是: 读取指定目录下的 pcd 文件和 jpg 文件。对于每个 pcd 文件,在 jpg 目录中找到时间戳最接近的 jpg 文件。将找到的 jpg 文件复制到对应的输出目录,实现时间戳对齐。 这种时间戳对齐的操作在多传感器数据融合中非常常见,它确保了不同传感器采集的数据在时…

『VUE』27. 透传属性与inheritAttrs(详细图文注释)

目录 什么是透传属性&#xff08;Forwarding Attributes&#xff09;使用条件唯一根节点禁用透传属性继承总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 什么是透传属性&#xff08;Forwarding Attributes&#xff09; 在 V…