【前端】CSS学习笔记(1)
目录
- CSS的简介
- CSS的概念
- 语法
- CSS的引入方式
- 内联样式(行内样式)
- 内部样式
- 外部样式(推荐)
- 选择器
- 全局选择器
- 元素选择器
- 类选择器
- ID选择器
- 合并选择器
- 后代选择器
- 子选择器
- 相邻兄弟选择器
- 通用兄弟选择器
- 伪类选择器
- :link
- :visited
- :hover
- :active
- :focus
- :first-child
- :last-child
- :nth-child(n)
- :nth-of-type(n)
- :not(selector)
- 字体属性
- color
- font-size
- font-weight
- font-style
- font-family
- line-height
- letter-spacing
- word-spacing
- 背景属性
- background-color 属性
- background-image属性
- background-repeat属性
- background-size属性
- background-position属性
- 文本属性
- text-align
- text-decoration
- text-transform
- text-indent
- 表格属性
- 表格边框
- 折叠边框
- 表格宽度和高度
- 表格文字对齐
- 表格填充
- 表格颜色
- CSS盒子模型(Box Model)
- 概念
- 弹性盒子模型(flex box)
- 定义
- 弹性容器(Flex Container)
- 弹性项目(Flex Items)
- 主轴(Main Axis)和交叉轴(Cross Axis)
- 弹性容器的属性
- justify-content
- align-items
- flex-wrap
- 弹性项目的属性
- flex-grow
- flex-shrink
- flex-basis
- flex
- flex-decoration
- 文档流
- 文档流产生的问题
- 高矮不齐,底边对齐
- 空格折叠
- 元素无间距
- 脱离文档流
- 浮动
- 定义
- 浮动的原理
- 元素向左浮动
- 当容器不足时
- 清除浮动
- 浮动副作用
- 清除浮动
- 父元素设置高度
- 受影响的元素增加clear属性
- overflow清除浮动
- 伪对象方式
- 定位
- 相对定位
- 绝对定位
- 固定定位
- 定位的问题
- Z-index
CSS的简介
CSS的概念
CSS(Cascading Style Sheets)层叠样式表,又叫级联样式表,简称样式表
CSS文件的后缀名为.css
CSS用于HTML文档中元素样式的定义
语法
CSS规则由两个主要部分构成:选择器,以及一条或多条声明
<head><style>选择器{属性名:属性值;属性名:属性值;}</style>
</head>
- 选择器:要修饰的对象(东西)
- 属性名:修饰对象的哪一个属性(样式)
- 属性值:样式的取值
CSS的引入方式
内联样式(行内样式)
要使用内联样式,需要在相关的标签内使用样式(style)属性。style属性可以包含任何CSS属性
<p style="color:red;font-size:20px;">我是内联样式的方案</p>
内部样式
当单个文档需要特殊的样式时,就应该使用内部样式表。你可以使用<style>
标签在文档头部定义内部样式表
<head><style>p {color:red;font-size:20px;}</style>
</head>
在上面的代码中,之后所有的<p>
标签都会生效这个样式
外部样式(推荐)
当样式需要应用于很多页面时,外部样式表将是理想的选择。在使用外部样式表的情况下,你可以通过改变一个文件来改变整个站点的外观。每个页面使用<link>
标签链接到样式表。<link>
标签在(文档的)头部
现在有如下两个页面,我希望让这两个页面的<p>
标签都能应用同样的样式。
<body><p>首页</p><a href="./product.html">产品</a>
</body>
<body><p>产品</p>
</body>
可以在同级目录下创建一个.css
文件
在里面设置所希望p标签的样式
p{color:red;font-size:30px;
}
接着回到两个页面的html文件中,在头部用<link>
标签引入public.css
文件
<head><link rel="stylesheet" href="./public.css">
</head>
这样子就成功给不同页面的同一标签加上同样的效果了
选择器
全局选择器
可以与任何元素匹配,优先级最低,一般做样式初始化
*{margin: 0;padding: 0;
}
元素选择器
HTML文档中的元素,p、b、div、a、img、body等
标签选择器,选择的是页面上所有这种类型的标签,所以经常描述“共性”,无法描述某一个元素的“个性”
p{font-size = 30px;
}
类选择器
通过给HTML元素添加class
属性,然后使用类选择器来匹配具有相同class
值的元素。类选择器在HTML中可以被多个元素使用,因此它可以用于为一组元素设置相同的样式,也可以用于区分不同的元素组,给它们设置不同的样式。类选择器的优先级高于元素选择器,低于ID选择器。
/* 类选择器以英文句点(.)开头,后面紧跟类名 */
.my-class {color: red;font-weight: bold;
}
在HTML中使用:
<p class="my-class">这是一个使用了类选择器设置样式的段落。</p>
<span class="my-class">这是一个使用了相同类选择器设置样式的span元素。</span>
ID选择器
HTML元素可以通过id
属性来唯一标识,ID选择器就是用来匹配具有特定id
值的元素。每个HTML文档中,id
值必须是唯一的,因此ID选择器通常用于为单个元素设置独特的样式。ID选择器的优先级高于类选择器和元素选择器。
/* ID选择器以英文井号(#)开头,后面紧跟ID名 */
#my-id {background-color: lightblue;padding: 20px;border: 1px solid gray;
}
在HTML中使用:
<div id="my-id">这是一个使用了ID选择器设置样式的div元素。</div>
合并选择器
合并选择器,也被称为群组选择器,它允许你将多个选择器组合在一起,同时为这些选择器所选中的元素应用相同的样式。这样可以避免重复编写相同的样式规则,提高CSS代码的简洁性和可维护性。合并选择器使用逗号(,
)来分隔不同的选择器。
/* 同时选择 p 元素、class 为 "my-class" 的元素以及 id 为 "my-id" 的元素 */
p,
.my-class,
#my-id {/* 这里设置的样式会同时应用到上述三种选择器选中的元素上 */text-align: center;line-height: 1.6;margin-bottom: 10px;
}
在HTML中使用:
<p>这是一个段落,会应用合并选择器设置的样式。</p>
<div class="my-class">这是一个使用了类选择器的div元素,同样会应用样式。</div>
<span id="my-id">这是一个使用了ID选择器的span元素,也会应用样式。</span>
后代选择器
后代选择器用于选择某个元素的所有后代元素。后代元素是指包含在该元素内部的所有元素,不管嵌套多少层。后代选择器使用空格来分隔选择器,选择器的顺序是从祖先元素到后代元素。它可以更精确地选择特定元素下的子元素,从而设置不同的样式。
/* 选择div元素内部的所有p元素 */
div p {color: green;font-style: italic;
}
在HTML中使用:
<div><p>这是div内部的段落,会应用后代选择器的样式。</p><ul><li><p>这也是div内部的段落,同样会应用样式。</p></li></ul>
</div>
子选择器
子选择器与后代选择器类似,但它只选择元素的直接子元素,而不是所有后代元素。子选择器使用大于号(>
)来分隔选择器,选择器的顺序是从父元素到子元素。
/* 选择div元素的直接子元素p */
div > p {border: 1px solid orange;margin-top: 10px;
}
在HTML中使用:
<div><p>这是div的直接子元素段落,会应用子选择器的样式。</p><div><p>这不是div的直接子元素段落,不会应用上述样式。</p></div>
</div>
相邻兄弟选择器
相邻兄弟选择器使用加号(+
)来连接两个选择器。它用于选择紧接在某个元素之后的相邻兄弟元素,即该元素后面紧邻的具有相同父元素的元素。也就是说,被选择的元素必须和前面的元素拥有相同的父元素,并且在文档流中紧挨着前面元素之后。
/* 选择紧接在 h2 元素之后的相邻 p 元素 */
h2 + p {color: purple;font-size: 18px;
}
在HTML中使用:
<h2>标题2</h2>
<p>这是紧跟在 h2 后面的段落,会应用相邻兄弟选择器的样式。</p>
<p>这个段落不会应用相邻兄弟选择器的样式,因为它不是紧挨着 h2 元素的。</p>
<div><p>这个段落虽然也是 p 元素,但它不是紧接在 h2 后面的兄弟元素,不会应用上述样式。</p>
</div>
通用兄弟选择器
通用兄弟选择器使用波浪号(~
)来连接两个选择器。它可以选择某元素之后的所有同级兄弟元素,这些元素需要满足两个条件:一是与前面的元素具有相同的父元素,二是在文档流中出现在前面元素之后。它提供了一种更灵活的方式来为多个同级元素设置样式,只要它们处于目标元素之后,无论相隔多远,都可以被选中。
/* 选择在 h2 元素之后的所有 p 兄弟元素 */
h2 ~ p {color: #666;font-style: italic;margin-top: 10px;
}
在 HTML 中使用:
<h2>标题</h2>
<p>这是在 h2 元素之后的第一个 p 元素,会应用通用兄弟选择器的样式。</p>
<div>这里是一个 div 元素,不会被选中。</div>
<p>这是在 h2 元素之后的第二个 p 元素,同样会应用样式。</p>
<p>这是在 h2 元素之后的第三个 p 元素,也会应用样式。</p>
伪类选择器
伪类选择器是CSS中一种特殊的选择器,它允许你基于元素的状态或信息来选择元素,而不是仅基于元素的结构或属性。以下是一些常见的伪类选择器及其用法:
:link
- 用于选择未被访问过的链接。
a:link {color: blue;text-decoration: none;
}
- 上述代码将未访问过的链接的颜色设置为蓝色,并且去掉下划线。
:visited
- 用于选择已被访问过的链接。
a:visited {color: purple;
}
- 此代码将已访问过的链接的颜色设置为紫色。
:hover
- 当鼠标悬停在元素上时使用此伪类。常用于为元素添加交互效果,比如改变颜色、添加下划线或显示隐藏内容等。
a:hover {color: red;text-decoration: underline;
}
- 当鼠标悬停在链接上时,该链接的颜色会变为红色并添加下划线。
:active
- 选择正在被用户激活的元素,通常是在鼠标按下但未松开时。
button:active {background-color: #ccc;
}
- 当按钮被按下时,其背景颜色会变成灰色。
:focus
- 选择获得焦点的元素,例如用户通过键盘的Tab键或点击输入框时,输入框会获得焦点。
input:focus {border: 2px solid orange;
}
- 当输入框获得焦点时,会添加一个橙色的边框。
:first-child
- 选择父元素的第一个子元素。
ul li:first-child {font-weight: bold;
}
- 对于无序列表,会将列表中的第一个列表项的字体加粗。
:last-child
- 选择父元素的最后一个子元素。
ul li:last-child {border-bottom: none;
}
- 对于无序列表,会将列表中的最后一个列表项的底部边框去掉。
:nth-child(n)
- 选择父元素的第n个子元素,其中n可以是数字、关键字(如odd或even)或公式(如2n+1)。
table tr:nth-child(even) {background-color: #f2f2f2;
}
- 对于表格,会将偶数行的背景颜色设置为浅灰色,这在表格样式设计中可以用来实现隔行变色的效果,提高表格的可读性。
:nth-of-type(n)
- 选择父元素中同类型元素的第n个元素。与:nth-child不同,它只考虑同类型的元素,而不是所有子元素。
div p:nth-of-type(2) {font-style: italic;
}
- 在一个包含多种元素的div中,会将第二个p元素的字体设置为斜体。
:not(selector)
- 用于排除某些元素,选择不满足括号内选择器条件的元素。
p:not(.highlight) {color: black;
}
- 会将没有
highlight
类的段落元素的颜色设置为黑色,而具有highlight
类的段落将不受此样式影响。
字体属性
color
规定文本的颜色
有如下四种设置方式:颜色名称,十六进制,RGB值,RGBA值
font-size
设置文本的大小
h1{font-size:40px;}
h2{font-size:30px;}
注意:chrome浏览器接受最小的字体是12px
font-weight
设置文本的粗细
值 | 描述 |
---|---|
bold | 定义粗体字符 |
bolder | 定义更粗的字符 |
lighter | 定义更细的字符 |
100~900 | 定义由细到粗 400等同默认,而700等同bold |
H1 {font-weight:normal;}
div{font-weight:bold;}
p {font-weight:900;}
font-style
指定文本的字体样式,它主要用于控制文本的字体风格,如正常、斜体或倾斜。
p {font-style: italic;}
span {font-style: oblique;}
h1 {font-style: normal;}
- italic:使文本呈现为斜体样式。通常,当字体支持斜体时,会使用字体的斜体变体。如果字体没有斜体变体,浏览器可能会模拟斜体效果。
- oblique:类似于 italic,但 oblique 更像是将正常字体进行倾斜处理,而不是使用专门的斜体变体。在实际使用中,italic 和 oblique 的区别可能不太明显,具体取决于字体的支持情况。
- normal:将文本恢复到正常的字体样式,即不使用斜体或倾斜。
font-family
用于指定元素的字体。可以使用多个字体名称,以逗号分隔,作为一个字体栈。浏览器会按照字体栈的顺序依次查找字体,如果第一种字体不可用,会尝试使用下一个字体,依此类推。
body {font-family: Arial, Helvetica, sans-serif;}
p{font-family:"微软雅黑";}
-
在这个示例中,浏览器会首先尝试使用 Arial 字体,如果 Arial 字体不可用,会尝试使用 Helvetica 字体,如果两者都不可用,会使用 sans-serif 这个通用字体族。
-
你可以指定具体的字体名称,如
Times New Roman
、Verdana
等,也可以使用通用字体族,如serif
、sans-serif
、monospace
、cursive
、fantasy
等。通用字体族是一组具有相似外观的字体集合,这样可以确保即使指定的具体字体不可用,也能有一个合适的替代字体。
line-height
设置文本行与行之间的距离,也称为行高。可以使用不同的单位,如像素(px)、百分比(%)、无单位数字(推荐,相对字号)等。
p {line-height: 20px;}
div {line-height: 150%;}
h1 {font-size: 30px;line-height: 1.5;
}
- 对于
line-height: 20px;
,行高将固定为 20 像素,无论字体大小如何。 - 对于
line-height: 150%;
,行高将是元素字体大小的 150%。例如,如果字体大小是 16px,行高将是 24px(16 * 1.5)。 - 对于
line-height: 1.5;
,行高是字体大小的 1.5 倍,这是一种更灵活的设置方式,因为当字体大小改变时,行高会自动调整。
letter-spacing
控制字符之间的间距,可以使用不同的单位,如像素(px)、em 等。
p {letter-spacing: 2px;}
h1 {letter-spacing: -1px;}
- 正的
letter-spacing
值会增加字符之间的间距,而负的letter-spacing
值会减少字符之间的间距。
word-spacing
与 letter-spacing
类似,但它控制的是单词之间的间距,而不是字符之间的间距。
p {word-spacing: 5px;}
h1 {word-spacing: -2px;}
- 正的
word-spacing
值会增加单词之间的间距,负的word-spacing
值会减少单词之间的间距。
背景属性
background-color 属性
该属性设置背景颜色
div {width: 400px;height: 400px;background-color: red;
}
background-image属性
设置元素的背景图像
.box2 {width: 200px;height: 200px;background-image: url("1.jpg");
}
因为容器的大小没有图片的大小大,所以只显示出了一部分
background-repeat属性
该属性设置如何平铺背景图像
值 | 说明 |
---|---|
repeat | 默认值 |
repeat-x | 只向水平方向平铺 |
repeat-y | 只想垂直方向平铺 |
no-repeat | 不平铺 |
.box2 {width: 1000px;height: 500px;background-image: url("1.jpg");background-repeat: repeat-x;
}
background-size属性
该属性设置背景图像的大小
值 | 说明 |
---|---|
length | 设置背景图片的宽度和高度,第一个值宽度,第二个值高度,如果只是设置一个,第二个值 auto |
percentage | 计算相对位置区域的白分比,第一个值宽度,第二个值高度,如果只是设置一个,第二个值 auto |
cover | 保持图片纵横比并将图片缩放成完全禮盖背景区域的最小大小 |
contain | 保持图片纵横比并将图像缩放成适合背景定位区域的最大大小 |
.box2 {width: 200px;height: 200px;background-image: url("1.jpg");background-size: cover;
}
虽然给的容器大小小于图片的大小,但通过cover,就可以把图片缩小到刚好放入容器中
background-position属性
该属性设置背景图像的起始位置,默认值是:0% 0%。
值 | 说明 |
---|---|
left top | 左上角 |
left center | 左 中 |
left bottom | 左下角 |
right top | 右上角 |
right center | 右 中 |
right bottom | 右下角 |
center top | 顶部居中 |
center center | 正中心 |
center bottom | 底部居中 |
x% y% | 使用百分比设置位置,第一个值是水平位置,第二个值是垂直位置。 0% 0% 表示左上角,100% 100% 表示右下角,50% 50% 表示正中心。 例如, background-position: 25% 75%; 表示将背景图像的起始位置设置为水平方向上距离左边 25%,垂直方向上距离顶部 75% 的位置。 |
xpos ypos | 使用长度值(px、em 等)设置位置,第一个值是水平位置,第二个值是垂直位置。 例如, background-position: 10px 20px; 表示将背景图像的起始位置设置为水平方向上距离左边 10 像素,垂直方向上距离顶部 20 像素的位置。 |
.box2 {width: 200px;height: 200px;background-image: url("1.jpg");background-position: right bottom;
}
从结果来看,当容器大小小于图片的时候,由于设置了background-position
属性,展示的部分为图片的右下角
文本属性
text-align
指定元素文本的水平对齐方式
值 | 描述 |
---|---|
left | 文本居左排列,默认值 |
right | 把文本排列到右边 |
center | 把文本排列到中间 |
text-decoration
规定添加到文本的修饰,下划线、上划线、删除线等
值 | 描述 |
---|---|
underline | 下划线,在文本的下方添加一条直线。 |
overline | 上划线,在文本的上方添加一条直线。 |
line-through | 删除线,在文本的中间位置添加一条贯穿文本的直线。 |
none | 无修饰,去除文本默认的或之前设置的任何文本修饰效果,如链接默认的下划线。 |
blink | 闪烁效果,使文本呈现闪烁的状态(该值在现代浏览器中兼容性较差,部分浏览器已不支持)。 |
underline overline | 同时添加下划线和上划线,在文本的上方和下方都添加一条直线。 |
wavy underline | 波浪形下划线,在文本下方添加一条波浪形状的线。 |
double underline | 双下划线,在文本下方添加两条平行的下划线。 |
h3 {text-align: center;text-decoration: double underline;text-decoration-color: red;
}
text-transform
控制文本的大小写
值 | 描述 |
---|---|
capitalize | 定义每个单词开头大写,即每个单词的首字母会被转换为大写形式,其余字母为小写。 |
uppercase | 将文本中的所有字母都转换为大写形式。 |
lowercase | 将文本中的所有字母都转换为小写形式。 |
none | 不进行大小写转换,文本将保持原始的大小写形式。 |
text-indent
规定文本块中首行文本的缩进
p{text-indent: 2em}
表格属性
创建一个表格,(table>tr3>td3{单元格})快捷生成
<table><tr><td>单元格</td><td>单元格</td><td>单元格</td></tr><tr><td>单元格</td><td>单元格</td><td>单元格</td></tr><tr><td>单元格</td><td>单元格</td><td>单元格</td></tr>
</table>
表格边框
border
属性
table,td {border: 1px solid red;
}
折叠边框
border-collapse
属性设置表格的边框是否被折叠成一个单一的边框或隔开
表格宽度和高度
width
和height
属性定义表格的宽度和高度
table,td {border: 4px solid green;
}
table{border-collapse: collapse;width: 500px;height: 300px;
}
表格文字对齐
text-align属性设置水平对齐方式,向左,右,或中心
td{text-align:center;}
垂直对齐属性设置垂直对齐
td{height:50px;vertical-align:bottom;}
表格填充
如果在表的内容控制空格之间的边框,应使用td和th元素的填充属性
td { padding:15px;}
表格颜色
下面的例子指定th元素的文本和背景颜色
td{text-align:center;background-color:yellow;color:black;
}
CSS盒子模型(Box Model)
概念
CSS 盒子模型是一种用于描述 HTML 元素布局的概念模型,它将每个 HTML 元素看作是一个矩形的盒子,这个盒子包含了元素的内容(content)、内边距(padding)、边框(border)和外边距(margin)四个部分。
-
内容(Content):
这是盒子的核心部分,包含了元素的实际内容,如文本、图像或其他 HTML 元素。其大小可以通过width
和height
属性来设置。 -
内边距(Padding):
是内容区域与边框之间的空间,用于在内容和边框之间创建一定的间隔,避免内容紧贴边框。可以使用padding-top
、padding-right
、padding-bottom
和padding-left
属性分别设置上、右、下、左内边距,也可以使用padding
属性一次性设置四个方向的内边距。 -
边框(Border):
位于内边距和外边距之间,围绕着内容和内边距,可以为元素添加可见的边界。可以使用border-width
、border-style
和border-color
属性分别设置边框的宽度、样式和颜色,也可以使用border
属性一次性设置边框的所有属性。 -
外边距(Margin):
是盒子与其他元素之间的空间,用于控制元素之间的距离。可以使用margin-top
、margin-right
、margin-bottom
和margin-left
属性分别设置上、右、下、左外边距,也可以使用margin
属性一次性设置四个方向的外边距。
以下是一份关于弹性盒子模型(flex box)的更完善的笔记:
弹性盒子模型(flex box)
定义
弹性盒子是 CSS3 的一种新的布局模式,它为元素的布局提供了更加灵活和强大的方式,尤其适用于一维布局(水平或垂直方向)。与传统的布局方式(如使用 float
和 position
)相比,弹性盒子模型在响应式设计、对齐和分布元素方面具有更大的优势,可以轻松地实现元素的排列、对齐、分配空间等操作,使页面布局更加简洁和易于维护。
弹性容器(Flex Container)
定义:使用 display: flex;
或 display: inline-flex;
可以将一个元素定义为弹性容器。
- display: flex;
会将元素变成块级弹性容器,它会占据其父元素的整个宽度。
- display: inline-flex;
会将元素变成内联级弹性容器,其宽度由内容决定。
.container {display: flex;
}
当一个元素成为弹性容器后,它的子元素(称为弹性项目)会按照弹性布局的规则进行排列和布局。
弹性项目(Flex Items)
定义:弹性容器内的子元素就是弹性项目。
属性影响:弹性容器的属性会影响弹性项目的布局,如 justify-content
、align-items
等,这些属性会控制弹性项目在容器内的位置、间距和对齐方式。
.container {width:200px;height: 100px;background-color:#555;display: flex;
}
.item {width:50px;height: 50px;margin: 10px;background-color: lightblue;
}
<div class="container"><div class="item"></div><div class="item"></div><div class="item"></div>
</div>
没设置弹性盒子
设置了弹性盒子
主轴(Main Axis)和交叉轴(Cross Axis)
- 主轴:弹性项目的排列方向就是主轴。可以通过
flex-direction
属性来设置主轴的方向,其取值有:row
(默认):从左到右水平排列。row-reverse
:从右到左水平排列。column
:从上到下垂直排列。column-reverse
:从下到上垂直排列。
- 交叉轴:与主轴垂直的方向就是交叉轴。当主轴是水平方向时,交叉轴是垂直方向,反之亦然。
- 示例代码:
.container {display: flex;flex-direction: column; /* 主轴为垂直方向 */
}
弹性容器的属性
justify-content
- 作用:用于控制弹性项目在主轴上的对齐方式。
- 取值:
flex-start
(默认):将弹性项目对齐到主轴的起始位置。flex-end
:将弹性项目对齐到主轴的结束位置。center
:将弹性项目在主轴上居中对齐。space-between
:将第一个弹性项目放在主轴的起始位置,最后一个放在结束位置,其他项目均匀分布在它们之间。space-around
:将弹性项目均匀分布在主轴上,在每个项目的两侧有相等的间距。space-evenly
:将弹性项目均匀分布在主轴上,所有间距相等。
- 示例代码:
.container {display: flex;justify-content: center; /* 弹性项目在主轴上居中对齐 */
}
align-items
- 作用:用于控制弹性项目在交叉轴上的对齐方式。
- 取值:
flex-start
:将弹性项目对齐到交叉轴的起始位置。flex-end
:将弹性项目对齐到交叉轴的结束位置。center
:将弹性项目在交叉轴上居中对齐。baseline
:将弹性项目按照它们的基线对齐。stretch
(默认):如果弹性项目未设置高度或设置为auto
,将拉伸项目以填满交叉轴。
- 示例代码:
.container {display: flex;align-items: flex-end; /* 弹性项目在交叉轴上靠末端对齐 */
}
flex-wrap
- 作用:控制弹性项目是否换行。
- 取值:
nowrap
(默认):不换行,弹性项目将尝试压缩在一行内。wrap
:当弹性项目在一行内放不下时,会换行显示。wrap-reverse
:当弹性项目在一行内放不下时,会换行显示,但换行的方向与wrap
相反。
- 示例代码:
.container {display: flex;flex-wrap: wrap; /* 弹性项目超出容器宽度时换行 */
}
弹性项目的属性
flex-grow
- 作用:定义弹性项目的放大比例,即当有多余空间时,该属性决定了弹性项目如何分配多余的空间。
- 取值:默认为 0,表示不放大;如果设置为正数,该项目将按比例分配多余空间。
- 示例代码:
.item1 {flex-grow: 1; /* 当有多余空间时,该项目会放大 */
}
.item2 {flex-grow: 2; /* 该项目会比 item1 放大的程度更大,因为其 flex-grow 值更大 */
}
flex-shrink
- 作用:定义弹性项目的缩小比例,即当空间不足时,该属性决定了弹性项目如何缩小。
- 取值:默认为 1,表示可以缩小;如果设置为 0,该项目不会缩小。
- 示例代码:
.item1 {flex-shrink: 0; /* 当空间不足时,该项目不会缩小 */
}
flex-basis
- 作用:定义弹性项目在分配多余空间之前的初始大小。可以设置为具体的长度(如
200px
)或相对值(如30%
)。 - 示例代码:
.item {flex-basis: 200px; /* 弹性项目的初始大小为 200 像素 */
}
flex
- 作用:是
flex-grow
、flex-shrink
和flex-basis
的简写属性。 - 示例代码:
.item {flex: 1 1 200px; /* 等同于 flex-grow: 1; flex-shrink: 1; flex-basis: 200px; */
}
flex-decoration
- 功能:
flex-direction
属性用于指定弹性容器(Flex Container)内弹性项目(Flex Items)的排列方向,也就是确定弹性布局的主轴(Main Axis)方向。通过设置该属性,可以控制弹性项目是水平排列还是垂直排列,以及排列的顺序。 - 语法:
flex-direction: row | row-reverse | column | column-reverse;
- 取值及含义:
row
(默认值):弹性项目从左到右水平排列。这是最常见的排列方式,适用于水平布局,例如在创建一个水平导航栏或一组水平排列的卡片时,可以使用该值。row-reverse
:弹性项目从右到左水平排列。与row
相反,用于实现元素从右向左的水平排列,可在某些特殊的布局需求中使用,如从右向左的语言环境。column
:弹性项目从上到下垂直排列。常用于创建垂直的布局结构,例如侧边栏或垂直排列的信息列表。column-reverse
:弹性项目从下到上垂直排列。适用于需要元素从下向上的垂直排列,例如一些倒序排列的信息展示。
文档流
文档流是文档中可显示对象在排列时所占用的位置/空间
例如:块元素自上而下摆放,内联元素,从左到右摆放
标准流里面的限制非常多,导致很多页面效果无法实现
文档流产生的问题
高矮不齐,底边对齐
<body><span>大家好,我们一起学前端</span><img src="1.jpg" alt="">
</body>
在上面这个例子中,我们发现文本和图片没有高矮对齐
空格折叠
<p>大家好,我是一个 p标签</p>
实际的效果是只显示了一个空格
元素无间距
<img src="1.jpg" alt="">
<img src="1.jpg" alt="">
两张图片之间出现了默认的间隙,不是我所预期的
脱离文档流
使一个元素脱离标准文档流有三种方式
- 浮动
- 绝对定位
- 固定定位
浮动
定义
float
属性定义元素在哪个方向浮动,任何元素都可以浮动
.div1{float: left;}
.div2{float: right;}
浮动的原理
- 浮动以后使元素脱离了文档流
- 浮动只有左右浮动,没有上下浮动
元素向左浮动
脱离文档流之后,元素相当于在页面上面增加一个浮层来放置内容。此时可以理解为有两层页面,一层是底层的原页面,一层是脱离文档流的上层页面,所以会出现折叠现象
设置浮动后,上述图片中间有缝隙的问题就解决了。
img {width: 300px;height: 300px;float: left;
}
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
正常情况的布局是从上到下
给<div>
标签加上float:left;
后就变成了水平排列
常应用于横向的无序列表作为网页顶部导航栏
当容器不足时
当容器不足以横向摆放内容时,会在下一行摆放
清除浮动
浮动副作用
当元素设置float浮动后,该元素就会脱离文档流并向左向右浮动
- 浮动元素会造成父元素高度塌陷
- 后续元素会受到影响
<div class="container"><div class="box"></div><div class="box"></div><div class="box"></div>
</div>
<div class="text"></div>
.container {width: 500px;background-color:gray;
}
.box{width: 100px;height: 100px;background-color:aqua;margin: 5px;
}
.text{width: 100px;height: 100px;background-color: blueviolet;}
这是没有加浮动的效果,由于没有设置灰色容器的高度,所以他的高度就是所有子元素撑开的大小
当给三个蓝色的box设置了浮动后,灰色容器直接消失了(高度变成了0)紫色方块 跑到了底下和蓝色方块重叠了。
清除浮动
当父元素出现塌陷的时候,对布局是不利的,所以我们必须清除副作用,解决方案有多种
- 父元素设置高度
- 受影响的元素增加clear属性
- overflow清除浮动
- 伪对象方式
父元素设置高度
如果父元素高度塌陷,可以给父元素设置高度,撑开元素本身大小
受影响的元素增加clear属性
通过设置高度,确实能让灰色块正常显示了,
但是如果把紫色方块和蓝色方块放到同一层级,由于蓝色方块设置了浮动,紫色方块没有设置浮动,还是出现了问题
<div class="container"><div class="box"></div><div class="box"></div><div class="box"></div><div class="text"></div>
</div>
.container {width: 500px;height:500px;background-color:gray;
}
.box{width: 100px;height: 100px;background-color:aqua;margin: 5px;float: left;
}
.text{width: 100px;height: 100px;background-color: blueviolet;
}
添加上clear
属性,both
代表清除左右浮动
.text{width: 100px;height: 100px;background-color: blueviolet;clear: both;
}
这样就可以正常显示了
overflow清除浮动
如果有父级塌陷,并且同级元素也受到了影响,可以使用overflow
清除浮动
这种情况下父布局不能设置高度
父级标签的样式里面加:overflow:hidden;clear:both;
.container {width: 500px;background-color:gray;overflow: hidden;clear: both;
}
伪对象方式
如果有父级塌陷,同级元素也受到了影响,还可以使用伪对象方式处理
为父级标签添加伪类after
,设置空的内容,并使用clear:both;
这种情况下,父布局不能设置高度
.container::after{content:"";display: block;clear: both;
}
定位
position
属性指定了元素的定位类型
值 | 描述 |
---|---|
relative | 相对定位 |
absolute | 绝对定位 |
fixed | 固定定位 |
其中,绝对定位和固定定位会脱离文档流
设置定位后:可以使用四个方向值进行调整位置:left、top、right、bottom
相对定位
div{width: 200px;height: 200px;background-color: red;position: relative;left:200px;top:100px;
}
绝对定位
.box1 {width: 200px;height: 200px;background-color: red;position: absolute;left:100px;top: 50px;
}
.box2{width: 300px;height: 300px;background-color: blue;
}
<div class="box1"></div>
<div class="box2"></div>
如图,使用了绝对定位后可以脱离文档流
注意:每设置一个绝对定位都是新的一层
固定定位
固定的元素会随着页面滚动而固定在一个位置
.box1 {width: 100px;height: 100px;background-color: red;position: fixed;left: 100px;bottom: 100px;
}
定位的问题
设置定位之后,相对定位和绝对定位是相对于具有定位的父级元素进行位置调整,如果父级元素不存在定位,则继续向上逐级寻找,直到顶层文档
.container {width: 200px;height: 200px;background-color: gray;margin-left: 100px;
}
.box{width: 100px;height: 100px;background-color: aqua;position: absolute;left: 50px;top: 50px;
}
<div class="container"><div class="box"></div>
</div>
灰色块是蓝色块的父元素,但是由于没有设置定位所以蓝色块的绝对定位是相对于整个文档来定位的
.container {width: 200px;height: 200px;background-color: gray;margin-left: 100px;position: relative;
}
在父元素中设置了相对定位属性后
蓝色块的位置就会跟着灰色块的位置进行位置调整
Z-index
z-index
属性设置元素的堆叠顺序,拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素前面
相关文章:

