前端八股整理|CSS|高频小题 01

前端八股整理|CSS|高频小题 01

文章目录

前端八股整理|CSS|高频小题 01

1.如何让元素水平垂直居中?

方法一:

定位布局,使用 postion 来实现元素水平垂直居中

<divclass="parent"><divclass="child">内容</div></div>
.parent {position: relative;width:100vw;height:100vh;}.child {position: absolute;left:50%;top:50%;transform:translate(-50%,-50%);}

解释说明:

position: absolute:子元素 .child 不再参与普通文档流,它的位置由 left 和 top 决定。
left: 50%; top: 50%;:把 子元素的左上角 移动到了父容器 .parent 的正中心。
这时候 .child 的左上角在 .parent 的正中间,元素会错位,右下角偏移。为了让元素,调整中垂直水平居中的位置,应该向上向左移动,所以负的transform: translate(-50%, -50%)
translate(-50%, -50%) 是 相对自身尺寸偏移 的操作:
向左移动 50%(自身宽度的一半)
向上移动 50%(自身高度的一半)
这就把左上角对齐中心 → 变成 整体居中

方法二:

也是定位布局,但是需要子元素存在宽高

<divclass="parent"><divclass="child">内容</div></div>
.parent{position: relative;width:100vw;height:100vh;}.child{position: absolute;top: 0;bottom: 0;left: 0;right: 0;margin: auto;width: 200px;height: 100px;}

解释说明:

top: 0; bottom: 0; left: 0; right: 0;.child 会紧贴父元素的四条边;

margin: auto width: 200px; height: 100px;

假如说此时父元素宽高为 500px,同样你写了子元素高度为100px,那么 margin:auto;会自动计算 margin-top 和margin-bottom500-100px=400px,那么 margin-top 和margin-bottom分别就是 200

方法三:

使用 flex 布局,考虑好主轴 交叉轴即可

默认的主轴方向 flex-direction:row 横向的,然后就是把主轴和交叉轴都设置为 center 就居中了

.parent{display: flex;justify-content: center;/* 水平居中 */align-items: center;/* 垂直居中 */}

2.盒模型?

盒模型都是有四部分组成:content、padding、border、margin
最内层是content,外边是 padding,然后是 border,最外层是 margin

标准盒模型和IE盒模型(怪异盒模型)的区别在于设置width和height时,对应的范围不同

  • 标准盒模型和IE盒模型的区别在于设置width和height时,对应的范围不同
    • 标准盒模型的width、height只包含了content
    • IE盒模型的width、height包含了border、margin、padding
就是说如果是标准盒模型,如果设置 width:100px padding:10px border:1px,其中 width:100px,意味着 content 是 100px,实际上这个盒子的宽度是 100+20+2=122px 宽度
如果是怪异盒模型,置 width:100px padding:10px border:1px,意味着 content 是 100-20-2=78px,三个加一起为 100px

改变盒模型的种类
通过修改元素的 box-sizing 属性来改变元素的盒模型

  • box-sizeing:content-box 表示标准盒模型(默认值)
  • box-sizeing:border-box 表示 IE 盒模型(怪异盒模型)
在这里插入图片描述

什么时候用怪异盒模型?border-box

怪异盒模型更适合绝大多数页面开发,因为:

  • 设的宽高就是最终看到的宽高
  • padding 和 border 不会把盒子撑大
  • 布局更稳定、更好算

所以现在很多项目都会直接全局写:

*, *::before, *::after{box-sizing: border-box;}

3.BFC,如何清除浮动?

BFC (Block Formatting Context,块级格式化上下文)是什么?

BFC 可以理解成一个相对独立的布局区域。最常见的作用是让父元素在计算高度时把内部浮动元素也算进去,从而解决浮动导致的高度塌陷;同时它也能在一定程度上隔离外部浮动和 margin 重叠的影响。

如何创建一个 BFC

/* 最常见 */.bfc{overflow: hidden;/* 或 auto / scroll */}/* 其他常见方式 */.bfc{float: left;}.bfc{position: absolute;}.bfc{position: fixed;}.bfc{display: inline-block;}.bfc{display: flow-root;}

BFC 的作用:

  • 解决高度塌陷问题:当子元素浮动后,会脱离普通文档流,父元素默认不会把它计算进自身高度;如果让父元素形成 BFC,父元素在计算高度时就会把内部浮动元素算进去。
  • 避免垂直 margin 重叠,不会发生垂直方向的 margin 重叠。

BFC 实例:

例子一:高度塌陷问题

