2024蓝旭春季第二次前端培训课

目录

CSS伪类与伪元素

伪类

伪元素

关系选择器

分类+举例

后代选择器

子元素选择器

相邻兄弟选择器

通用兄弟选择器

作用+使用场景

后代选择器(空格)

子元素选择器 (>)

相邻兄弟选择器 (+)

通用兄弟选择器 (~)

随机提问

 CSS布局

基础布局

盒模型

1.简介

2.盒子的显示模式

正常流/文档流

传统布局

表格布局

浮动布局

定位布局

其他布局

Grid 布局(网格布局)

Flex布局     

容器属性

多列布局

调试CSS


CSS伪类与伪元素

伪类

        伪类是选择器的一种,它用于选择处于特定状态的元素,比如当它们是这一类型的第一个元素时,或者是当鼠标指针悬浮在元素上面的时候。它们表现得会像是你向你的文档的某个部分应用了一个类一样,帮你在你的标记文本中减少多余的类,让你的代码更灵活、更易于维护。

开头

 /* 悬停时应用样式的伪类 */
  button:hover {
    background-color: #f0f0f0;
    color: #333;
  }

  /* 获得焦点时应用样式的伪类 */
  input:focus {
    border-color: blue;
    box-shadow: 0 0 5px rgba(0, 0, 255, 0.5);
  }

  /* 第一个子元素应用样式的伪类 */
  ul li:first-child {
    font-weight: bold;
  }

  /* 最后一个子元素应用样式的伪类 */
  ul li:last-child {
    border-bottom: none;
  }

  /* 奇数位置子元素应用样式的伪类 */
  ul li:nth-child(odd) {
    background-color: #f2f2f2;
  }

  /* 偶数位置子元素应用样式的伪类 */
  div p:nth-of-type(even) {
    color: green;
  }

  /* 排除特定类的元素应用样式的伪类 */
  ul li:not(.special) {
    color: #999;
  }

伪元素

        创建一些不在文档树中的元素,并为其添加样式。(就是选取某些元素前面或后面这种普通选择器无法完成的工作,虽然用户可以看到这些文本,但是这些文本实际上不在文档树中。)

:: 开头

  /* ::before 伪元素 */
  p::before {
    content: "➤ "; /* 在段落内容前面插入蓝色箭头符号 */
    color: blue;
  }

  /* ::after 伪元素 */
  a::after {
    content: " (link)"; /* 在链接文本后面添加绿色括号文字 */
    color: green;
  }

  /* ::first-line 伪元素 */
  p::first-line {
    font-weight: bold; /* 将段落的第一行文字加粗 */
    color: red; /* 设置第一行文字颜色为红色 */
  }

  /* ::first-letter 伪元素 */
  p::first-letter {
    font-size: 150%; /* 将段落的第一个字母放大150% */
    color: purple; /* 设置第一个字母颜色为紫色 */
  }

  /* ::selection 伪元素 */
  ::selection {
    background-color: yellow; /* 选中文本背景颜色变为黄色 */
    color: black; /* 选中文本文字颜色变为黑色 */
  }

  /* ::placeholder 伪元素 */
  input::placeholder {
    color: gray; /* 输入框的占位符文本颜色为灰色 */
    font-style: italic; /* 输入框的占位符文本斜体显示 */
  }

  /* ::before 和 ::after 结合使用 */
  div::before {
    content: "前缀 "; /* 在div元素前面添加蓝色前缀文本 */
    color: blue;
  }
  div::after {
    content: " 后缀"; /* 在div元素后面添加红色后缀文本 */
    color: red;
  }

  /* ::marker 伪元素 */
  ul {
    list-style-type: none; /* 移除无序列表的默认标记样式 */
  }
  li::marker {
    content: "• "; /* 将列表项标记改为绿色的圆点符号 */
    color: green;
  }

demo  

关系选择器

        关系选择器用于选择文档中的特定元素,这些元素与其他元素之间存在特定的关系。关系选择器可以帮助我们根据元素之间的层次关系和位置关系来精确地选择需要样式化的元素,从而实现更灵活的页面布局和样式控制。

分类+举例

后代选择器

用于选择某个元素的后代元素,通过空格来表示选择器之间的关系。

li a { 
    color: blue; 
     }

选中所有 <li> 元素下的 <a> 元素,并将其文字颜色设为蓝色。

子元素选择器

子元素选择器用于选择某个元素的直接子元素,通过 > 符号来表示选择器之间的关系。

ul > li {
    list-style-type: circle;
}

将选中所有 <ul> 元素下作为直接子元素的 <li> 元素,并设置它们的列表样式为圆圈。 

相邻兄弟选择器

相邻兄弟选择器用于选择某个元素之后紧接着的相邻兄弟元素,通过 + 符号来表示选择器之间的关系。

