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

【前端】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 RomanVerdana 等,也可以使用通用字体族,如 serifsans-serifmonospacecursivefantasy 等。通用字体族是一组具有相似外观的字体集合,这样可以确保即使指定的具体字体不可用,也能有一个合适的替代字体。

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属性设置表格的边框是否被折叠成一个单一的边框或隔开

表格宽度和高度

widthheight属性定义表格的宽度和高度

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)四个部分。
在这里插入图片描述

  1. 内容(Content)
    这是盒子的核心部分,包含了元素的实际内容,如文本、图像或其他 HTML 元素。其大小可以通过 widthheight 属性来设置。

  2. 内边距(Padding)
    是内容区域与边框之间的空间,用于在内容和边框之间创建一定的间隔,避免内容紧贴边框。可以使用 padding-toppadding-rightpadding-bottompadding-left 属性分别设置上、右、下、左内边距,也可以使用 padding 属性一次性设置四个方向的内边距。

  3. 边框(Border)
    位于内边距和外边距之间,围绕着内容和内边距,可以为元素添加可见的边界。可以使用 border-widthborder-styleborder-color 属性分别设置边框的宽度、样式和颜色,也可以使用 border 属性一次性设置边框的所有属性。

  4. 外边距(Margin)
    是盒子与其他元素之间的空间,用于控制元素之间的距离。可以使用 margin-topmargin-rightmargin-bottommargin-left 属性分别设置上、右、下、左外边距,也可以使用 margin 属性一次性设置四个方向的外边距。

以下是一份关于弹性盒子模型(flex box)的更完善的笔记:

弹性盒子模型(flex box)

定义

弹性盒子是 CSS3 的一种新的布局模式,它为元素的布局提供了更加灵活和强大的方式,尤其适用于一维布局(水平或垂直方向)。与传统的布局方式(如使用 floatposition)相比,弹性盒子模型在响应式设计、对齐和分布元素方面具有更大的优势,可以轻松地实现元素的排列、对齐、分配空间等操作,使页面布局更加简洁和易于维护。

弹性容器(Flex Container)

定义:使用 display: flex;display: inline-flex; 可以将一个元素定义为弹性容器。
- display: flex; 会将元素变成块级弹性容器,它会占据其父元素的整个宽度。
- display: inline-flex; 会将元素变成内联级弹性容器,其宽度由内容决定。

.container {display: flex;
}

当一个元素成为弹性容器后,它的子元素(称为弹性项目)会按照弹性布局的规则进行排列和布局。

弹性项目(Flex Items)

定义:弹性容器内的子元素就是弹性项目。
属性影响:弹性容器的属性会影响弹性项目的布局,如 justify-contentalign-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-growflex-shrinkflex-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的引入方式内联样式&#xff08;行内样式&#xff09;内部样式外部样式&#xff08;推荐&#xff09; 选择器全局选择器元素选择器类选择器ID选择器合并选择器后代选择器子选择器相邻兄弟选择器通用兄弟选择器伪类选择器:link:visited:hover:ac…...

Ubuntu离线docker compose安装DataEase 2.10.4版本笔记

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

C 语言雏启:擘画代码乾坤,谛观编程奥宇之初瞰

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。* 这一课主要是让大家初步了解C语言&#xff0c;了解我们的开发环境&#xff0c;main函数&#xff0c;库…...

npm操作大全:从入门到精通

引言 在现代前端开发中&#xff0c;npm&#xff08;Node Package Manager&#xff09;是不可或缺的工具。无论是安装依赖、管理项目&#xff0c;还是发布自己的包&#xff0c;npm都扮演着重要的角色。本文将带你从npm的基础操作开始&#xff0c;逐步深入到高级用法&#xff0c…...

AI绘画入门:探索数字艺术新世界(1/10)

引言&#xff1a;AI 绘画的兴起与现状 在科技飞速发展的当下&#xff0c;AI 绘画如同一场艺术领域的风暴&#xff0c;正以惊人的速度席卷而来&#xff0c;彻底改变着我们对艺术创作的认知。近年来&#xff0c;AI 绘画相关的话题屡屡登上热搜&#xff0c;从社交媒体上各种 AI 生…...

