前端基础知识 —— CSS & HTML

温故而知新,进步一点点 ♥(✿ฺ´∀`✿ฺ)ノ~

css相关的问题,都是些基础知识,我们来复习下关于css的面试题

HTML

1、DOCTYPE

是 HTML5 中标准通用标记语言的文档类型声明,告诉浏览器的解析器用什么方式来加载识别文档

2、script 标签中 defer 和 async的区别

同:异步加载外部js
异:async 在 js加载完后立即执行,defer 在html文档解析完成后执行

3、块级元素、行内元素、行内块元素区别

  • 块级元素(block):可以设置宽、高、行高、内外边距,独占一行,不设置宽度默认为父元素宽度。
  • 行内元素(inline):无法设置高宽,对外边距(margin)和内边距(padding)仅设置左右方向有效 上下无效,不独占一行,不设置宽、高度时,宽、高度为内容的宽、高度。
  • 行内块级元素(inline-block):可以设置高、行高、内外边距,宽度默认为内容本身宽度,不独占一行,元素之间会有空白缝隙,设置它上一级的 font-size 为 0,才会消除间隙;

4、常用 mate 标签有哪些

5、HTML5

新增特性

  • 新增语义化标签,head、footer、nav、main、section等
  • 新增canvas画布、websocket通信、拖拽等
  • 新增本地存储 localStorage、sessionStorage
    对语义化的理解
  • 提高代码可读性,可清晰看出代码结构,有利于开发维护。
  • 方便爬虫识别内容

6、查找、创建、添加、删除、移动、复制 节点

  • 查找:
    • document.getElementById()
    • document.getElementsByClassName()
    • document.getElementsByTagName()
    • document.querySelector()
    • document.querySelectorAll()
  • 创建:
    • document.createElement()
  • 添加:
    • document.appendChild()
  • 删除
    • document.removeChild()
  • 移动
    • doucument.appendChild()
  • 复制
    • dom.cloneNode(true)

CSS

1、DOM

DOM(Document – Object – Model)文档对象模型,树形结构。提供大量api来实现对html节点增、删、改、查等。

2、BOM

BOM(Browser – Object – Model)浏览器对象模型。提供浏览器交互的一系列方法和接口。

3、CSS3

  • 新增特性
    • border-radius、text-shadow、box-shadow…
    • transform、transition、gradient、animation…
  • 选择器 & 权重
    • !important(1000)
    • 内联样式
    • id选择器(100)
    • 类选择器、伪类选择器(div::last-child)、属性选择器(div[ class = ‘foo’ ])(10)
    • 标签选择器、伪元素选择器(div:after)(1)
    • 关系选择器(兄弟选择器 + 、子选择器 > 、后代选择器 )、通配符选择器 (0)
  • 可继承属性 和 不可继承属性
    • 可继承
      • font-weight
      • font-size
      • font-family
      • color
      • line-height
      • cursor
    • 不可继承
      • width、height、margin、padding、border
      • display
      • position
      • background
      • overflow
  • 盒模型
    • 怪异盒模型(box-sizing:border-box):
      • width = 内容的 宽 + 左&右 padding + 左&右 border
      • height = 内容的 高 + 上&下 padding + 上&下 border
    • 标准盒模型(box-sizing:content-box)
      • width = 内容的 宽
      • height = 内容的 高
  • 常见 单位
    • px:固定像素单位
    • 百分比%
    • em、rem :em相对于父元素,rem相对于根html元素font-size
    • vw、vh : 视口宽、高

3、事件捕获 和 事件冒泡 — 事件委托

事件流:从页面中接收事件的顺序就叫事件流。分为三个阶段:捕获阶段、目标阶段、冒泡阶段。
事件捕获:从window顶层逐级向内执行的过程。
事件冒泡:从目标元素逐级向外触发的过程。

  • stopPropagation() 阻止事件冒泡
  • preventDefault() 阻止默认事件

利用事件冒泡并结合事件捕获,可以使用事件委托,实现对内部元素事件的统一监听

  • currentTarget:事件目标元素。
  • current:事件流中的元素。

addEventListener的第三个参数

element.addEventListener(event, function, useCapture);

  • 默认为 false (冒泡)

      { 
          capture: Boolean, 
              //事件捕获阶段传播触发
          once: Boolean, 
              // 只调用一次,如果是`true`会在其被调用之后自动移除 
          passive: Boolean, 
              // 永远不会调用`preventDefault()`。如果`listener`仍然调用了这个函数,客户端将会忽略它并抛出一个控制台警告 
      }
    

4、flex 布局

相关概念:弹性盒模型、主轴和交叉轴。

容器 属性

flex-direction

设置主轴的方向

  • row(默认)
  • row-reverse
  • column
  • column-reverse

flex-wrap

设置是否可以换行

  • nowrap(默认) 不会换行,宽度被压缩
  • wrap 会换行
  • wrap-reverse 会换行,且交叉轴元素排布 变为从下向上

justify-content

项目在主轴上的对齐方式

  • flex-start
  • flex-end
  • center
  • space-around
  • space-between
    – 项目每一行首尾元素距容器边缘距离 是 元素间距一半,来分配剩余空间。
  • space-evenly
    – 项目每一行首尾元素距容器边缘距离 与 元素间距相等,来分配剩余空间。

align-items

项目在交叉轴上的对齐方式

  • flex-start
  • flex-end
  • center
  • baseline 各个项目第一行文字基线对齐
  • stretch 项目高度未定时会填满

align-content

定义了 多根轴线 在 交叉轴上的对齐方式

  • flex-start
  • flex-end
  • center
  • space-around
  • space-between
  • stretch

项目 属性

flex-grow

项目放大的比例

flex-shrink

flex-wrap:nowrap 时项目缩小的比例

flex-basis

项目在主轴上初始所占宽度

align-self
  • flex-start
  • flex-end
  • center
  • baseline
  • stretch
order

每个元素排序,数值越小越靠前

注意

项目在主轴上初始所占宽度

  • flex:1 -> flex: 1 1 0%
    (可扩大 可缩小 元素宽度可在缩小过程中挤压)
  • flex:auto -> flex: 1 1 auto
    (可扩大 可缩小 元素宽度在缩小时候不得小于自身宽度)
  • flex:0 -> flex: 0 1 0%
    (不可扩大 可缩小 元素宽度可在缩小过程中挤压)
  • flex:none -> flex: 0 0 auto
    (不可扩大 不可缩小 元素宽度在缩小时候不得小于自身宽度)

5、BFC

(Block Formatting Contexts):块级格式化上下文,是一块独立且隔离的渲染区域

如何触发块级格式化上下文

  • body根元素
  • 浮动元素 float除了none以外的值 (left、right)
  • 绝对定位元素 position (absolute、fixed)
  • display 为 flex、inline-block、table-cell
  • overflow 除了 visibility 之外的(hidden、auto、scroll)

可以解决什么问题

  • 两个元素 外边距margin重叠问题
  • 子元素浮动造成的父元素高度坍塌问题等(浮动清除)

6、如何CSS实现三角形、扇形

  • 三角形 (利用 border 属性 和 transparent 实现)
    • 上三角:
       div {
              width:0; 
              height:0;
              border:100px solid;
              border-color:transparent transparent red transparent;
           }
      
    • 下三角:
      div {
               width: 0;
               height: 0;
               border: 100px solid; 
               border-color:red transparent transparent  transparent;
          }  
      
    • 左三角:
      div {
              width: 0; 
              height: 0; 
              border: 100px solid; 
              border-color: transparent red transparent  transparent;
          } 
      
    • 右三角:
      div {
               width: 0; 
               height: 0;
               border: 100px solid; 
               border-color: transparent transparent transparent red;
          }
      
  • 扇形
    • 利用 border 属性 和 transparent 实现
    • transform:rotate(deg);
  • loading效果

7、transform、transition、animation什么区别

transform : 形变 - 元素复杂的变化参数

transition : 属性 - 一过性

animation : 动画 - 关键帧、往复性

  • transform 形变

    • transform-origin (移动原点)
    • translate (移动)
      • translate(x,y)
      • translate3d(x,y,z)
      • translateX() 沿元素自身的x轴移动元素。
      • translateY() 沿元素自身的y轴移动元素。
      • translateZ() 沿元素自身的z轴移动元素。
    • scale (缩放)
      • scale(x,y)
      • scale3d(x,y,z)
      • scaleX()
      • scaleY()
      • scaleZ()
    • rotate (旋转)
      • rotate(deg)
      • rotate3d(x,y,z,deg)
      • rotateX(deg)
      • rotateY(deg)
      • rotateZ(deg)
    • skew (倾斜)
      • skew()
      • skewX()
      • skewY()
  • transition: property duration timing-function delay;

    • transition-property ( all 、name或者某个属性 )
    • transition-duration ( 完成过渡耗时 )
    • transition-timing-function ( 规定速度效果的速度曲线 )
    • transition-delay ( 过渡效果何时开始 )
  • animation: nane duration timing-function delay iteration-count direction fill-mode;

    • name 调用@keyframes定义好的动画
    • animation-duration 播放动画所需时间
    • timing-function 过渡动画类型(ease、ease-in-out)
    • delay 执行之前等待时间
    • iteration-count 执行播放次数(可无限次)
    • direction 动画播放方向 normal、reverse、alternate
    • play-state 动画的播放状态(running、paused)
    • fill-mode 结束时的状态(none 回到没开始的状态、forwards 回到第一帧的状态、backwords 回到第一帧的状态)

8、常用两栏、三栏布局

两栏布局

  • 定宽部分 float浮动 && 自适应部分 margin 撑开 && 父元素 触发BFC防止元素飞出
  • 父元素 display:flex; && 定款部分 width 固定 && 自适应部分 flex:1;

三栏布局

  • float + margin 方案:左(float:left;width:l;) && 右(float:right;width:r;) && 中(margin:0 r/2 0 l/2;)
  • flex 方案: 父(display:flex;) && 中 (flex:1;) && 左(width:l;) && 右(width:r;)
  • 定位方案:父(position:relative;)左position:absolute;

9、水平垂直居中的方案

子元素宽度、高度已知:

  • text-align:center + margin-top:-(height/2)

子元素宽度、高度未知:

  • text-align:center + transform:translate(-50%,-50%)
  • position:absolute + left、right、top、bottom:0
  • display:flex + justify-content : center; align-items : center;

原文链接:https://juejin.cn/post/7355677638881394723 作者:Ariel_jhy

(0)
上一篇 2024年4月10日 上午10:53
下一篇 2024年4月10日 上午11:03

相关推荐

发表回复

登录后才能评论