关于前端面试的一些基础问题的总结(一)

136 阅读8分钟

前端小菜鸟一枚,打算往前走走。如果有不对的地方,还望大佬们帮忙订正。有不足的地方欢迎补充,三克油!!!!

------------------------------废话不多说----------------------------------------------------


布局:左右定宽,中间自适应

浮动:middle放在最后才行,因为要占用文档流,当宽度小于左右定宽的宽度的时候,右侧会被挤到下一行,同时中间给margin两侧的内容挤过来

绝对定位的方式:跟浮动类似,也需要将两侧挤过来,这时使用基本的左中右布局就行了

关于grid布局(网格布局) display: grid; 代表当前盒子内的元素采用栅格布局 grid-template-columns 属性, grid-template-rows 属性 容器指定了网格布局以后,接着就要划分行和列。grid-template-columns属性定义每一列的列宽,grid-template-rows属性定义每一行的行高。 可用具体像素赋值,也可以用百分比 grid-row-gap属性设置行与行的间隔(行间距),grid-column-gap属性设置列与列的间隔(列间距)。 .container { grid-row-gap: 20px; grid-column-gap: 20px;} grid-gap属性是grid-column-gap和grid-row-gap的合并简写形式,语法如下。 .container { grid-gap: 20px 20px;}

布局总结(高度已知,两边定宽,中间自适应)

1.每种布局方案的优缺点

浮动:应为会脱离文档流,所以布局上容易出现问题,但解决了这个问题后,兼容性还是比较好的 左侧的元素浮动,右侧元素内的内容会紧贴着浮动的元素布局,当内容的高度超出左侧浮动的高度的时候,就会绕过浮动的盒子,直接贴着最左i按布局(文本内容会这样显示,但是盒子会直接跑到浮动的盒子的下面,所以要给中间的盒子设置margin值将左右内容撑过来)

定位:这种方式比较快捷,实现起来不容易处问题,但这味着下面的所有子元素也会脱离文档流,这就导致了这种方法的有效性和可使用性是比较差的。(要给最外侧的盒子设置padding的左右值,不然中间盒子的内容会被定位的盒子隐藏,不要给最外层的盒子何止width:100%,这样再设置padding的时候会将右侧的盒子给挤出去)

Flex:这种布局就是为了解决上述布局的不足而产生的,相对比较完美(缺点ie8一下不兼容) 表格:适应性比较好。但操作繁琐,对seo不够友好,当一个单元格的高度超出的时候,其它单元格也会跟着超出

Grid:使得排版更加的规整,可维护性高,实现起来比较方便 兼容西会差一些

2.如果将高度去掉,这几种方案那些就不适用了 在高度未知的时候,只有flex和table方式是可用的,由内容撑开,其它的就不行了 浮动,定位,网格,他们之间是独立的部分,并不会随着其它的改变

3.真正到业务中去用,哪个最实用

上下高度固定,中间自适应的布局

1.用绝对定位的方式,给中间的元素设置top值,bottom值来确定他的位置,预留出顶部的高度(最外层的盒子要有高度才行)

2.使用flex的方式实现 给父盒子设置flex,并且flex-direction: column;然后上下的直接定高,中间flex:1;就行了

3 使用grid布局 父盒子使用display:grid; grid-template-rows: 200px auto 200px; grid-template-column: 100%;

4.使用表格的方式 使用table布局,一定要套一个空div,要不然整个页面都是空白的


关于css的盒子模型


1.基本概念

标准盒子模型


盒子的宽度就是内容的宽度,盒子的高度就是内容的高度(不包括border,和padding值)

ie的盒子模型


盒子的宽度是内容的宽度是内容的宽度加上padding和border,盒子的高度是内容的高度加上padding和border

2.标准盒子模型和ie盒子模型的区别 宽高值所包含的内容是有区别的

3.css如何设置这两种盒子模型

box-sizing: border-box; (ie盒模型)

box-sizing: content-box;(标准盒模型)

4.js如何设置获取盒子模型的对应的宽和高

通过dom.style.width/height(z这种方式只是可以去除在行内写的样式)

通过dom.currentStyle.width/height(这种方式可以获取,但是只有ie支持)

通过window.getComputedStyle(dom).width/height的方式来获取,这种方式的兼容性更好 通过dom.getBoundingClientRect().width/height(这个aip可以拿到当前元素在视口中绝对位置(left,right),以它的宽高)

5.实例题(根绝盒子模型解释边距重叠)

计算父元素的高度是多少


高度此时为100,如果设置了overflow:hidden;触发bfc(块级格式化上下文,此时就为110了),子元素设置margin-top的时候,会发生外边距塌陷的问题

6.bfc(边距重叠解决方案)

bfc:解决边距重叠的问题 基本概念:块级格式化上下文

BFC的原理(渲染规则):

1.内部的Box会在垂直方向,一个接一个地放置。

2.Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠

3.每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。

4.BFC的区域不会与float box重叠。(清除浮动)

5.BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。

6.计算bfc高度的时候,浮动元素也会参与计算

创建bfc的方式:

1根元素,即HTML元素

2float的值不为none

3overflow的值不为visible

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

5position的值为absolute或fixed

bfc的使用场景:

1可以通过bfc解决外边距重合的问题(给下面的元素添加父元素,将父元素触发bfc,此时元素的外边距就不会再发生重叠)

2布局时的应用,当左边宽度固定,右边自适应的时候,当有边元素的高度超出左边的浮动元素的时候,此时右边盒子的内容会往左侵入,此时给右边的元素触发bfc(bfc的元素不会与浮动的元素重合)

3清除浮动时用,当父元素内的子元素浮动时,此时父元素是不会被子元素撑开的,此时将父元素触发bfc,这是子元素就可以将父盒子撑开了(父元素触发bfc时,浮动的子元素参与计算高度)

关于dom事件



Dom3是在原有的基础上增加了很多的事件类型,比如键盘事件

false:冒泡阶段, true:捕获阶段


dom的事件流

浏览器是怎么与用户做交互

比如鼠标点击是怎么传到页面上的


1捕获阶段(捕获的过程)

2目标阶段(通过捕获到目标对象到达目标阶段)

3冒泡阶段(从目标元素上传到window对像 )

描述dom事件捕获的具体流程

获取html:document.documentElement

获取body:document.body

body下就是具体的页面结构,然后直到目标元素

冒泡的过程刚好与之相反


event对象的常见应用

关于键盘值的获取:event.keyCode、event.charCode和event.which。



Event.preventDefault():阻止事件的默认行为(比如给a标签绑定事件,此时会阻止a标签的跳转,而去执行事件)

Event.stopPropagation():阻止冒泡的行为,当不需要冒泡事件的时候 Event.stopImmediatePropagation():如果给某个元素同时绑定了a,b两个事件,为了区分优先级(执行了a,不执行b了),此时我在a的事件里加上这段代码,此时b的执行就会被阻止 Event.target当前触发事件的事件对象(被点击的那个对象)

Event.currentTarget:当前绑定事件的那个对象 比如需要你给n个元素绑定事件的时候,此时你不想循环绑定,那么你可以用事件代理或者说叫做事件委托的方式来实现,通过给外层父元素绑定事件,当时间被触发的时候,判断事件源,来空值事件所需参数的取值

dom的自定义事件或者说模拟事件


通过new event的方式定义事件,然后给dom元素绑定事件,在需要执行的地方,通过dispatchEvent(),将自己定义的事件执行 customEvent在event的基础上还可以传入参数,除了定义事件名称外,还可以传入事件可用的参数 ------------------------------------------------------这次先到这,改天继续------------------------------------------