h2 + p {
    margin-top: 10px;
}

选中紧接在 <h2> 元素后面的相邻 <p> 元素,并设置它们的顶部外边距为 10 像素。 

通用兄弟选择器

选择某个元素后面的所有兄弟元素,通过~ 符号来表示选择器之间的关系。

h3 ~ p {
    color: green;
}

选中紧跟在 <h3> 元素后面的所有兄弟 <p> 元素,并将它们的文字颜色设为绿色。

作用+使用场景

  • 后代选择器(空格)
    • 作用:选择指定父元素下的所有后代元素,包括直接子元素、孙子元素以及更深层次的后代元素。
    • 使用情况:当需要选择特定父元素下的所有后代元素时,可以使用后代选择器。
  • 子元素选择器 (>)
    • 作用:选择指定父元素下的直接子元素,不包括孙子元素及更深层次的后代元素。
    • 使用情况:当需要只选择特定父元素的直接子元素时,可以使用子元素选择器。
  • 相邻兄弟选择器 (+)
    • 作用:选择紧跟在指定元素后面的相邻兄弟元素。
    • 使用情况:当需要选择某个元素后面紧跟的一个特定元素时,可以使用相邻兄弟选择器。
  • 通用兄弟选择器 (~)
    • 作用:选择指定元素后面的所有兄弟元素,不论相邻与否。
    • 使用情况:当需要选择某个元素后面的所有兄弟元素时,可以使用通用兄弟选择器。

随机提问

  • 网站的导航菜单中,只需要选中一级菜单项而不包括下拉菜单项。
  • 网页中的标题与下面的段落之间设置特定样式。
  • 对整个网页内容的样式进行设置,或者选择某个容器内的所有子元素。
  • 对一组相邻的列表项或卡片进行样式设置。

css关系选择器代码测试

题目 1:

在一个网页中,有一个包含多个 <div> 元素的容器,每个 <div> 元素内部包含一个 <span> 元素作为其直接子元素。现在需要对每个 <span> 元素应用特定的样式,要求将其字体加粗。


题目 2:

在一个页面中,有一组图片和它们对应的标题。每个图片和标题都被包含在一个 <div> 元素中,图片是 <div> 元素的直接子元素,而标题是图片的兄弟元素,位于图片之后。现在需要对每个图片的标题应用特定样式,要求将标题的文字大小设为16像素。


题目 3:

一个网站的页脚包含了一组链接,每个链接都是 <a> 元素,链接之间是兄弟关系。现在需要对所有链接之间的间距进行调整,要求将链接之间的右边距设为10像素。


题目 4:

在一个列表中,每个列表项都包含了一个标题和一个段落。标题和段落是兄弟元素关系,排列在同一级别。现在需要对每个列表项中的段落应用特定样式,要求将段落的文字颜色设置为灰色。


 CSS布局

  •  响应式设计
  • 兼容性考虑
  • 布局结构清晰
  • 跨浏览器测试
  • CSS规范和命名规范
  • 确定好需求之后可以先进行UI设计

基础布局

盒模型

1.简介

        CSS 盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容,盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。

浏览器默认给外边距和内边距设置一定的初值

清除所有默认样式
*{
    margin:0;
    padding:0;
    box-sizing:border-box;
}
li{
    list-style:none;
}
    区域                                        介绍
内容区域元素的实际内容,例如文本、图片等
内边距区域内容区域与边框之间的空白区域,可以用 padding 属性来设置
边框区域包围内容和内边距的边框线,可以使用 border 属性来设置
外边距区域边框外部的空白区域,用于控制元素与其他元素之间的距离,可以使用 margin 属性来设置

标准盒模型的计算公式为  元素的宽度 = 内容宽度 + 左右内边距 + 左右边框 + 左右外边距

怪异盒模型    width + margin(左右)(即width已经包含了padding和border值)(IE浏览器)

样式

  • border-top-width:设置元素顶部边框的宽度。
  • border-right-width:设置元素右侧边框的宽度。
  • border-bottom-width:设置元素底部边框的宽度。
  • border-left-width:设置元素左侧边框的宽度。
  • border-width:同时设置上右下左四个方向的边框宽度。
  • border-top-style:设置元素顶部边框的样式。
  • border-right-style:设置元素右侧边框的样式。
  • border-bottom-style:设置元素底部边框的样式。
  • border-left-style:设置元素左侧边框的样式。
  • border-style:同时设置上右下左四个方向的边框样式。
  • border-top-color:设置元素顶部边框的颜色。
  • border-right-color:设置元素右侧边框的颜色。
  • border-bottom-color:设置元素底部边框的颜色。
  • border-left-color:设置元素左侧边框的颜色。
  • border-color:同时设置上右下左四个方向的边框颜色。
  • border-radius:设置元素边框的圆角半径。
