前端八股整理|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

vscode copilot在win10 WSL2环境无法使用的问题

vscode copilot在win10 WSL2环境无法使用的问题

问题描述 问话会进入chat初始化过程 等了一段时间就说 retry connection 重新reload window会报:Chat took too long to get ready. Please ensure you are signed in to GitHub and that the extension GitHub.copilot-chat is installed and enabled. 解决办法 回退Copilot版本 参考这位老哥解决方案 :https://github.com/orgs/community/discussions/147219 将Copilot回退回 v1.252.0版本 PS:Vscode插件回退方法 依次点击插件->

AIGC时代编程新宠!如何让孩子通过DeepSeek成为未来的编程大师?

AIGC时代编程新宠!如何让孩子通过DeepSeek成为未来的编程大师?

文章目录 * 一、激发编程兴趣:从游戏开始 * 二、个性化学习计划:DeepSeek的智能推荐 * 三、项目式学习:动手实践,学以致用 * 四、AI精准辅导:即时解答,深度学习 * 五、全面发展:平衡技术与人文 * 六、家长的陪伴与鼓励 * 《信息学奥赛一本通关》 * 本书定位 * 内容简介 * 作者简介 * 目录 在AIGC(Artificial Intelligence Generative Content,人工智能生成内容)技术蓬勃发展的今天,教育领域正经历一场深刻的变革。DeepSeek作为一款由杭州深度求索人工智能基础技术研究有限公司倾力打造的大语言模型工具,正以其卓越的性能和广泛的应用前景,在编程教育领域大放异彩。 一、激发编程兴趣:从游戏开始 孩子的兴趣是学习的最好驱动力。DeepSeek能够生成一系列基于AI的互动编程游戏,这些游戏通过简单的拖拽式编程界面,让孩子在玩乐中学习编程基础。 示例游戏:制作一个简单的“躲避障碍”小游戏 // 使用Scratch风格的伪代码说明 when green

知网AIGC检测怎么过?2026最新降AI率全流程攻略

知网AIGC检测怎么过?2026最新降AI率全流程攻略

知网AIGC检测怎么过?2026最新降AI率全流程攻略 今年答辩季最让人头疼的事,不是论文写不出来,而是写出来过不了AIGC检测。 尤其是知网。 2026年知网的AIGC检测系统又升级了,身边好几个同学的论文,之前在其他平台检测AI率只有10%出头,结果到知网一测直接飙到40%以上。搞得整个宿舍楼都弥漫着一股焦虑的气息。 我自己也经历了这个过程,最后顺利过了检测。今天把整个流程整理出来,从理解检测原理到实际操作步骤,争取让你看完就知道该怎么做。 先搞懂:知网AIGC检测到底在查什么 很多人一听"AI检测"就慌,但其实搞明白它的检测逻辑之后,你会发现它并没有那么神秘。 知网的AIGC检测大致是从这几个维度来判断的: 语言模型的困惑度。 简单说就是,一段文字如果太"通顺"了,AI检测系统反而会觉得可疑。因为AI生成的文字有一个特点——它总是选择概率最高的下一个词。这就导致AI写的内容在语言模型看来"毫不意外",困惑度很低。而人写的东西偶尔会蹦出一些意想不到的表达,困惑度相对高一些。 文本的统计特征。 包括词汇丰富度、句子长度分布、段落结构等。AI生成的文字在这些统计指标

谈谈你对 AI Code Assistant(如 GitHub Copilot)的看法,它如何改变开发者的工作流?

AI Code Assistant深度剖析:从GitHub Copilot看开发者工作流的革命性变革 摘要/引言 开门见山:当AI成为你的编程搭档 想象一个场景:你正专注于解决一个复杂的业务逻辑问题,手指悬停在键盘上,准备编写一个数据处理函数。突然,IDE中弹出几行灰色的代码建议——正是你脑海中即将实现的逻辑,甚至连你没考虑到的边界条件处理都已包含在内。你轻轻按下Tab键,代码瞬间补全,仿佛有一位无形的搭档在你耳边低语:“这样实现如何?”。这不是科幻电影中的场景,而是 millions of 开发者正在经历的日常——AI Code Assistant(人工智能代码助手)已从概念走向现实,深刻重塑着软件开发的 landscape。 作为一名拥有10年+开发经验的工程师,我亲历了从"查手册编程"到"Stack Overflow复制粘贴"再到"AI协同编码"的三次范式转变。2021年GitHub