【前端】CSS学习笔记(1)
目录 CSS的简介CSS的概念语法 CSS的引入方式内联样式(行内样式)内部样式外部样式(推荐) 选择器全局选择器元素选择器类选择器ID选择器合并选择器后代选择器子选择器相邻兄弟选择器通用兄弟选择器伪类选择器:link:visited:hover:ac…...

Ubuntu离线docker compose安装DataEase 2.10.4版本笔记
1、先准备一个可以正常上网的相同版本的Ubuntu系统,可以使用虚拟机。Ubuntu系统需要安装好docker compose或docker-compose 2、下载dataease-online-installer-v2.10.4-ce.tar在线安装包,解压并执行install.sh进行安装和启动 3、导出docker镜像 sudo d…...

C 语言雏启:擘画代码乾坤,谛观编程奥宇之初瞰
大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。* 这一课主要是让大家初步了解C语言,了解我们的开发环境,main函数,库…...
npm操作大全:从入门到精通
引言 在现代前端开发中,npm(Node Package Manager)是不可或缺的工具。无论是安装依赖、管理项目,还是发布自己的包,npm都扮演着重要的角色。本文将带你从npm的基础操作开始,逐步深入到高级用法,…...

AI绘画入门:探索数字艺术新世界(1/10)
引言:AI 绘画的兴起与现状 在科技飞速发展的当下,AI 绘画如同一场艺术领域的风暴,正以惊人的速度席卷而来,彻底改变着我们对艺术创作的认知。近年来,AI 绘画相关的话题屡屡登上热搜,从社交媒体上各种 AI 生…...