2.盒子的显示模式

盒子的显示模式指的是如何控制一个元素在页面上的显示方式。

主要的盒子显示模式有三种:块级元素、内联元素和内联块级元素。

块级元素(Block-level Elements)

        块级元素是指在页面中以块的形式显示的 HTML 元素。它们通常会在页面中独占一行,并且会自动换行,占据父元素的整个宽度。

特点

  • 独占一行: 块级元素会在页面中独自占据一行空间,从上到下依次排列。

  • 默认宽度为100%: 块级元素的默认宽度是其父元素的100%,可以通过设置宽度属性进行调整。

  • 可设置宽度和高度: 可以通过 CSS 设置块级元素的宽度、高度、内边距、外边距、边框等样式。

  • 适合用于布局: 由于独占一行的特性,块级元素常用于页面布局的主要结构元素,如 <div><p><h1>-<h6><ul><ol><li><table><form> 等。

使用场景

  • 创建页面结构的主要组成部分,如头部、内容区、侧边栏、底部等。

  • 分隔页面内容,使其按照布局结构展示,如段落、标题、列表等。

  • 定义页面中的模块和容器,方便样式和布局的管理。

内联元素(Inline Elements)

内联元素是指在页面中以行内的形式显示的 HTML 元素。

它们不会独占一行,而是在一行内水平排列,并根据内容的大小自动调整位置。

特点

  • 不独占一行: 内联元素会在一行内水平排列,不会强制换行,根据内容大小自动调整位置。

  • 默认宽度由内容决定: 内联元素的宽度通常由其内容的宽度决定,不会填满父元素的水平空间。

  • 无法设置宽度和高度: 内联元素的宽度和高度无法直接通过 CSS 设置,但可以设置内边距、外边距、边框等样式。

  • 适合用于文本和行内内容: 内联元素通常用于包裹文本内容或者行内元素,如 <span><a><strong><em><img> 等。

使用场景

  • 包裹文本和行内内容,如加粗、斜体、超链接等。

  • 创建行内的元素组合,如 <span> 用于设置特定文本样式。

  • 作为块级元素内部的行内元素,用于布局和样式的微调,如在段落中的超链接。

内联块级元素(Inline-block Elements)

        内联块级元素是 CSS 中的一种元素显示模式,结合了块级元素和内联元素的特点。它会在一行内水平排列,同时可以设置宽度、高度、内边距、外边距等样式,类似于块级元素的盒模型,但不会独占一行。

特点

  • 不独占一行:内联块级元素会在一行内水平排列,与相邻的内联元素或文本共享一行空间。

  • 默认宽度由内容决定:内联块级元素可以通过设置宽度和高度来调整大小,与块级元素相似。

  • 可设置宽度和高度: 可以通过 CSS 设置块级元素的宽度、高度、内边距、外边距、边框等样式。

使用场景

  • 用于在一行内水平排列多个元素,比如导航菜单、按钮组等。

  • 进行自定义,可以将按钮或图标设计为内联块级元素,便于控制大小、间距等样式。

  • 响应式设计中,内联块级元素可用于创建流式布局,使页面在不同屏幕尺寸下自适应排列理。

  • 在表单设计中,可以将输入框、按钮等元素设计为内联块级元素,使布局更紧凑且灵活。

3.元素溢出 

控制溢出元素的内容的显示方式 overflow

属性值效果
hidden溢出内容隐藏
scroll显示滚动条
auto有溢出时显示滚动条
正常流/文档流

         HTML 文档中元素在默认情况下按照其在 HTML 结构中出现的顺序依次排列的布局方式。在正常流中,元素会按照从上到下、从左到右的顺序进行排列,即使没有设置特定的定位或浮动属性,也会在页面上占据一定的空间。

传统布局

表格布局

①table常用属性

margin主要设置表格的外边框
padding设置内边距
border设置表格的边框
width设置表格的宽度
height设置表格的高度
bgcolor设置背景颜色
background背景图片
border-collapse合并边框
tr
th/td单元格
caption表题
thead表头内容进行分组
tbody主体内容进行分组
tfoot页脚(脚注或表注)内容

②tr的属性

border边框(粗细、颜色等直接在border后面加“-”加属性即可)
align水平对齐
vlign垂直对齐
bgcolor背景色

 ③td的属性

width单元格的宽度
height单元格的高度
border单元格的边框
align水平对齐
vlign垂直对齐
bgcolor背景色
background背景图片
colspan跨列(水平合并)
rowspan跨行(垂直合并)

display:table / display:table-cell 用法 

  • display:table  元素会作为块级表格来显示(类似table);表格前后带有换行符;
  • display:table-cell 元素会作为表格单元格来显示(类似<td> 和 <th>)

