2024前端面试真题【CSS篇】

盒子模型

盒子模型box-sizing,描述了文档中的元素如何生成矩形盒子,并通过这些盒子的布局来组织和设计网页。包含contentpaddingmarginborder四个部分。

分类

  • W3C盒子模型content-box):标准盒子模型,Width = width
  • IE盒子模型border-box):Width = width + padding + border

BFC

BFC:块级上格式下文,是一块具有自己渲染规则的渲染区域。
渲染规则:

  • 内部盒子垂直向上一个接一个堆叠
  • 同一个BFC的两个相邻盒子的margin重叠
  • BFC的区域不会与float元素区域重叠
  • 计算BFC的高度时,浮动子元素也参与计算
  • 每个元素的左外边距与包含块的左边界相接触;
    -BFC就是一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然。

BFC的触发条件

触发BFC的条件包含但不局限于:

  • 根元素
  • 浮动元素:leftright
  • overflow的值除了visible
  • display的值为inline-flex-等;
  • position的值为absolutefixed

BFC应用场景

  1. 防止margin塌陷
  2. 清除内部浮动
  3. 自适应多栏布局

响应式设计

特点

  • 同时适配PC + 平板 + 手机等;
  • 根据视口调整模块大小和位置

实现方式

响应式设计的基本原理是通过媒体查询检测不同的设备屏幕尺寸做处理。为了处理移动端,页面头部必须有meta声明viewport

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"></meta>

实现方式:

  • 媒体查询:@media screen and (max-width: 1920px) {...}
  • 百分比:height、width属性的百分比依托父元素的宽高,但是其它属性不完全依赖;
  • vw/vh:相对于视图窗口的宽高;
  • rem:相对于根元素htmlfont-size属性,默认情况下浏览器大小为16px,此时,1rem = 16px

元素的水平垂直居中方法

实现方式:

  1. 定位 + margin: auto
  2. 定位 + margin: 负值
  3. 定位 + transform
  4. table布局
  5. flex布局
  6. grid布局:网格布局

多栏布局、剩余宽度自适应

两栏布局

两栏布局一般是一个定宽栏和一个自适应的栏并排展示存在。
实现思路:

  • float左浮左边栏
  • 右边模块使用margin-left撑出内容块做内容展示
  • 为父级元素添加BFC,防止下方元素飞向上
.box {overflow: hidden;
}
.left {width: 200px;flot: left;height: 100%;
}
.right {margin-left: 200px;height: 100%;
}

三栏布局

实现思路:

  • 两边固定宽度、float,中间使用margin
  • 两边定宽、使用absolute,中间使用margin
  • 两边使用float和负margin
  • flex实现

弹性布局

  • flex-direction
  • flex-wrap
  • flex-flow: flex-direction flex-wrap;
  • justify-content
  • align-items:定义项目在交叉轴上如何对齐
  • align-content:定义多根轴线的对齐方式。
  • order:项目的排列顺序,数值越小,排列越靠前,默认为0
  • flex-grow:定义项目的放大比例,默认为0,即存在剩余空间也不放大;
  • flex-shrink:定义项目的缩放比例
  • flex-basis:设置元素在主轴上的初始尺寸,默认为内容决定;
  • align-self:单个项目的对齐方式

CSS选择器

