css前端面试题(三)

news2024/11/25 11:33:30

文章目录

    • 1、可继承属性和不可继承属性
      • 字体系列属性
      • 文本系列属性
      • 元素可见性
      • 列表布局属性
      • 光标属性
    • 2、link和@import的区别
    • 3、css优化
    • 4、 CSS预处理器/后处理器是什么?为什么要使用它们?
    • 5、单行、多行文本溢出隐藏
    • 6、实现一个扇形
    • 7、实现一个自适应的正方形
    • 8、为什么现在的设备分辨率差异很大,2.5k屏幕都已经出现,css中还在使用1px ?

1、可继承属性和不可继承属性

我的观点是记住可继承属性就好了,其它的都是不可继承属性,而且开发过程中,如果发现样式问题,而代码又没加这样的样式,则有可能是样式从父级那里继承过来的。

字体系列属性

font-family:字体系列
font-weight:字体的粗细
font-size:字体的大小
font-style:字体的风格

文本系列属性

text-indent:文本缩进
text-align:文本水平对齐
line-height:行高
word-spacing:单词之间的间距
letter-spacing:中文或者字母之间的间距
text-transform:控制文本大小写(就是uppercase、lowercase、capitalize这三个)
color:文本颜色

元素可见性

visibility:控制元素显示隐藏

列表布局属性

list-style:列表风格,包括list-style-type、list-style-image等

光标属性

cursor:光标显示为何种形态

2、link和@import的区别

引用外部css的方式通常就是这两种,

<style>
    @import url("./style.css");
</style>
	或者
<link rel="stylesheet" href="./style.css">

1、link是XHTML标签,除了加载CSS外,还可以定义RSS等其他事务;@import属于CSS范畴,只能加载CSS。link标签除了引用css文件外,还可以引用其它文件。
2、link引用CSS时,在页面载入时同时加载;@import需要页面网页完全载入以后加载。所以,如果遇到样式闪烁的问题,就用link标签引用css。
3、link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持。
4、可以通过JS操作DOM,插入link标签来改变样式;@import 肯定没办法通过js来添加。

3、css优化

选择器优化:

  1. 尽量避免使用 * {},很多项目中会为了解决浏览器兼容问题,将所有标签自带的margin和padding取消掉,然后就会写出如下的样式,*{}计算次数惊人,整个页面所有的dom都会被这个样式规则纳入计算。
* {
	margin: 0;
	padding: 0;
}
  1. 尽量少的去对标签进行选择,而是用class。这个很容易理解,使用class更容易维护,后继维护者更改标签后,可以不需要更改样式。

  2. 尽量少的去使用后代选择器 后代选择器会影响到某个dom节点之下所有的dom,即便某些dom不符合条件,但也会被这条规则遍历一次来判断是否符合条件。

  3. 熟练运用继承属性,可以减少css代码的编写。比如父dom的样式中已经有font-size或者line-height,子dom就不需要添加这些样式了,因为这些样式可以继承。

  4. 样式选择器嵌套不要超过三层!这很重要,浏览器渲染时是会遍历css树的,如果层级太深,性能将会受到影响。而且真没必要为了防止样式权重不够,通过嵌套来提高权重。

渲染性能优化:

  1. 属性值为0时,不加单位。

  2. 属性值为浮动小数0.xx,可以省略小数点之前的0。

  3. css雪碧图,同一页面相近部分的小图标,方便使用,减少页面的请求次数,但是同时图片本身会变大,使用时,优劣考虑清楚,再使用。

  4. 尽量减少页面重排、重绘。这个问题涉及的注意点很多,比如动画移动时,通过transform 来控制,而不是通过margin或者padding来控制。

  5. 正确使用display的属性,由于display的作用,某些样式组合会无效,徒增样式体积的同时也影响解析性能。比如 本来是inline的标签span,就不要设置为block,设置为inline-block。

让样式更优雅:

  1. 将具有相同属性的样式抽离出来,整合并通过class在页面中进行使用,提高css的可维护性。这个很有意思,其实就是样式的封装,比如我们希望所有的a标签有一个特别的样式,在main.css中加上
.custom-a {
	xxx
}

当a标签希望使用这个样式的时候,直接给a标签加上这个类名,够灵活,够节省。

  1. 样式与内容分离:将css代码定义到外部css中。这其实就是在强调不要使用内联样式,不便于维护和修改。

4、 CSS预处理器/后处理器是什么?为什么要使用它们?

我们常听说什么是css预处理器,但css后处理器是什么?
css 预处理器:less、sass
后处理器:postcss

现在的许多项目中,我们直接编写的样式代码一般都不是css,以less举例,它可以定义变量,选择器嵌套,混入复用,函数,循环等更自由的方式实现样式编码,这样能节省开发者的时间。

但最终,浏览器不认识less编写的代码,所以还要将less 转译为 css,这一部分的工作,一般交给其它工具来完成,比如webpack中的less-loader。