特点

  • 表格可以根据需要创建多行多列的布局,每个单元格可以放置文本、图像或其他内容。
  • 表格默认会根据内容自适应宽度,可以通过设置固定宽度或百分比宽度来控制列的宽度。
  • 可以使用 CSS 设置表格、行、单元格的边框样式、间距等。
  • 可以使用 <caption> 标签定义表格标题,使用 <th> 标签定义表头。

使用场景

  • 用于展示表格数据,如员工名单、产品价格列表等。
  • 在 HTML 邮件中,表格布局仍然常用于排版和布局。

  • 在传统网页设计中,可以利用表格布局实现多列布局、栅格布局等,但不推荐将表格用于页面布局,因为现代 CSS 提供了更灵活的布局方式。

 

浮动布局

浮动概念

为了解决标准布局中,块级元素不能在水平方向布局的问题,即多个块级元素不能共享一行的问题,CSS提出了浮动的概念。(联想一下标准流)//标准流是底层 浮动流是新的图层

float属性

  • left 左浮动
  • right 右浮动
  • none 无浮动(元素默认浮动,无浮动)

浮动元素

可以看成是:特殊的行内块元素,它具备行内块的部分特点

 特点

  • 浮动元素之间共享一行
  • 浮动元素的width、height默认由元素内容决定,而不是由父级决定
  • 浮动元素支持通过width、height、padding、border、margin来指定盒子内容区、内外边距、边框大小。
  • 浮动元素之间不会因为空格、换行产生空隙,浮动元素之间是紧密贴合的,不会发生覆盖现象。如果目前顶部的行的剩余宽度不足以放下新的浮动元素,则新的浮动元素自动另起一行排列。
  • 浮动方向:在垂直方向上是向上浮动的,水平方向由float的属性决定。

标准流中的行内元素、行内块元素、块级元素加了浮动后,都会变成浮动元素,具备以上浮动元素的特性。

浮动带来的问题:标准流父级容器高度塌陷

一般而言,我们不给标准流中父级容器设定height,而是让容器height自动适配为容器内容的高度,但是如果,此时有一个子级元素发生了浮动,则标准流中的父级容器的高度会发生塌陷。

标准流中父级容器的高度本来是由标准流中子级元素撑开的,但是当子级元素脱标后,对应标准流中的位置就会被释放,所以标准流中父级容器就没有内容了,此时父级容器的height就为0了。

清除浮动 

属性值说明
left清除左侧浮动的影响
both清除两侧浮动的影响
right清除右侧浮动的影响

清除浮动的扩展:CSS - 浮动布局(float)_css float-CSDN博客 

定位布局

静态定位

静态定位是每个元素获取的默认值——它只是意味着“将元素放入它在文档布局流中的正常位置

.position {
  position: static;
  background: yellow;
}

相对定位

对定位是相对于元素在文档流中原本的位置进行定位,元素仍占据原本的空间,不会脱离文档流。

.position {
  position: relative;
  top: 10px;
  left: 20px;
}

绝对定位

绝对定位是相对于元素的最近的具有定位属性(非 static)的父元素进行定位,如果没有,则相对于文档根元素进行定位,元素脱离文档流。

.position {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%); /* 居中定位 */
}

应用场景

  •  居中定位: 可以利用绝对定位和 transform: translate(-50%, -50%); 来实现元素在父容器中的水平垂直居中。
  • 弹出菜单/对话框: 绝对定位常用于弹出菜单、对话框等元素的定位,使其浮动在页面上方。
  • 相对于固定位置的元素: 如果有一个固定定位的元素,可以使用绝对定位来创建相对于该元素的定位效果。 

固定定位

固定定位是相对于浏览器窗口(视口)进行定位,元素固定在页面上,不随页面滚动而移动。

.position {
  position: fixed;
  top: 10px;
  right: 10px;
}

应用场景

  •  导航栏: 页面滚动时,固定在顶部或底部的导航栏常用固定定位来实现。
  • 返回顶部按钮: 可以使用固定定位将返回顶部的按钮固定在页面某个位置。
  • 固定广告: 将广告固定在页面某个位置,不随页面滚动而移动。 

demo 

滚动索引

比起其他位置值要新一些。它基本上是相对位置和固定位置的混合体,它允许被定位的元素表现得像相对定位一样,直到它滚动到某个阈值点(例如,从视口顶部起 10 像素)为止,此后它就变得固定了。

.positioned {
  position: sticky;
  top: 30px;
  left: 30px;
}