Linux应用编程(五)USB应用开发-libusb库
一、基础知识 1. USB接口是什么? USB接口(Universal Serial Bus)是一种通用串行总线,广泛使用的接口标准,主要用于连接计算机与外围设备(如键盘、鼠标、打印机、存储设备等)之间的数据传输和电…...

项目-03-封装echarts组件并使用component动态加载组件
目录 需求场景代码补充说明1. typeComponentMap 讲解2. 为什么要给Echarts实例DOM添加id3. 为什么要在 onMounted 里添加 nextTick4. 为什么要监听props.option 需求 由于需要多次用到echarts,需要封装一个echarts组件动态加载echarts组件 场景代码 场景…...
使用 Blazor 和 Elsa Workflows 作为引擎的工作流系统开发
开发一个完整的工作流系统使用 Blazor 和 Elsa Workflows 作为引擎,可以实现一个功能强大的工作流管理和设计系统。下面将提供详细的步骤和代码实现,展示如何在 Blazor 中开发一个基于 Elsa Workflows 的工作流系统。 项目概述 我们的工作流系统将包含以…...

Node.js 完全教程:从入门到精通
Node.js 完全教程:从入门到精通 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,允许开发者在服务器端使用 JavaScript。它的非阻塞 I/O 和事件驱动架构使得 Node.js 非常适合于构建高性能的网络应用。本文将详细介绍 Node.js 的安装、基本语…...
elasticsearch 数据导出/导入
例子: 导出命令: elasticdump --inputhttps://elastic:elasticsearchlocalhost:9100/company --outputcompany.json --typedata --no-verify 注意,本地docker搭建,禁用自签证书验证,先设置环境变量 export NODE_TL…...