将less转为css后自然就能被浏览器识别,根直接写的css样式没啥区别,但也许你自己开发的浏览器显示没问题,但不能保证所有用户的浏览器都能正常显示,因为某些css语言针对不同的浏览器,不同的版本,存在兼容性的问题。

如果让人为来实现兼容大多数浏览器样式问题的工作,太痛苦,所以还需要postcss来进行再次编译。

postcss会为许多有兼容性问题的样式属性添加前缀,添加所有相同语义但写法不同的其它css样式语法,以确保不同的浏览器,总有一种写法能够匹配生效。并且越新的写法被放置在样式的最下面,这样一来新的浏览器将总是被最新的css语法匹配。

普通的前端开发者很难接触到postcss,一般在项目成立时,就已经设置好了,平时开发不会去重新配置,但你每一次编译,打包都会用上它,webpack中,它就是postcss-loader

扩展一下,我们已经知道了css大概经历的一个编译过程,所以,在webpack中,是先less-loader,后面才会有postcss-loader,所以postcss-loader总会写在less-loader的左边,因为webpack的loader执行规则是从下往上,从右至左的。

 {
   test: /\.less$/,
   use: ['style-loader', 'css-loader', 'postcss-loader', 'less-loader'],
 },

5、单行、多行文本溢出隐藏

这个可不是面试造航母,工作拧螺丝,确实经常用到,如果不想每次都要去查,最好记一下

单行文本溢出

overflow: hidden;            // 溢出隐藏
text-overflow: ellipsis;      // 溢出用省略号显示
white-space: nowrap;         // 规定段落中的文本不进行换行

多行文本溢出

overflow: hidden;            // 溢出隐藏
text-overflow: ellipsis;     // 溢出用省略号显示
display:-webkit-box;         // 作为弹性伸缩盒子模型显示。
-webkit-box-orient:vertical; // 设置伸缩盒子的子元素排列方式:从上到下垂直排列
-webkit-line-clamp:3;        // 显示的行数

6、实现一个扇形

实现扇形的方式和实现三角行的方式思路一致,只是将一个矩形变成椭圆形而已。

div {
    border: 100px solid transparent;
    width: 0;
    heigt: 0;
    // 没有这个border-radius就是一个三角形
    border-radius: 100px;
    border-top-color: red;
}

7、实现一个自适应的正方形

  1. 通过vw来实现
    有两个神奇的单位vw和vh,100vw就是浏览器可视化区域宽度的100%。
.square {
  width: 10vw;
  height: 10vw;
  background: red;
}
  1. 利用元素的margin/padding百分比是相对父元素width的性质来实现:
.square {
  width: 10%;
  padding-top: 10%;
  background: red;
}

8、为什么现在的设备分辨率差异很大,2.5k屏幕都已经出现,css中还在使用1px ?

这其实是在考查设备的物理像素和css中像素单位之间的关系。

window.devicePixelRatio = 设备的物理像素 / CSS像素。

正常的pc端这个值为1,以csdn我的博客首页为例

在这里插入图片描述
iPhone se 时devicePixelRatio 就为 2 了。
在这里插入图片描述
devicePixelRatio = 2 为例,css为1px时,在物理屏幕上就会渲染2个像素点,所以比例看起来就很合理。
物理分辨率越高,devicePixelRatio 的值就会越大,所以内容呈现将会更加清晰,iPhone 12 pro 时devicePixelRatio 就为 3 了。

在这里插入图片描述

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

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

相关文章

【Axure高保真原型】人物卡片多条件搜索案例

今天和大家分享人物卡片多条件搜索的原型模板&#xff0c;我们可以输入姓名或者选择部门、岗位来快速筛选出对应的人物信息卡片。那这个模板是用中继器制作的&#xff0c;所以使用也很方便&#xff0c;只需要在中继器表格导入图片和填写对应内容&#xff0c;即可自动生成交互效…

1600*A. LCM Challenge(数论 || 找规律)

解析&#xff1a; n<3&#xff0c;特判 n为奇数&#xff0c;则n、n-1、n-2必定互质&#xff0c;所以结果即为三者之和。 n为偶数&#xff0c; 不会严格证明原因&#xff0c;但是找找规律&#xff0c;是这样的...... #include<bits/stdc.h> using namespace std; #de…

ros----发布者和订阅者模型

话题模型&#xff1a; 如何自定义话题消息 1.定义msg文件 2.在package.xml中添加功能包依赖 <build_depend>message_generation</build_depend> <exec_depend>message_runtime</exec_depend>3.在CMakeList.txt文件中添加编译选项 4.编译生成语言的相…

网络工程师是干什么的?常见岗位有哪些?

网络工程师是做什么工作&#xff1f; 网络工程师能够从事计算机信息系统的设计、建设、运行和维护工作。一般来说&#xff0c;分硬件网络工程师和软件网络工程师两大类&#xff0c;硬件网络工程师以负责网络硬件等物理设备的维护和通信&#xff1b;软件网络工程师负责系统软件…

LeetCode(力扣)509. 斐波那契数Python