应用场景 

  •  长页面导航: 在单页面应用或长页面中,滚动索引可以用于实现导航栏随着页面滚动自动更新选中状态,帮助用户快速导航到感兴趣的内容区域。
  • 文档和文章页面: 对于包含多个章节或内容区块的文档、文章页面,滚动索引可以显示当前阅读位置所在的章节标题或段落标题,方便用户了解整体结构并快速跳转到感兴趣的部分。
  • 产品页面: 在展示产品特性、功能或页面特定区域的网页中,滚动索引可以用于展示不同区域的功能点或特性点,用户滚动页面时可以实时查看当前浏览区域的功能说明或特性介绍。
  • 教育和培训页面: 在在线学习或培训平台上,滚动索引可以用于显示课程大纲或章节目录,帮助学生快速导航到所需的学习内容。

案例:

定制合成-WuXi Chemistry

化学服务-药物化学-分析测试服务-美迪西生物医药

CSS 布局 - position 属性 (w3school.com.cn)

其他布局

Grid 布局(网格布局)

可参考

  • 超详细)强大的grid布局-CSDN博客
  • 网格 - 学习 Web 开发 | MDN (mozilla.org)
  • Grid Garden - A game for learning CSS grid layout

        网格是由一系列水平及垂直的线构成的一种布局模式。根据网格,我们能够将设计元素进行排列,帮助我们设计一系列具有固定位置以及宽度的元素的页面,使我们的网站页面更加统一。

1.简介

一个网格通常具有许多的列(column)行(row),以及行与行、列与列之间的间隙,这个间隙一般被称为沟槽(gutter)

网格布局由一个父元素以及一个或多个子元素组成。 

<div class="gridContainer">
  <div class="gridItem">1</div>
  <div class="gridItem">2</div>
  <div class="gridItem">3</div>
  <div class="gridItem">4</div>
  <div class="gridItem">5</div>
  <div class="gridItem">6</div>
  <div class="gridItem">7</div>
  <div class="gridItem">8</div>
  <div class="gridItem">9</div>
</div>

2.属性设置

变成网格容器,网格容器的所有直接子元素将自动成为网格项目。

.gridContainer {
  display: grid;
}
.gridContainer {
  display: inline-grid;
}

 3.调整间隙大小

grid-column-gap
grid-row-gap
grid-gap

 4.网格行

说明效果 

.item1 {
  grid-column-start: 1;
  grid-column-end: 3;
}
.item1 {
  grid-row-start: 1;
  grid-row-end: 3;
}

5.相关属性

点击查看相关效果 CSS 网格容器 (w3school.com.cn)

grid-template-columns 属性

  • 定义网格布局中的列数,并可定义每列的宽度。
  • 该值是以空格分隔的列表,其中每个值定义相应列的长度。

grid-template-rows 属性

  • 定义每列的高度。

justify-content 属性

  • 用于在容器内对齐整个网格。
  • 网格的总宽度必须小于容器的宽度,这样 justify-content 属性才能生效。
flex-start:默认值,项目向主轴起始位置对齐。
flex-end:项目向主轴末尾位置对齐。
center:项目居中对齐。
space-between:项目在主轴上均匀分布,首尾项目分别贴近容器的起始和末尾位置。
space-around:项目在主轴上均匀分布,项目之间的间隔相等,首尾项目距离容器的起始和末尾位置是间隔的一半。
space-evenly:项目在主轴上均匀分布,包括首尾项目和容器边缘的间隔也相等。

align-content 属性

  • 用于垂直对齐容器内的整个网格。
  • 网格的总高度必须小于容器的高度,这样 align-content 属性才能生效。
flex-start:默认值,多行项目向交叉轴起始位置对齐。
flex-end:多行项目向交叉轴末尾位置对齐。
center:多行项目居中对齐。
space-between:多行项目在交叉轴上均匀分布,首尾项目分别贴近容器的起始和末尾位置。
space-around:多行项目在交叉轴上均匀分布,项目之间的间隔相等,首尾项目距离容器的起始和末尾位置是间隔的一半。
stretch:默认情况下,多行项目会拉伸以填满交叉轴,这个值会保持这种拉伸效果。
baseline:多行项目以各自的基线(baseline)对齐。

 grid-column/row属性

  • 定义了将项目放置在哪一列/行。
  • 可以定义项目的开始位置及结束位置。用/隔开 或使用关键字 "span" 定义该项目将跨越多少行

grid-area属性 

.item8 {
  grid-area: 1 / 2 / 5 / 6; //开始的行列 结束的行列
  grid-area: myArea;//为网格项目分配名称
}

grid-template-areas属性 

  • 引用命名的网格项目。 
  • 每行由撇号(' ')定义,每行的列都在撇号内定义,以空格分隔。句号表示没有名称的网格项目
grid-template-areas: 'myArea myArea myArea myArea myArea';//跨越五列网格布局中的所有五列
grid-template-areas: 'myArea myArea . . .';//跨越五列网格布局中的两列(句号代表没有名称的项目)
grid-template-areas: 'myArea myArea . . .' 'myArea myArea . . .';//跨越两列和两行