什么是三高架构?
大家好,我是锋哥。今天分享关于【什么是三高架构?】面试题。希望对大家有帮助; 什么是三高架构? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 “三高架构”通常是指高可用性(High Availability)、高性能ÿ…...

Docker 单机快速部署大数据各组件
文章目录 一、Spark1.1 NetWork 网络1.2 安装 Java81.3 安装 Python 环境1.4 Spark 安装部署 二、Kafka三、StarRocks四、Redis五、Rabbitmq六、Emqx6.1 前言6.2 安装部署 七、Flink八、Nacos九、Nginx 一、Spark 1.1 NetWork 网络 docker network lsdocker network create -…...

CSS笔记基础篇01——选择器、文字控制属性、背景属性、显示模式、盒子模型
黑马程序员视频地址: 前端Web开发HTML5CSS3移动web视频教程https://www.bilibili.com/video/BV1kM4y127Li?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodeshttps://www.bilibili.com/video/BV1kM4y127Li?vd_source0a2d3666…...
pytest全局配置文件pytest.ini
pytest.ini 改变 pytest 的默认行为,一般放在项目的根目录,不能包含中文符号。不管是主函数模式运行,命令行模式运行,都会去读取这个全局配置文件。 [pytest] ;配置命令行参数,用空格进行分隔。addopts 中的选项会被命…...