<!-- 没有 BFC,父元素高度会塌陷 --><divclass="parent"><divclass="child"></div></div>
.parent{background: lightgray;}.child{float: left;width: 100px;height: 100px;background: red;}
image-20260404180509278
  • 此时父元素不会计算子元素的高度,他的高度塌陷为 0,如果这个父元素外边还有元素需要他撑开,就会出现问题
  • div 是块级元素,默认是 display:block,默认 width: auto,通常占满父元素可用宽度

设置 bfc

.parent{background: lightgray;overflow:hidden }.child{float: left;width: 100px;height: 100px;background: red;}
image-20260404180712497

例子二:垂直外边距合并

当父元素和它的第一个子元素在垂直方向上紧贴在一起时,如果父元素顶部没有内容、没有 padding-top、没有 border-top,并且父元素也没有形成新的 BFC,那么子元素设置的 margin-top 可能不会老老实实出现在父元素内部,而是会和父元素的上外边距发生合并。

这时的视觉效果往往是:

  • 本来希望的是:子元素在父元素内部,距离父元素顶部 50px
  • 实际看到的是:父元素整体被向下“顶”了 50px

触发这种合并的常见条件

通常需要满足以下几种情况:

  1. 父元素没有形成新的 BFC
  2. 父元素没有padding-top
  3. 父元素没有 border-top
  4. 父元素和第一个子元素之间没有行内内容或其他内容把它们隔开

注意:

外边距合并,从感觉上来说就是子元素的外边距和父元素的的外边距之间没有了内容,所以产生了合并
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>Document</title><style>body{margin: 0;}.outer{background: lightblue;/* overflow: hidden; */}.inner{background: lightcoral;margin-top: 50px;}</style></head><body><divclass="outer"><divclass="inner">内容</div></div></body></html>

父元素内容由子元素撑起,父元素外边距合并,变成了 50px

在这里插入图片描述


加入 BFC 隔离

.outer{background: lightblue;overflow: hidden;}


成功解决问题 蓝色部分和红色部分都是父元素,父元素由子元素本身和它的外边距构成,这样就就解决了外边距合并的问题

4.了解过哪些布局,flex布局说一下,宽高不定的div如何定位在屏幕中间,宽高为0能用flex实现吗?

第一问:了解过哪些布局?
我了解过的布局方式主要有普通文档流、浮动布局、定位布局、Flex 布局和 Grid 布局。早期页面中会比较多用浮动和定位来做布局,现在实际开发里更常用的是 Flex 和 Grid。其中 Flex 更适合一维布局,主要解决一行或者一列上的对齐和分布问题;Grid 更适合二维布局,可以同时从行和列两个维度去划分区域。

拓展了解:

普通文档流就是按照 html 的顺序,比如几个 div,就是从上到下 div 都占一行,浮动布局就是 float ,定位布局就是 postion:绝对定位相对定位

第二问:Flex 布局说一下
Flex 是一种一维弹性布局模型,主要用于控制子元素在主轴和交叉轴上的排列方式。
使用时父元素设置 display: flex,之后可以通过:
• flex-direction 控制主轴方向
• justify-content 控制主轴对齐
• align-items 控制交叉轴对齐
• flex-wrap 控制是否换行
• 子元素通过 flex、flex-grow、flex-shrink、flex-basis 控制伸缩
它比较适合做水平排列、垂直居中、两端对齐、等分布局这类场景。

拓展了解::

为什么不叫横轴纵轴?
因为不是固定横轴纵轴,flex-direction 决定主轴的方向,它是 row,那主轴就是横向,反之就是纵向的,交叉轴就是主轴垂直的那个方向.

第三问:宽高不定的 div 如何定位在屏幕中间
方式一:绝对定位 + transform

.parent{position: relative;width: 100vw;height: 100vh;}.child{position: absolute;left: 50%;top: 50%;transform:translate(-50%, -50%);}

方式二:Flex 居中

.parent{display: flex;justify-content: center;align-items: center;width: 100vw;height: 100vh;}
如果父容器就是整个视口,其实更常用 flex 直接居中,实现会更简单。

第四问:宽高为 0 能用 flex 实现吗
可以。
因为 flex 控制的是flex item 在容器中的排列和对齐方式,并不要求子元素必须有宽高。
即使子元素宽高为 0,只要它是一个 flex item,仍然可以被放到父容器中心。
只是如果元素本身宽高为 0 且没有内容,视觉上看不到,所以看起来像“没有效果”。

.parent{display: flex;justify-content: center;align-items: center;width: 100vw;height: 100vh;}.child{width: 0;height: 0;}

Read more

IDEA 插件 Trae AI 全攻略