6.优点

  • 灵活性: 网格布局提供了灵活的网格系统,可以轻松实现复杂的布局结构,如多列平衡布局、网格瀑布流布局等。
  • 响应式设计: 网格布局可以适应不同尺寸的屏幕和设备,通过媒体查询等方式可以实现响应式设计。
  • 对齐控制: 可以方便地控制网格项目在网格容器中的对齐方式,包括水平对齐、垂直对齐等
  • 语义化: 通过定义网格区域和命名网格单元格,可以使布局结构更具有语义化,提高代码可读性和维护性。
  • 支持嵌套: 网格布局支持嵌套,可以在网格项目中再使用网格布局,实现更复杂的布局结构

7.局限性

  • 兼容性: 虽然现代浏览器对网格布局有很好的支持,但在一些旧版本的浏览器中可能存在兼容性问题,需要通过其他布局方式进行兼容处理。
  • 学习曲线: 相比传统的布局方式,学习网格布局可能需要一定的时间和经验积累,特别是对于复杂布局的实现需要深入的理解和掌握。
  • 某些布局场景不适用: 在一些简单的布局场景下,使用网格布局可能显得过于繁琐,不如传统布局方式简洁明了。
Flex布局     

参考

flex布局看这一篇就够了_flex 布局-CSDN博客

弹性盒子 - 学习 Web 开发 | MDN (mozilla.org)

 弹性布局,非常适合结构化布局,提供强大的空间分布和对齐能力。

section {
  display: flex;
}

容器属性

display

flex一个块级的 Flex 容器
inline-flex一个内联的 Flex 容器

flex-direction

row主轴为水平方向,项目从左到右排列
row-reverse主轴为水平方向,项目从右到左排列
column主轴为垂直方向,项目从上到下排列
column-reverse主轴为垂直方向,项目从下到上排列

flex-wrap

nowrap不换行,所有项目在一行内显示
wrap换行,超出容器宽度时项目会换行显示
wrap-reverse反向换行,从底部开始换行

flex-flow

  • <flex-direction> || <flex-wrap> 的缩写属性,如 row wrap

justify-content

flex-start在主轴起始位置对齐
flex-end在主轴末尾位置对齐
center在主轴中间位置对齐
space-between在主轴上均匀分布,首尾项目贴边
space-around在主轴上均匀分布,项目两侧间隔相等
space-evenly在主轴上均匀分布,项目之间和两侧间隔相等

align-items

flex-start在交叉轴起始位置对齐
flex-end在交叉轴末尾位置对齐
center在交叉轴中间位置对齐
baseline在基线上对齐
stretch在交叉轴上拉伸填满容器

align-content

flex-start多行项目在交叉轴起始位置对齐
flex-end多行项目在交叉轴末尾位置对齐
center多行项目在交叉轴中间位置对齐
space-between多行项目在交叉轴上均匀分布,首尾贴边
space-around多行项目在交叉轴上均匀分布,项目两侧间隔相等
stretch:多行项目在交叉轴上拉伸填满容器

项目属性

order

  • <integer>:定义项目的排列顺序,数值越小越靠前。

flex-grow

  • <number>:定义项目在剩余空间上的放大比例,默认为0,不放大。

flex-shrink

  • <number>:定义项目在空间不足时的缩小比例,默认为1,可缩小。

flex-basis

  • <length> | <percentage> | auto:定义在主轴上的初始大小,默认为auto

flex

  • <flex-grow> <flex-shrink> <flex-basis> 的缩写属性。

align-self

auto继承容器的 align-items 属性
flex-start在交叉轴起始位置对齐
flex-end在交叉轴末尾位置对齐
center在交叉轴中间位置对齐
baseline在基线上对齐
stretch在交叉轴上拉伸填满容器

网格布局VS flex布局

1.灵活性和复杂度:

  • Flex布局: 主要用于单行或单列布局,适合于创建灵活的、动态调整项目排列的布局。它更适合于简单的布局结构或基于单个轴线的布局。
  • 网格布局: 更适合于复杂的多行多列布局,可以定义网格区域、命名网格单元格、设置网格间距等,适用于需要精确控制布局的情况。

2.主要用途:

  • Flex布局: 适用于创建响应式设计、导航菜单、卡片布局、水平/垂直居中等简单的布局需求。
  • 网格布局: 适用于创建复杂的网格结构,如新闻网站的多栏布局、图片展示网格、Dashboard仪表盘布局等。

3.适用性和兼容性:

  • Flex布局: 在现代浏览器中有较好的支持,但在旧版本浏览器中需要使用浏览器前缀或替代方案来兼容。
  • 网格布局: 由于较新,对于一些旧版本浏览器的兼容性可能不如Flex布局,但在现代浏览器中有较好的支持。