PyTest自学-认识PyTest
1 PyTest自学-认识PyTest 1.1 PyTest可以用来做什么? PyTest是一个自动化测试框架,支持单元测试和功能测试,有丰富的插件,如,pytest-selemium, pytest-html等。 1.2 安装pytest 使用pip install -U pytest。 1.3 py…...

【专题】为2025制定可付诸实践的IT战略规划报告汇总PDF洞察(附原数据表)
原文链接:https://tecdat.cn/?p39055 在当今瞬息万变的商业环境中,制定有效的 IT 战略规划对于企业的成功与可持续发展至关重要。本报告深入探讨了制定 IT 战略规划的关键活动,旨在为企业和决策者提供全面且实用的指导。 Gartner的《为202…...

自旋锁与CAS
上文我们认识了许许多多的锁,此篇我们的CAS就是从上文的锁策略开展的新概念,我们来一探究竟吧 1. 什么是CAS? CAS: 全称Compare and swap,字⾯意思:“比较并交换”,⼀个CAS涉及到以下操作: 我们假设内存中…...
数组-二分查找
目录 算法思想: 实践: 备注: 二分查找是一种高效的查找算法,适用于在 有序数组 或列表中快速定位目标元素的索引。 重要事情说三遍:使用前提:数组有序,无重复,如果数组未排序&am…...
如何使用 Python 进行文件读写操作?
大家好,我是 V 哥。今天的内容来介绍 Python 中进行文件读写操作的方法,这在学习 Python 时是必不可少的技术点,希望可以帮助到正在学习 python的小伙伴。 以下是 Python 中进行文件读写操作的基本方法: 一、文件读取࿱…...
springcloud中的Feign调用
目录 一、基础应用 1.feign使用 1.增加feign依赖 2.编写feign接口 3.启用feign 4.调试 5.可能出现的异常信息 1.404 可能原因: 2.503 可有原因: 2.feign自定义配置 1.创建Feign配置类 2.feign接口 3.调试结果 3.feign多参数请求 Feign是Netflix开发的声明…...