Linux应用编程(五)USB应用开发-libusb库

一、基础知识 1. USB接口是什么&#xff1f; USB接口&#xff08;Universal Serial Bus&#xff09;是一种通用串行总线&#xff0c;广泛使用的接口标准&#xff0c;主要用于连接计算机与外围设备&#xff08;如键盘、鼠标、打印机、存储设备等&#xff09;之间的数据传输和电…...

项目-03-封装echarts组件并使用component动态加载组件

目录 需求场景代码补充说明1. typeComponentMap 讲解2. 为什么要给Echarts实例DOM添加id3. 为什么要在 onMounted 里添加 nextTick4. 为什么要监听props.option 需求 由于需要多次用到echarts&#xff0c;需要封装一个echarts组件动态加载echarts组件 场景代码 场景&#xf…...

使用 Blazor 和 Elsa Workflows 作为引擎的工作流系统开发

开发一个完整的工作流系统使用 Blazor 和 Elsa Workflows 作为引擎&#xff0c;可以实现一个功能强大的工作流管理和设计系统。下面将提供详细的步骤和代码实现&#xff0c;展示如何在 Blazor 中开发一个基于 Elsa Workflows 的工作流系统。 项目概述 我们的工作流系统将包含以…...

Node.js 完全教程:从入门到精通

Node.js 完全教程&#xff1a;从入门到精通 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;允许开发者在服务器端使用 JavaScript。它的非阻塞 I/O 和事件驱动架构使得 Node.js 非常适合于构建高性能的网络应用。本文将详细介绍 Node.js 的安装、基本语…...

elasticsearch 数据导出/导入

例子&#xff1a; 导出命令&#xff1a; elasticdump --inputhttps://elastic:elasticsearchlocalhost:9100/company --outputcompany.json --typedata --no-verify 注意&#xff0c;本地docker搭建&#xff0c;禁用自签证书验证&#xff0c;先设置环境变量 export NODE_TL…...

什么是三高架构?

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

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——选择器、文字控制属性、背景属性、显示模式、盒子模型

黑马程序员视频地址&#xff1a; 前端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 的默认行为&#xff0c;一般放在项目的根目录&#xff0c;不能包含中文符号。不管是主函数模式运行&#xff0c;命令行模式运行&#xff0c;都会去读取这个全局配置文件。 [pytest] ;配置命令行参数&#xff0c;用空格进行分隔。addopts 中的选项会被命…...

PyTest自学-认识PyTest

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

【专题】为2025制定可付诸实践的IT战略规划报告汇总PDF洞察(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p39055 在当今瞬息万变的商业环境中&#xff0c;制定有效的 IT 战略规划对于企业的成功与可持续发展至关重要。本报告深入探讨了制定 IT 战略规划的关键活动&#xff0c;旨在为企业和决策者提供全面且实用的指导。 Gartner的《为202…...

自旋锁与CAS

上文我们认识了许许多多的锁&#xff0c;此篇我们的CAS就是从上文的锁策略开展的新概念&#xff0c;我们来一探究竟吧 1. 什么是CAS&#xff1f; CAS: 全称Compare and swap&#xff0c;字⾯意思:“比较并交换”&#xff0c;⼀个CAS涉及到以下操作&#xff1a; 我们假设内存中…...

数组-二分查找

目录 算法思想&#xff1a; 实践&#xff1a; 备注&#xff1a; 二分查找是一种高效的查找算法&#xff0c;适用于在 有序数组 或列表中快速定位目标元素的索引。 重要事情说三遍&#xff1a;使用前提&#xff1a;数组有序&#xff0c;无重复&#xff0c;如果数组未排序&am…...

如何使用 Python 进行文件读写操作?

大家好&#xff0c;我是 V 哥。今天的内容来介绍 Python 中进行文件读写操作的方法&#xff0c;这在学习 Python 时是必不可少的技术点&#xff0c;希望可以帮助到正在学习 python的小伙伴。 以下是 Python 中进行文件读写操作的基本方法&#xff1a; 一、文件读取&#xff1…...

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开发的声明…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...