分类:

  • id选择器
  • 类选择器
  • 标签选择器
  • 后代选择器(div p
  • 子选择器(div > p
  • 相邻同胞选择器(div + p
  • 群组选择器(div, p)
  • 伪类选择器:(first-child:nth-child()等)
  • 属性选择器([attribute~=value]等)
  • 层次选择器(p~ul:选择前面有p元素的每个ul)

实现单行/多行文本溢出的省略样式

  1. 单行文本溢出省略
<style>
.text-ellipsis {overflow: hidden;line-height: 40px;height: 40px;width: 100%;text-overflow: ellipsis;white-space: nowrap; /*文本不换行*/
}
</style>
  1. 多行文本溢出省略
  • 基于高度截断:伪元素+定位
<style>
.text-ellipsis1 {position: relative;line-height: 20px;height: 40px;overflow: hidden;word-break: break-all;
}
.text-ellipsis1:after {content: '...';position: absolute;bottom: 0px;right: 0px;padding: 0 20px 0 10px;
}
</style>
  • 基于行数截断(-webkit-box-clamp):
<style>
.text-ellipsis2 {width:100%;display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 2;overflow: hidden;text-overflow: ellipsis;
}
</style>

CSS 实现一个三角形

<style>
.border {width: 0;height: 0;border-style: solid;border-width: 0 50px 50px;border-color: transparent transparent #ff0000;
}
</style>

CSS3 动画

  • transition实现渐变动画:transition: all 2s ease-in 500ms;
  • transform转变动画:scaletranslaterotateskew
  • animation实现自定义动画:通过@keyframes来定义关键帧
<style>
@keyframes rotate {from {transform: rotate(0deg)}to {transform: rotate(180deg)}
}
div {animation: rotate 2s;
}
</style>

CSS的设备像素、css像素、设备独立像素、dpr、ppi

css像素

css像素px为后缀,是一个长度单位,是一种相对单位,相对的是设备像素。
一般情况,页面缩放比为1,1个css像素 = 1个设备独立像素。
px会受到下面的因素的影响而变化:

  • 每英寸像素(PPI)
  • 设备像素比(DPR)

设备像素

设备像素,又称为物理像素。指设备能控制显示的最小物理单位。固定不变,单位为pt

设备独立像素

设备独立像素,与设备无关的逻辑像素,代表可以通过程序控制使用的虚拟像素,是一个总体概念
一个设备独立像素里可能包含一个或者多个物理像素点,包含的越多则屏幕看起来越清晰。
至于1个虚拟像素被换算成几个物理像素,这个数值就成为设备像素比(DPR)

设备像素比(DPR)

DPR = 设备像素 / 设备独立像素,在window中通过window.devicePixelRatio获取。

总结

  • 无缩放情况下,1个css像素 = 1个设备独立像素;
  • 设备像素由屏幕生成之后确定,不变;
  • PC中,1个设备独立像素 = 1个设备像素(未缩放情况下);
  • 移动端中,标准屏幕(160ppi)下,1个设备独立像素 = 1个设备像素;
  • 设备像素比(dpr) = 设备像素 / 设备独立像素;
  • 每英寸像素(ppi),值越大越清晰

px、em、rem、vh、vw

  • px:绝对单位,大小与元素的其它属性无关;

  • em:相对长度单位,相对于当前对象内文本的字体尺寸,特点

    • em的值不固定;
    • em会继承父级元素的字体大小;
    • em是相对单位,相对于当前对象内文本的字体尺寸;
    • 任意浏览器的默认字体高都是16px(1em = 16px);
    • 为了简化font-size的计算,我们只需要配置body的font-size: 62.5%;即可,此时:1em = 10px
  • rem:相对单位,相对HTML根元素的font-size的值。

Chrome支持12px

解决方案:

  • zoom: 0.8;
  • -webkit-transform: scale()
  • -webkit-text-size-adjust: none;

回流和重绘

回流:布局引擎根据各种样式计算每个盒子在页面上的大小和位置;在页面初始渲染阶段,会留不可避免的会触发。
重绘:当计算好盒模型的位置、大小和其它属性后,浏览器会根据每个盒子的特性进行绘制。

触发回流一定会触发重绘。回流的阶段主要是计算节点的位置和集合信息,当页面布局或者几何信息发生变化,则需要回流。重绘的阶段主要是做样式修改渲染。

如何减少回流

  • 样式组合
  • 避免内联样式使用
  • 复杂的动画应尽可能脱离文档流;
  • 使用css3硬件加速,transform等动画不会引起回流重绘;
  • 等;

css预编译语言

css提高性能的方法有哪些?

  • 内联首屏关键css
  • 异步加载css
  • 资源压缩
  • 合理使用选择器
  • 不要使用@import:会影响浏览器的并行下载,是的页面夹杂延迟
  • 把小的icon图片转base64编码使用等

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【系统架构设计师】九、软件工程(面向对象方法|逆向工程)

目录 六、面向对象方法 6.1 基本概念 6.2 面向对象的分析 6.2.1 用例关系 6.2.2 类之间的关系 6.3 面向对象的设计 6.4 面向对象设计原则与设计模式 6.5 面向对象软件的测试 七、逆向工程 历年真题练习 六、面向对象方法 面向对象的分析方法 (Object-Oriented Analys…

python输出/sys/class/power_supply/BAT0/电池各项内容

读取 /sys/class/power_supply/BAT0/ 目录下的所有相关文件,并输出其内容: import os# 定义电池信息文件的路径 battery_path = "/sys/class/power_supply/BAT0/"# 读取文件内容的函数 def read_battery_info(file_name):try:with open(os.path.join(battery_path…

Mybatis-Plus中LambdaQueryWrapper

基本用法 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; // 假设有一个 User 实体类 LambdaQueryWrapper<User> queryWrapper new LambdaQueryWrapper<>(); // 添加查询条件 queryWrapper.eq(User::getName, "John&quo…

stm32出现hardfault-自动化分析map文件

可通过如下python脚本进行分析: import os import sys #在此输入HardFault_Handler时打印的PC指针 address 0x20006980 #以下代码不要要更改 def is_hex(data): try: int(data, 16) return True except ValueError: return False def find_line_number(map_file, addre…

Rust编程-I/O

文件读取: 依赖&#xff1a;标准库中use std::fs; 模块 读取文件&#xff1a;fs::read_to_string(filepath:string) -> Result<String> String是文件内容 下面代码来自《Rust权威指南》&#xff0c;主要作用是从文件中检索&#xff0c;并返回检索内容所在的行&#xf…

stm32使用双通道ADC读取

Driver_ADC.c 使用了DMA转换 #include "Driver_ADC.h"void Driver_ADC1_Init(void) {/* 1. 时钟配置 *//* 1.1 adc时钟 */RCC->APB2ENR | RCC_APB2ENR_ADC1EN;RCC->CFGR | RCC_CFGR_ADCPRE_1;RCC->CFGR & ~RCC_CFGR_ADCPRE_0;/* 1.2 gpio的时钟 */RCC…

【Linux网络】数据链路层【上】{初识数据链路层/以太网/路由表/MAC地址表/ARP表/NAT表}

文章目录 1.初识数据链路层2.认识以太网2.0前导知识以太网帧和MAC帧CMSA/CD以太网的最小帧长限制是64字节IP层和MAC层 2.1以太网帧格式 3.预备知识计算机网络通信以太网和wifi路由表/MAC地址表/ARP表/NAT表/ACL表 用于同一种数据链路节点的两个设备之间进行信息传递。 1.初识数…

Apache AGE 聚合函数

简介 一般来说&#xff0c;聚合函数 aggr(expr) 会处理每个聚合键在传入记录中找到的所有匹配行&#xff08;键使用等价性进行比较&#xff09;。 在常规聚合&#xff08;即形式为 aggr(expr) 的情况下&#xff09;&#xff0c;聚合值列表是候选值列表&#xff0c;其中所有空…

系统服务综合案例

系统服务综合案例 具体任务&#xff1a; 现有主机 node01和node02&#xff0c;完成如下需求: 1、在 node01 主机上提供 DNS 和 WEB 服务 2、dns 服务提供本实验所有主机名解析 3、web服务提供www.rhce.com 虚拟主机 4、该虚拟主机的documentroot目录在/nfs/rhce目录 5、该目录…

Clion 使用gdbserver调试FreeSWITCH源码

1.准备环境 window安装clion安装好gdb、ssh、已经编译好的freeswitch可执行文件的docker镜像2.配置clion Settings -> Tools ->SSH Configurations Settings-Build, Execution, Deployment-Toolchains(其实设不设置都行,用默认也行的) Settings-Build, Execution, Depl…

DockerCompose拉取DockerHub镜像,并部署OpenMetaData

参考博主&#xff1a;http://t.csdnimg.cn/i49ET 一、DockerCompose拉取DockerHub镜像 方法一&#xff08;不太行&#xff09;&#xff1a; 在daemon.json文件中添加一些国内还在服务的镜像站&#xff08;可能某些镜像会没有&#xff09; ([ -f /etc/docker/daemon.json ] ||…

人工智能大模型如何助力电商产品经理打造高效的商品工业属性画像

摘要 商品工业属性画像是电商产品经理在进行商品管理、推荐、搜索、广告等业务时的重要依据。通过对商品的工业属性&#xff08;如品类、品牌、规格、功能、风格等&#xff09;的准确识别和标注&#xff0c;可以提高商品的展示效果、匹配度、转化率和用户满意度。然而&#xf…

从概念到完成:Midjourney——设计思维与AI技术的完美结合

文章目录 本文来自 Python学研大本营 作者 学研君 去年 AI 爆火的时候&#xff0c;学研君也赶时髦用上了 Midjourney。平时用它生成图片&#xff0c;感觉生成的图片好看&#xff0c;比上网四处找图更省时省事&#xff0c;更合心意&#xff0c;还不用担心版权问题。 给大家看一下…

102.qt qml-最全Table交互之多列固定、行列拖拽、自定义委托、标题交互使用教程

自定义实现的Table控件&#xff0c;支持跨qt版本&#xff0c;兼容qt5,qt6&#xff01; 截图如下所示: 黑色风格如下所示&#xff1a; 视频演示入口&#xff1a;Qt QML QianWindowV2.5(新增曲线综合示例、QML最全Table交互示例、支持qt5/qt6)_哔哩哔哩_bilibili 1.示例页面入口…

整理:MySQL常见错误解决方法

一、无法连接到 localhost 上的 MySQL 服务器 (10061) 翻译&#xff1a; 无法连接到 localhost 上的 MySQL 服务器。 分析&#xff1a; 这表明 localhost 计算机是存在的&#xff0c;但在这台机器上没有运行 MySQL 服务。或者&#xff0c;机器负载过高未能响应请求也可能导致…

element form表单中密码框被自动赋值,并默认背景色为白色,手动输值后背景色才是自己配置的背景色,与表单的自动填充有关

事件背景&#xff1a; 一个表单&#xff0c;有两组需要输入密码的地方&#xff0c;两组都被填充用户名密码&#xff0c;其中一组是其他信息&#xff0c;不是用户名密码&#xff0c;也被填充了&#xff0c;且input背景色是白色&#xff0c;表单中的input已经手动配置为无背景色&…

snort入侵检测系统及CISCO ACL配置

Snort入侵检测系统 Snort是一个开源的网络入侵检测系统&#xff08;IDS&#xff09;和入侵防御系统&#xff08;IPS&#xff09;&#xff0c;由Martin Roesch在1998年开发。Snort能够实时分析和捕获网络数据包&#xff0c;检测网络攻击和入侵行为&#xff0c;并生成警报。以下…

缓冲区共享和同步dma_buf 之二

缓冲区共享和同步dma_buf 之二 数据结构dma_buf_syncdma_buf_export_sync_filedma_buf_import_sync_file APIs缓冲区与描述符dma_buf_exportdma_buf_fddma_buf_get链接缓冲区与设备驱动器缓冲区加锁与解锁分散列表与映射 数据结构 dma_buf_sync 与 CPU 访问同步。 struct dm…

【单片机毕业设计选题24061】-基于蓝牙的单片机通信系统

系统功能: 1、本系统硬件由两块STM32单片机&#xff0c;DHT11&#xff0c;光敏传感器&#xff0c;12864oled和HC-05蓝牙模块组成。 2、单片机1HC-05蓝牙模块做为主机&#xff0c;单片机2HC-05蓝牙模块做为从机。 3、单片机从机将采集到温湿度&#xff0c;光照强度等信息通过…

log4j2.xml 使用 application.yml 配置的属性

参考&#xff1a;https://www.jianshu.com/p/1f2427c87139 log4j2.xml 是不归 spring 管理的&#xff0c;所以也就没法读取到 application.yml 里面的配置了。 解决方式&#xff1a; 通过 spring 的 监听器(Listener)功能&#xff0c;将我们读取到的 application.yml 的日志路径…