css题目

136 阅读3分钟

相邻的两个inline-block节点为什么会出现间隔,该如何解决?

元素被当成行内元素排版的时候,元素之间的空白符(空格、回车换行等)都会被浏览器处理,根据white-space的处理方式(默认是normal,合并多余空白),原来HTML代码中的回车换行被转成一个空白符,在字体不为0的情况下,空白符占据一定宽度,所以inline-block的元素之间就出现了空隙。

1.方法之移除空格

元素间留白间距出现的原因就是标签段之间的空格,因此,去掉HTML中的空格,自然间距就木有了。

image.png

image.png

image.png

2.使用margin负值

image.png

3.让闭合标签吃胶囊

image.png

image.png

4.使用font-size:0

image.png 这个方法,基本上可以解决大部分浏览器下inline-block元素之间的间距(IE7等浏览器有时候会有1像素的间距)。

5.使用letter-spacing

image.png 该方法可以搞定基本上所有浏览器。

CSS 垂直居中有哪些实现方式?

image.png

absolute + margin实现

方法一: image.png

方法二: image.png

absolute + calc 实现

image.png

absolute + transform 实现

image.png

转行内元素

image.png

flex

方法一: image.png
方法二: image.png

grid

方法一: image.png
方法二: image.png
方法三: image.png
方法四: image.png

怎么做移动端的样式适配?

px2rem-loader 插件

怎么实现样式隔离?

1.CSS modules

将 css 代码模块化,可以避免本模块样式被污染 依赖webpack css-loader,配置如下,现在webpack已经默认开启CSS modules功能了

image.png

image.png 这样,就产生了独一无二的class,解决了CSS模块化的问题

优缺点分析

优点

  • 能100%解决css无作用域样式污染问题

缺点

  • 代码可读性差,hash值不方便debug

2.CSS in JS

它的核心思想是把CSS直接写到各自组件中,也就是说用JS去写CSS

image.png CSS in JS虽然简单,但是通常会在运行时动态生成CSS,造成一定运行时开销

优点

  • 没有无作用域问题样式污染问题
  • 没有无用的CSS样式堆积问题 CSS-in-JS会把样式和组件绑定在一起,当这个组件要被删除掉的时候,直接把这些代码关联的css也直接删除掉就好了

缺点:

  • 代码可读性差 大多数CSS-in-JS实现会通过生成唯一的CSS选择器来达到CSS局部作用域的效果。这些自动生成的选择器会大大降低代码的可读性,给开发人员debug造成一定的影响

  • 运行时消耗 由于大多数的CSS-in-JS的库都是在动态生成CSS的。

3.预处理器

CSS 预处理器是一个能让你通过预处理器自己独有的语法的程序

市面上有很多CSS预处理器可供选择,且绝大多数CSS预处理器会增加一些原生CSS不具备的特性,例如

  • 代码混合
  • 嵌套选择器
  • 继承选择器

这些特性让CSS的结构更加具有可读性且易于维护

要使用CSS预处理器,你必须在web服务中安装CSS编译工具

我们常见的预处理器:

优缺点分析

优点:

  1. 利用嵌套
  2. 可读性好

缺点

  1. 需要借助相关的编译工具处理

预处理器是现代web开发中必备,结合BEM规范,利用预处理器,可以极大的提高开发效率,可读性,复用性

4.vue scoped

当 <style> 标签有 scoped 属性时,它的 CSS 只作用于当前组件中的元素

通过使用 PostCSS 来实现以下转换:

image.png 使用 scoped 后,父组件的样式将不会渗透到子组件中

5.BEM

BEM是一种css命名方法论,意思是块(Block)、元素(Element)、修饰符(Modifier)的简写

这种命名使得团队开发规范和方便维护

也就是模块名 + 元素名 + 修饰器名

.dropdown-menu__item--active

总结:

image.png