在 Java 开发的日常中,你是否经常遇到这些场景:     面对重复的 CRUD 代码,机械敲击键盘却内心抗拒?     接手 legacy 系统,看着几百行的复杂逻辑无从下手?     调试时卡在某个异常,翻遍文档和 Stack Overflow 却找不到答案?     写单元测试时,明明功能简单却要耗费大量时间设计测试用例? 这些问题的核心,在于重复性工作占用了太多创造性时间。而随着 AI 技术的发展,AI 辅助开发工具已成为突破效率瓶颈的关键。在众多工具中,Trae AI作为 IDEA 的一款插件,凭借对 Java 生态的深度适配、与 IDE 的无缝集成以及强大的代码理解能力,逐渐成为开发者的 “编码搭子”。 本文将从基础到进阶,全面讲解 Trae AI 的功能、用法、实战技巧和最佳实践,帮你彻底释放 AI 辅助开发的潜力,让编码效率提升

VSCode配置 AI agent skills 详细步骤

VSCode配置 AI agent skills 详细步骤

在VS Code中配置“Agent Skills”,是为你的AI编程助手(如GitHub Copilot)定制可复用的专业能力包。你可以把它理解为教你助手如何执行特定任务的标准说明书 它主要由一个 SKILL.md 文件以及相关的脚本、示例组成。当你的需求与某个技能描述匹配时,Copilot会自动加载这个“技能包”来更精准地帮你完成任务,比如创建测试、调试工作流等 启用功能 技能创建位置 在项目根目录或个人配置文件夹中,创建一个特定的文件夹来存放你的技能包 * 项目技能:在项目根目录创建 .github/skills/ 目录。就会作用于项目 * 个人技能:在你电脑用户目录下创建 ~/.copilot/skills/(推荐)或 ~/.claude/skills/。作用于你电脑里所有的项目 技能编写规范 my-skill/ (技能文件夹) ├── SKILL.md # 必需:核心入口文件,包含元数据和主要指令 ‼️‼️‼️ ├── references/ 或 resources/

AI调参技巧:贝叶斯优化Optuna

AI调参技巧:贝叶斯优化Optuna

AI调参技巧:贝叶斯优化Optuna 📝 本章学习目标:本章聚焦性能优化,帮助读者提升模型效率。通过本章学习,你将全面掌握"AI调参技巧:贝叶斯优化Optuna"这一核心主题。 一、引言:为什么这个话题如此重要 在人工智能快速发展的今天,AI调参技巧:贝叶斯优化Optuna已经成为每个AI从业者必须掌握的核心技能。Python作为AI开发的主流语言,其丰富的生态系统和简洁的语法使其成为机器学习和深度学习的首选工具。 1.1 背景与意义 💡 核心认知:Python在AI领域的统治地位并非偶然。其简洁的语法、丰富的库生态、活跃的社区支持,使其成为AI开发的不二之选。掌握Python AI技术栈,是进入AI行业的必经之路。 从NumPy的高效数组运算,到TensorFlow和PyTorch的深度学习框架,Python已经构建了完整的AI开发生态。据统计,超过90%的AI项目使用Python作为主要开发语言,AI岗位的招聘要求中Python几乎是标配。 1.2 本章结构概览 为了帮助读者系统性地掌握本章内容,我将从以下几个维度展开: 📊 概念解析 → 原理推导 → 代

黄仁勋力荐:OpenClaw不止是下一个ChatGPT,更是AI“动手时代”的破局者

黄仁勋力荐:OpenClaw不止是下一个ChatGPT,更是AI“动手时代”的破局者

在2026年GTC大会上,英伟达创始人兼CEO黄仁勋抛出了一个振聋发聩的判断:“OpenClaw绝对是下一个ChatGPT”。 这一评价并非夸大其词,而是精准点出了AI产业的核心演进方向——从“被动回答”的语言交互,转向“主动行动”的任务执行。ChatGPT开启了大语言模型(LLM)的普及时代,让AI具备了理解和生成人类语言的能力,但它始终停留在“军师”的角色,只能提供方案建议;而OpenClaw的出现,彻底打破了这一局限,将AI变成了能动手干活的“数字员工”,完成了AI从“认知”到“执行”的关键跃迁,成为连接AI能力与现实场景的核心桥梁。 下面我将从技术本质出发,拆解OpenClaw的核心架构、关键技术实现,结合代码示例、架构图与流程图,深入解析其如何实现“行动型AI”的突破,以及为何能被黄仁勋寄予厚望,成为AI产业的下一个里程碑。 一、认知跃迁:从“回答型AI”到“行动型AI”的本质区别 要理解OpenClaw的价值,首先需要明确它与ChatGPT这类“回答型AI”的核心差异。