4.项目排列:

  • Flex布局: 主要关注项目在主轴和交叉轴上的排列方式,可以设置项目的弹性增长和缩小。
  • 网格布局: 主要关注项目在网格区域中的排列和布局,可以精确控制项目所在的网格单元格。

5.语法复杂度:

  • Flex布局: 语法相对简单直观,主要涉及到Flex容器和Flex项目的属性设置。
  • 网格布局: 语法相对复杂,需要定义网格模板、网格行列、网格区域等多个属性,但能够提供更精细的布局控制。
多列布局

(引自MDN多列布局 - 学习 Web 开发 | MDN (mozilla.org))

  http://admin.nenuet.cn/photoList 

直接设置有几列
.container {
  column-count: 3;
}
设置列宽
.container {
  column-width: 200px;
}

加样式
.container {
  column-count: 3;
  column-gap: 20px;
  column-rule: 4px dotted rgb(79, 185, 227);//不占用宽度
}

优点

  • 简单易用
  • 可以快速实现多列效果

局限性

  • 不能精确控制每列的间距和布局方式,对于某些特定的布局需求可能不够灵活。
  • 如果需要更多的布局控制和适应性,可以考虑使用Flex布局或者网格布局等更为灵活的方式。

调试CSS

东北师范大学信息科学与技术学院 F12 实际展示

更多参考

【CSS】开发者调试工具 ( 打开工具 | 设置工具显示位置 | 选择元素 | 查看手机版样式 | 开发者调试工具缩放 | 修改数值大小调试 | 查看 CSS 样式代码位置 )_css如何设置工具-CSDN博客

调试 CSS - 学习 Web 开发 | MDN (mozilla.org)

​css关系选择器
题目1:
div > span {
    font-weight: bold;
}

题目2:
div + span {
    font-size: 16px;
}

题目3:
a + a {
    margin-right: 10px;
}

