面试前端知识-css篇

208 阅读6分钟

1. 块状布局,行内布局都有哪些元素

    块元素:
    块级元素会独占一行
    高度,行高,外边距和内边距都可以单独设置
    宽度默认是容器的100%
    可以容纳内联元素和其他的块级元素
    常见元素 div h1-h5 form p table
    
    行内元素
    和相邻的行内元素在一行上
    高度和宽度无效,但是水平方向上的paddingmargin可以设置,垂直方向上的无效
    默认的宽度就是它本身的宽度
    行内元素只能容纳纯文本或者是其他的行内元素(a标签除外)
    常见元素 span a img label
    
    内联元素
    就是同时具备内联元素、块状元素的特点 可以设置宽高 
    常见元素 button input
    

2. 常见的页面布局方式

    两栏布局(边栏定宽主栏自适应)
    三栏布局(两侧栏定宽主栏自适应)
    多列等高布局
    三行布局(头尾定高主栏自适应)
    https://juejin.cn/post/6844903574929932301

两栏布局:

image.png

image.png

image.png

image.png

image.png

总结布局的思路:

float + margin

flex布局

grid布局

table布局

绝对定位

3. BFC 概念: block formatting context块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box参与(在下面有解释), 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干

触发条件:

【1】根元素

【2】float的值不为none

【3】overflow的值不为visible

【4】display的值为inline-block、table-cell、table-caption

【5】position的值为absolute或fixed  

BFC的展示规则:

【1】bfc的盒子会在竖直方向一个一个的放置

【2】bfc的盒子之间的margin会发生重叠

【3】bfc盒子的高度计算会包含浮动元素

【4】bfc盒子是个独立的元素,不会受到浮动元素的影响

BFC的应用:

【1】两栏布局

【2】清除浮动

【3】防止被浮动元素覆盖

4. flex的常用语法

flex: 1的含义

flex-shrink: 1

flex-grow: 1

flex-basis: 1

  • flex-direction:决定主轴的方向(即项目的排列方向)

    • row(默认值):主轴为水平方向,起点在左端
    • row-reverse:主轴为水平方向,起点在右端
    • column:主轴为垂直方向,起点在上沿
    • column-reverse:主轴为垂直方向,起点在下沿
  • justify-content:定义了项目在主轴上的对齐方式

    • flex-start(默认值):左对齐
    • flex-end:右对齐
    • center: 居中
    • space-between:两端对齐,项目之间的间隔都相等
    • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍
  • align-items:定义项目在交叉轴上如何对齐

    • flex-start:交叉轴的起点对齐
    • flex-end:交叉轴的终点对齐
    • center:交叉轴的中点对齐
    • baseline: 项目的第一行文字的基线对齐
    • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度
  • flex-wrap:定义,如果一条轴线排不下,如何换行

    • nowrap(默认):不换行
    • wrap:换行,第一行在上方
    • wrap-reverse:换行,第一行在下方
  • align-self:允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch

    • 该属性可能取6个值,除了auto,其他都与align-items属性完全一致

5. 响应式布局的方案

  • 媒体查询

  • 百分比%

  • vw/vh

  • rem

    • media-query,根据不同屏幕宽度设置根元素font-size
    • js根据设计稿和屏幕宽度设置根元素font-size
  • 利用UI框架实现响应式布局(比如;elementUi的)

6. 盒模型

就是用来装页面上的元素的矩形区域。CSS盒子模型组成:外边距(margin)、边框(border)、内边距(padding)、内容(content)。CSS 中的盒子模型包括 IE 盒子模型和标准的 W3C 盒子模型。W3C模型中:CSS中的宽(width)=内容(content)的宽,CSS中的高(height)=内容(content)的高。IE模型中:CSS中的宽(width)= 内容(content)的宽 +(border + padding)* 2,CSS中的高(height)= 内容(content)的高 +(border + padding)* 2。

  • 1代 正常流(放置盒的格式化上下文)

    • 行为:依次排列,排不下了换行。

      • 当遇到块级盒:排入块级格式化上下文,没有块格式化上下文,则创建一个
      • 当遇到行内级盒或者文字:首先尝试排入行内级格式化上下文,如果排不下,那么创建一个行盒,先将行盒排版(行盒是块级,由一行中所有的内联元素所组成,所以到第一种情况),行盒会创建一个行内级格式化上下文。
      • 遇到float:把盒的顶部跟当前行内级上下文上边缘对齐,然后根据float的方向把盒的对应边缘对到块级格式化上下文的边缘,之后重排当前行盒。
    • 原理:块级格式化上下文(Block Formatting Contexts)和行内级格式化上下文(Inline Formatting Contexts)

      • BFC:块级排布,一个独立的布局环境,其中的元素布局是不受外界的影响

        • BFC布局规则

          • 内部的Box会在垂直方向,一个接一个地放置。
          • Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠。
          • 每个盒子(块盒与行盒)的margin box的左边,与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
          • BFC的区域不会与float box重叠。
          • BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
          • 计算BFC的高度时,浮动元素也参与计算。
        • 设置方法

          • 根元素(),这里就可以理解正常流的逻辑
          • float的值不是none
          • position 是 absolute 或者 fixed
          • display的值是inline-block、table-cell、flex、table-caption或者inline-flex
          • overflow 不是 visible
        • 应用

          • 避免外边距折叠
          • 清除浮动
          • 自适应两栏布局
      • IFC:行内排布,盒子在水平方向的 内外边距+边框 所占用的空间都会被考虑

  • 2代 flex(弹性布局)

    • FFC(自适应格式上下文)
  • 3代 grid

    • GFC(网格布局格式化上下文)
  • 3.5代 CSS Houdini

7.inline-height的继承问题

  • 写具体数值,如30px, 则继承该值
  • 写比例,如2/1.5,则继承该比例
  • 写百分比,如200%,则继承计算出来的值

8. 12px字体大小的问题

/* Chrome支持小于12px 的文字 */
.shrink {
    -webkit-transform: scale(0.8);
    -o-transform: scale(1);
    display: inilne-block;
}

9.margin负值问题

  • margin-left和margin-top负值,元素向左和向上移动
  • margin-right负值,右侧元素左移,自身不受影响
  • margin-bottom负值,下方元素上移,自身不受影响

10 优雅降级和渐进增强

  • 渐进增强:一开始就针对低版本浏览器进行构建页面,完成基本的功能,然后再针对高级浏览器进行效果、交互、追加功能达到更好的体验。
  • 优雅降级:一开始就构建站点的完整功能,然后针对浏览器测试和修复。比如一开始使用 CSS3 的特性构建了一个应用,然后逐步针对各大浏览器进行 hack 使其可以在低版本浏览器上正常浏览。