【八股消消乐】构建微服务架构体系—服务注册与发现
😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本专栏《八股消消乐》旨在记录个人所背的八股文,包括Java/Go开发、Vue开发、系统架构、大模型开发、具身智能、机器学习、深度学习、力扣算法等相关知识点ÿ…...
MS8551/MS8552/MS8554 单电源、轨到轨输入输出、高精度运放,可替代AD8551/AD8552/AD8554
MS8551/MS8552/MS8554 单电源、轨到轨输入输出、高精度运放,可替代AD8551/AD8552/AD8554 简述 MS8551/8552/8554 是轨到轨输入输出的高精度运算放大器,它有极低的输入失调电压和偏置电流,单电源电压范围为 1.8V 到 5V 。 MS8551/8552/85…...
两种Https正向代理的实现原理
正向代理 HTTPS 主要有两种方案,分别是基于证书的解密与再加密方案和基于 HTTP CONNECT 隧道的方案,以下是这两种方案的具体信息: 一、基于证书的解密与再加密方案 原理 工作原理:代理服务器拥有自己的证书,客户端需…...
Go 中 map 的双值检测写法详解
Go 中 map 的双值检测写法详解 在 Go 中,if char, exists : pairs[s[i]]; exists { 是一种利用 Go 语言特性编写的优雅条件语句,用于检测 map 中是否存在某个键。让我们分解解释这种写法: 语法结构解析 if value, ok : mapVariable[key]; …...

大故障:阿里云核心域名爆炸了
大故障:阿里云核心域名被拖走了 今天早上许多群里出现网站故障的讨论,比如 cnblogs 全国访问一片红,一看原来是阿里云又出故障了。 今天早上许多群里出现网站故障的讨论,比如 cnblogs 全国访问一片红,一看原来是阿里云…...

【LLM-Agent】智能体的记忆缓存设计
note 实践:https://modelscope-agent.readthedocs.io/zh-cn/latest/modules/memory.html 文章目录 note一、Agent的记忆实现二、相关综述三、记忆体的构建四、cursor的记忆设计1. 记忆生成提示词2. 记忆评估提示词 五、记忆相关的MCPReference 一、Agent的记忆实现…...

VmWare Ubuntu22.04 搭建DPDK 20.11.1
一、开发环境 Ubuntu 版本 二、增加虚拟机的网卡 给虚拟机增加1个网卡,加上原来的网卡,一共2个 网络适配器作为 ssh 连接的网卡,网络适配器2作为 DPDK 运行的网卡。 三、NAT模式简介 这里待补充,网上都是那一张图,看不懂 四、使网卡名称从0开始命名 进入管理员权限 s…...
iOS 门店营收表格功能的实现
iOS 门店营收表格功能实现方案 核心功能需求 数据展示:表格形式展示门店/日期维度的营收数据排序功能:支持按营收金额、增长率等排序筛选功能:按日期范围/门店/区域筛选交互操作:点击查看详情、数据刷新数据可视化:关…...

学习STC51单片机30(芯片为STC89C52RCRC)
每日一言 当你感到疲惫时,正是成长的关键时刻,再坚持一下。 IIC协议 是的,IIC协议就是与我们之前的串口通信协议是同一个性质,就是为了满足模块的通信,其实之前的串口通信协议叫做UART协议,我们千万不要弄…...
Django核心知识点全景解析
引言 本文深入剖析Django核心组件,涵盖数据交换、异步交互、状态管理及安全认证,附完整代码示例和避坑指南! 目录 引言 一、JSON:轻量级数据交换标准 1. 核心特性 2. 标准格式 3. 各语言处理方法 4. 常见错误示例 二、AJA…...