题目4:
h2 + p {
    color: grey;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

群晖配置FTP服务结合内网穿透实现公网访问本地NAS中储存文件

文章目录 1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP地址连接 本文主要介绍如何在群晖NAS中开启FTP服务并结合cpolar内网穿透工具&#xff0c;实现使用固定公网地址远程访问群晖FTP服务实现文件上传下载。 Cpolar内…

服务器监控软件夜莺采集监控(三)

文章目录 一、采集器插件1. exec插件2. rabbitmq插件3. elasticsearch插件 二、监控仪表盘1. 系统信息2. 数据服务3. NginxMQ4. Docker5. 业务日志 一、采集器插件 1. exec插件 input.exec/exec.toml [[instances]] commands ["/home/monitor/categraf/scripts/*.sh&q…

GEE23:基于植被物候实现农作物分类

地物分类 1. 写在前面2. 北京作物分类 1. 写在前面 今天分享一个有意思的文章&#xff0c;用于进行农作物分类。文章提出了一个灵活的物候辅助监督水稻(PSPR)制图框架。主要是通过提取植被物候&#xff0c;并自动对物候数据进行采样&#xff0c;获得足够多的样本点&#xff0c;…

未来智慧停车:技术架构解析与创新应用

随着城市化进程的不断加速&#xff0c;停车难题已成为城市居民生活中的一大痛点。传统的停车方式已经无法满足日益增长的停车需求&#xff0c;而智慧停车系统则成为了解决这一难题的重要途径。本文将深入探讨智慧停车系统的技术架构&#xff0c;并探索其在城市管理和用户体验上…

Diffusion添加噪声noise的方式有哪些?怎么向图像中添加噪声?

添加噪声的方式大致分为两种&#xff0c;一种是每张图像在任意timestep都加入一样的均匀噪声&#xff0c;另一种是按照timestep添加不同程度的噪声 一、在任意timestep都加入一样的noise batch_size 32x_start torch.rand(batch_size,3,256,256) noise torch.randn_like(x_…

思维题,LeetCode331. 验证二叉树的前序序列化

一、题目 1、题目描述 序列化二叉树的一种方法是使用 前序遍历 。当我们遇到一个非空节点时&#xff0c;我们可以记录下这个节点的值。如果它是一个空节点&#xff0c;我们可以使用一个标记值记录&#xff0c;例如 #。 例如&#xff0c;上面的二叉树可以被序列化为字符串 &quo…

2024.3.31每日一题

LeetCode 验证二叉树的前序序列化 题目链接&#xff1a;331. 验证二叉树的前序序列化 - 力扣&#xff08;LeetCode&#xff09; 题目描述 序列化二叉树的一种方法是使用 前序遍历 。当我们遇到一个非空节点时&#xff0c;我们可以记录下这个节点的值。如果它是一个空节点&a…

夜莺浏览日志、filebeat采集日志(四)

文章目录 一、elasticsearch二、filebeat三、日志分析 一、elasticsearch docker启动 docker run -d -p 9200:9200 -p 9300:9300 --restartalways -e ES_JAVA_OPTS"-Xms512m -Xmx512m" \ -e discovery.typesingle-node -e xpack.security.enabledtrue -e ELASTIC_P…

数据结构初阶:排序

排序的概念及其运用 排序的概念 排序 &#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性 &#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&…

基于springboot+vue实现的养老服务管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

mysql 条件/系统/加密/其它函数

学习了日期时间函数&#xff0c;接着学习条件、系统、加密和其它函数。 3&#xff0c;条件判断函数 条件判断函数也称为控制流程函数&#xff0c;根据满足的条件的不同&#xff0c;执行相应的流程。MySQL中进行条件判断的函数有IF、IFNULL和 CASE。 函数 说明 IF(expr,v1,v2…

【文献分享】 机器学习 + 分子动力学 + 第一性原理计算 + 热力学性质(熔化温度 热导率 热膨胀系数)

分享一篇关于机器学习 分子动力学 第一性原理 熔化温度&#xff08;熔化温度 & 热导率 & 热膨胀系数&#xff09;的文章。 感谢论文的原作者&#xff01; 关键词&#xff1a; 1. Al−Li alloy 2. Neural network potential 3. Molecular dynamics 4. Thermal pr…

Jenkins执行策略(图文讲解)

Jenkins执行策略-图文讲解 一&#xff1a;手动执行1、手动执行流程2、手动执行操作 二、通过构建触发器——定时执行1、定时执行流程2、定时执行操作 三、当开发部署成功之后进行执行——在测试项配置——关注的项目1、执行流程2、操作流程 四、测试代码有更新的时候自动构建1、…

Collection与数据结构 链表与LinkedList (一):链表概述与单向无头非循环链表实现

1.ArrayList的缺点 上篇文章我们已经对顺序表进行了实现,并且对ArrayList进行了使用,我们知道ArrayList底层是使用数组实现的. 由于其底层是一段连续空间&#xff0c;当在ArrayList任意位置插入或者删除元素时&#xff0c;就需要将后序元素整体往前或者往后搬移&#xff0c;时…

面试八股——数据库——慢查询

什么是慢查询 查询速度很慢的查询。 慢查询定位策略 在MYsql开启慢查询日志并配置慢查询的查询时间阈值。以后所有超过该阈值的慢查询都会被记录&#xff1a; 面试总结 慢查询一般会发生在多表查询、聚合查询和表数据量较大的查询操作中。 可通过Mysql自带的慢日志定位慢查询…

基于Pytorch的验证码识别模型应用

前言 在做OCR文字识别的时候&#xff0c;或多或少会接触一些验证码图片&#xff0c;这里收集了一些验证码图片&#xff0c;可以对验证码进行识别&#xff0c;可以识别4到6位&#xff0c;纯数字型、数字字母型和纯字母型的一些验证码&#xff0c;准确率还是相当高&#xff0c;需…

基于单片机的自动浇灌系统的设计

本文设计了一款由单片机控制的自动浇灌系统。本设计的硬件电路采用AT89C51单片机作为主控芯片,采用YL-69土壤湿度传感器检测植物的湿度。通过单片机将采集湿度值与设定值分析处理后,控制报警电路和水泵浇灌电路的开启,从而实现植物的自动浇灌。 1 设计目的 随着生活水平的…

【C++】C到C++的入门知识

目录 1、C关键字 2、命名空间 2.1 命名空间的定义 2.2 命名空间的使用 2.2.1 加命名空间名称及作用域限定符 2.2.2 使用using将命名空间中某个成员引入 2.2.3 使用using namespace 命名空间名称引入 3、C输入&输出 4、缺省参数 4.1 缺省参数的概念 4.2 缺省参数的…

深入理解计算机系统 家庭作业2.59

#include <stdio.h> int main(void) { int x 0x89ABCDEF; int y 0x76543210; int z (x&0xFF)|((y>>8)<<8); printf("z%x\n",z); } //x的最低有效字节形成一个掩码(x&0xFF) //书右上角页码29页,寻址和字节顺序中提到…

Dynamic Declaration Language (DDL) 百练平台

题目链接: OpenJudge - 1684:Dynamic Declaration Language (DDL) 题目描述: 评价: 一道单纯的大模拟题&#xff0c;算法难度不大&#xff0c;需要非常细心&#xff0c;锻炼我们的耐心和能力&#xff01;值得一做 分析: 总结一下题目的条件&#xff0c;这种语言&#xff0…