LeetCode509. 斐波那契数 题目链接代码 题目链接 https://leetcode.cn/problems/fibonacci-number/ 代码 class Solution:def fib(self, n: int) -> int:if n 0:return 0dp [0] * (n 1)dp[0] 0dp[1] 1for i in range(2, n 1):dp[i] dp[i - 1] dp[i - 2]return d…

IM即时通讯系统[SpringBoot+Netty]——梳理(总)

文章目录 一、为什么要自研一套即时通讯系统1、实现一个即时通讯系统有哪些方式1.1、使用开源产品做二次开发或直接使用1.2、使用付费的云服务商1.3、自研 2、如何自研一套即时通讯系统2.1、早期即时通讯系统是如何实现2.2、一套即时通讯系统的基本组成2.3、当下的即时通讯系统…

【milkv】st7735驱动

前言 本文介绍milkv-duo加载st7735的lcd屏幕&#xff0c;以及屏幕显示log。 参考文章&#xff1a; 记录为Linux配置spi屏幕&#xff08;st7735s&#xff09; https://community.milkv.io/t/milk-v-duo-spi-st7789/131 一、电路图 1.1 pin设置 打开spi2的引脚 duo-buildroot…

@Transactional失效场景/原因

文章目录 1.Transactional注解在非public方法上2.Transactional使用propagation设置错误&#xff08;有3种会失效&#xff09;3.Transactional使用rollbackFor设置错误4.A方法没有使用Transactional调用了B&#xff08;有被注解&#xff09;方法5.try catch了异常6.数据库引擎不…

AI绘制流程图

1、工具&#xff1a; 使用https://chat.openai.com/c/45a81a53-cced-43f7-be3e-e5e80f1e994fFlowchart Maker & Online Diagram Software 2、使用plantuml的过程&#xff1a; 复制代码&#xff0c;打开diagram.net&#xff0c;点击加号→高级→ plantUML&#xff0c;替换掉…

已解决 Go Error: cannot use str (type string) as type int in assignment

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…

【openKylin】OpenKylin1.0 x86_64 VMWare安装手册

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的帮助&#x1f338;文…

华为云ROMA Connect亮相Gartner®全球应用创新及商业解决方案峰会,助力企业应用集成和数字化转型

9月13日-9月14日 Gartner全球应用创新及商业解决方案峰会在伦敦举行 本届峰会以“重塑软件交付&#xff0c;驱动业务价值”为主题&#xff0c;全球1000多位业内专家交流最新的企业应用、软件工程、解决方案架构、集成与自动化、API等企业IT战略和新兴技术热门话题。 9月13日…

【结构体类型——详细讲解】

结构体 1.结构体类型声明 1.1结构体的概念 结构体是⼀些值的集合&#xff0c;这些值称为成员变量。结构体的每个成员可以是不同类型的变量。 1.2 结构的声明 struct tag { member-list; }variable-list;例如描述⼀个学⽣&#xff1a; struct Stu { char name[20]; //名字 i…

337.打家劫舍III

337. 打家劫舍 III - 力扣&#xff08;LeetCode&#xff09; 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为 root 。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“房子与之相连。一番侦察之后&#xff0c;聪明的小偷意识到“这个…

SpringSecurity 入门

文章目录 Spring Security概念快速入门案例环境准备Spring配置文件SpringMVC配置文件log4j配置文件web.xmlTomcat插件 整合SpringSecurity 认证操作自定义登录页面关闭CSRF拦截数据库认证加密认证状态记住我授权注解使用标签使用 Spring Security概念 Spring Security是Spring…

竞赛选题 基于深度学习的人脸性别年龄识别 - 图像识别 opencv

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 毕业设计…

常见七大排序算法

目录 前言 冒泡排序 选择排序 插入排序 希尔排序&#xff08;shell&#xff09; 快速排序 归并排序 计数排序 前言 在前面我发布了常见的七大排序算法的相关博客&#xff0c;今天这一篇文章是做一个排序算法的小总结&#xff0c;把前面的博客集中分类到一起&#xff0c;…

公司组织架构图怎么制作?

组织架构图是什么&#xff1f; 组织架构图是一种图形化表示&#xff0c;用于呈现一个组织内部各部门、岗位以及人员之间的关系和层级结构。它是一种重要的工具&#xff0c;能够直观地展示组织的层次关系、职责分工以及管理体系&#xff0c;从而帮助人们更好地了解组织的运作…

MySQL入门指南:数据库操作的基础知识

当谈到关系型数据库管理系统(RDBMS)时&#xff0c;MySQL无疑是最常见和广泛使用的一个。它是一个强大的工具&#xff0c;用于存储、管理和检索数据。在这篇博客中&#xff0c;我们将介绍MySQL的基本知识&#xff0c;包括数据库的操作、数据表的操作以及数据的增删改查~~ 目录 …

JavaScript策略模式

JavaScript策略模式 1 什么是策略模式2 实现一个基础的策略模式3 Javascript中策略模式4 使用策略模式实现缓动动画5 使用策略模式实现表单校验 1 什么是策略模式 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一系列算法&#…