html与css部分基础

发布时间 2023-08-17 15:46:41作者: 丶乔

原生js篇

1.js组成

ECMAscript BOM DOM

2.js输出内容的方式

1.弹窗alert() 2.网页输出document.write() 3.控制台输出console.log

3.什么是变量

存储临时数据的容器

4.定义变量有几种方式,区别

var 有变量提升,可以重复赋值;

let 没有变量提升,有块级作用域,不可重复赋值;

const 定义的变量不可修改 ,有块级作用域, 定义时没有赋值也不能再次赋值

5.数据类型的分类

基本数据类型和引用数据类型

ES5中5基3引:基:Number String Boolean Undefined Null 引:obj function array    

ES6中6基1引:基:Number String Boolean Undefined Null Symbol :obj

6.数据类型的转换分类

强制转换和自动转换

7.哪几种数据类型转换为Boolean得到false

" 0 null undefined NaN 转换后得到false 其他得到true

8.查询数据类型的方式

typeof 查询体//查询基本数据类型 返回数据类型

查询体 instanceof 数据类型 //查询引用数据类型。查看查询体是否为该数据类型,是就返回true 不是返回false

9.转化为数字的方式

Number() parseInt() parseFloat()

10.取余的方式

例:5%2 得到1

11前置++和后置++的区别

前置++自身先自增1再参与运算 后置++先参与运算再自增1

12.比较运算符 = == ===的区别

一:表示赋值 二:只比较大小不比较数据类型 三:既比较大小也 比较数据类型

13举例判断a是否等于字符串123

if(a=="123"){}

14.比较运算符有哪些

== === >= <= != > <

15. 年月日分别用变量abc表示,用es6语法拼接

`${a}年${b}月${c}日`

16 +=是什么意思,举例说明

a+=b表示a=a+b

17. js中代码的执行顺序

从上到下,从左到右

18. if和switch的区别

if判断一个范围内或某个具体值

switch判断具体某个状态

19. while循环

while(条件){
	//执行代码块
}

20. 循环四要素

1.初始循环变量。2.循环条件。3.更新循环变量。4.循环体(重复执行的代码)

21.终止循环的方式

break;终止循环

continue; 终止本次循环,进入下一次循环

22.函数声明式和表达式的定义方式

1.声明式:function 函数名(){}

2.表达式:let 函数名=function(){}

区别:

 1).以函数声明的方法定义的函数,函数名是必须的,而函数表达式的函数名是可选的。如果函数表达式声明的函数有函数名,那么这个函数名就相当于这个函数的一个局部变量,只能在函数内部调用

  2).以函数声明的方法定义的函数,函数可以在函数声明之前调用,而函数表达式的函数只能在声明之后调用(函数声明整体会被提升到当前作用域的顶部,函数表达式也提升到顶部但是只有其变量名提升)

  3).以函数声明的方法定义的函数并不是真正的声明,它们仅仅可以出现在全局中,或者嵌套在其他的函数中,但是它们不能出现在循环,条件或者try/catch/finally中,而函数表达式可以在任何地方声明。换句话说,函数声明不是一个完整的语句,所以不能出现在if-else,for循环,finally,try catch语句以及with语句中。

22.函数声明式和表达式的区别

声明式:能再函数前后进行调用;

表达式:只能在函数后进行调用

23.函数返回值有什么作用

将函数的执行结果抛出函数体外,供其他程序使用

24.定义一个数组,并用for循环打印出每个元素

var arr=[1,3,4,5];
for(let i=0;i<arr.length;i++){
	console.log(arr[i])
}

25.创建数组的方式

1.new字符 let arr=new Array()

2.字面量 let arr=[]

26.foreach遍历数组的方法

数组.foreach(function(value,index){}) //value当次遍历的数组元素 index对应的索引

27.遍历二维数组的方法

双层for循环

28. 反转数组

arr.reverse()

29. 数组拼接为字符串的方法

arr.join('')

30. 修改数组元素 连接多个数组 返回数组元素 查找数组元素

arr.splice(开始索引,删除个数,添加的元素)

arr.slice(开始索引,结束索引) //第二个参数可选,截取数组元素,返回新数组,不会改变原数组

arr.concat(item) //在arr中添加了一个新元素item 并返回新数组,不会改变原数组

arr.indexOf(3) //查找数组中是否存在3,有就返回索引,没有返回-1;

arr.includes(3) //查找数组是否存在3,有就返回true,否则false---es7语法

31.数组排序的方法

数组.sort(function(a,b){
		return a-b;
})

32. 对象的分类

自定义对象,内置对象

33. 创建对象的方式

new字符:let obj=new Object()

字面量:let obj={}

34. 对象添加属性和方法的方式/删除属性的方法

1.通用方式:

对象名.属性名=属性值;
对象名.方法名=function(){}

2.字面量独有

let obj={
	属性名:属性值,
  方法名:function(){},
  方法名2:function(){}
}

3.删除属性的方法

delete 对象名.属性名

35.遍历对象的方法,举例说明ss

for(key in obj){
	key //键名
  obj[key]	//键名对应的值
}

36. 内置对象

string对象 Number对象 Math对象

37. 截取字符串的方法

str.substr(开始索引,截取的个数);

str.substring(开始索引,结束索引)

38.替换字符串的方法

str.replace(旧字符,新字符)

如果要替换所有某一个字符

例:将所有的a替换成z
let str="abcda";
str.replace(/a/g,"z")

39. 保留多少位小数的方法

变量.toFixed(多少位小数)

40. 获取82-130的随机整数怎么写

var num=Math.floor(Math.random()*(130-82+1))+82

41. 数学方法有哪几个

Math.ceil向上取整

Math.floor向下取整

Math.random()获取0-1的随机小数

42.如何创建时间对象

let date=new Date()

43 什么是递归

函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归函数必须有结束条件,要么return,要么继续。

44. Bom的顶层对象是什么

BOM顶层对象是window

DOM顶层对象是document

45. 弹窗三剑客是分别是什么

alert();//警告性弹窗

prompt();//提示性弹窗

confirm();//确认性弹窗

46.获取滚动条的距离

var y=document.documentElement.scrollTop //html文档卷起的距离,也就是滚动条距离

或者:window.scrollY // 返回当前文档垂直滚动的像素数,也是滚动条距离

//原生js获取元素距离文档顶部的距离

var y1=元素.getBoundingClientRect().top+document.documentElement.scrollTop

47. 间歇性计时函数和延时性计时函数的写法

setInterval(function(){},1000)

setTimeout(function(){},1000)

48. 在页面上输出当前倒计时还有30秒

let t=30;
let runtime=setInterval(function(){
	t--;
  document.write(`倒计时${t}秒`);
  if(t<=0){
  	clearInterval(runtime);
  }
},1000)

49.如何获取视窗宽高

var w=document.documentElement.clientHight

var h=document.documentElement.clientWidth

50.如何用location 跳转到指定路径

location.href="路径"

51.Dom全称

Document Object MOdel

52. 节点分类

文档节点,元素节点,文本节点,属性节点

53. 原生js通过name属性值获取元素

前提条件:input必须设置name值

document.getElementByName("name值")

54. H5提供的两种获取元素的方法

document.querySelector();

document.querySelectorAll();

55.如何查找父级 子级

子元素.parentNode //获取元素紧挨着的父级

父元素.children //数组形式返回所有子元素,不包括文本节点

父元素.childNodes //数组形式返回所有子元素,包括文本节点

56. 如何创建一个id为box的div并添加到文档中

let el=document.createElement("div");
el.id="box";
document.body.appendChild(el)

57. 替换节点

父节点.replaceChild(新节点,老节点);

58. 删除指定子节点的方法

父节点.removeChild(子节点) //如果想要删除所有子节点,需要获取所有,遍历删除

59. 事件四要素

1.事件源 2.事件类型 3.事件执行函数 4.事件对象

60 注册事件的方式有哪些

1.标签上注册;例:<div onclick=(function(){};)></div>

2.定义函数注册;例:元素.事件名=function(){};

3.监听事件添加; 例:元素.addEventListener("事件名",function(){})

61. 给元素添加文本的三种方式

元素.innerHTML(); 元素.innerText() ;元素.value();

62. 如何获取元素的样式

元素.style.样式名; //只能获取行内样式

63.三目运算简单理解

如果?那么:否则

64.获取事件源,事件类型

事件源:event.target

事件类型:event.type

65.如何阻止浏览器默认行为和冒泡事件

return false

event.preventDefault() //阻止浏览器默认行为

event.stopPropagation()//阻止冒泡事件

65.change事件(重重重)

输入改变事件。

input类型为checkbox时巨好用,点一下触发一次。vue渲染数据时能用上。

HTML+css篇

1.HTML是什么

超文本标记语音

2.动态网页和静态网页的区别

静态网页:代码和内容写好后,不会改变的网页

动态网页:代码和内容写好后,代码虽然不变,但是内容会随着时间,环境,数据库操作结果而改变的网页。

3.手写HTML基本机构

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>网页标题</title>
  <head>
  <body>
    内容
  <body>
</html>

    

4.css如何给文本添加删除线

text-decoration:line-through

5.块级元素和行内元素的区别

块级元素:独占一行,可以直接定义宽高,默认宽度为100%;通常用于网站中的结构,外层的盒子,大型的板块,楼层。

行内元素:多个元素可以放在同一行中,除非超宽自动换行,宽度为内容大小;通常用于组合一行文本的细节。

6.a标签有几种链接方式

3种,外部链接:当前网站跳转到其他网站

内部链接:当前网站,不同页面之间跳转

锚点链接:同一页面内部区间进行跳转。

7.给图片img添加提示文字的两种方式

<img src="" alt="加载失败时的提示文字" title="鼠标悬停时的提示文字">

8.如何重置列表标签的样式

list-style:none

9.form表单中get提交和post提交的区别

get提交:地址栏中带有参数,安全性相对较低,传输数据较小(128kb)

post提交:地址栏不带参数,安全性相对较高,传输数据大(2m)

10.什么是css

层叠样式表

11.css引入方式,常用的方式

内联(行内)样式/内部式/外链式

常用外链式

12.后代选择器有哪些

空格 >

13.选择器的优先级,权重数值

!important无限大>行内样式1000 >#id100>.class/伪类 10 >tag(标签)/伪元素1>继承(0)>默认(0)

14.用css子选择器找到table下面的td

table>tbody>tr>td

15.如何阻止form表单里button的提交

设置type属性type="button"

16.css如何在元素内容后面插入内容

选择器:after{} 必须和content连用

17.盒子模型的分类 分别怎么转换

标准盒子模型和怪异盒子模型

box-sizing:

content-box标准盒子模型

border-box怪异盒子模型

18.盒子绝对居中的方式

给盒子设置绝对定位,margin:auto ;四个方向分别设置为0;

19.给文本设置字间距

letter-spacing:length //字符,数字,英文,中文都可以使用

20.设置文本两端对齐

text-align:justify

21.超出文字以...代替的方法

overflow:hidden;//超出隐藏
white-space:nowrap;//不换行,强制在一行显示
text-overflow:ellipsis;//超出部分以...代替

22.精灵图的利弊

优势:1.减少请求数。2.提升网站性能。3.减少图片文件数量。

劣势:1.开发过程比较繁琐。2.需要计算测量每一个背景单元的精确位置,进行定位。3.后期新加或删除图标比较麻烦。

23.如何处理图片三像素问题

四种方法

1.父级设置字体大小为0。 font-size:0;

2.浮动

3.图片设置为块级元素,display:block

4.图片使用vertical-align:middle 图片中部对齐。

24.清除浮动的8种方法

面试题

(1)把父级高度写死;---一般不用。

(2)在浮动的元素后面加一个新的块级元素,css设置样式为clear:both; ---偶尔会用

缺点:多出来一个空的元素,影响美观,一般不用。

(3)父级设置属性overflow:hidden-----一般不用(有seo作弊嫌疑)

(4)父级中使用伪类:after

.clearfix:after{
    content:'';
    height:0;
    display:block;
    /*前三个属性:相当于创建一个块级元素*/
    clear:both;
  	zoom:1;/*IE6兼容写法*/
}

(5)父级div定义overflow:auto

必须定义width或zoom:1,同时不能定义height,使用overflow:auto时,浏览器会自动检查浮动区域的高度

(6)父级也一起浮动----不用。

(7)父级加属性display:table---不用

(8)浮动元素后面加br标签然后给br加属性clear:both----不用

25.margin塌陷解决方案

(1)为父盒子设置border,为外层添加border后父子盒子.就不是真正意义上的贴合  (可以设置成透明:border:1px solid transparent)。
(2)为父盒子添加overflow:hidden;
(3)为父盒子设定padding值;
(4)为父盒子添加position:fixed;
(5)为父盒子添加 display:table;//不要用这个
(6)利用伪元素给子元素的前面添加一个空元素

html-css-flex

1.获取data-id="值"和data-vice-id="值"

设置自定义属性值保存在标签上,有需要的时候可以通过js取出来

实用性很强

方法:

1.元素.getAttribute("data-id或者data-vice-id")

2.元素.dataset.id或者元素.dataset.viceId

3.jquery data()方法 元素.data("id或者vice-id")

4.jquery attr()方法 元素.attr("data-id"或者"data-vice-id")

2.本地存储

基于H5基础上的新特性----(重点知识,运用广泛)

方法:setItem getItem removeItem clear()

(1)临时存储(会话存储)sessionStorage //方法参照本地存储,这里不作解释

(2)永久储存(本地储存)localStorage

单数据存储:

localStorage.setItem("键名",值);//保存为一个对象的形式

localStorage.getItem("键名");//获取键名对应的数据

localStorage.removeItem("键名");//删出键名对应的数据

localStorage.clear();//清空全部本地存储

多数据存储----又分为数组形式和数组对象形式 ---方法和单数据相同,数据结构不同

JSON是js对象的字符串表示法,它使用文本表示一个js对象的信息,本质是一个字符串。

数组形式--例: var arr=["abc","def"]; localStorage.setItem("user",JSON.stringify(arr));//将数据转换成JSON字符串保存,才能保存原有的结构。 let arr1=JSON.parse(localStorage.getItem("user"));//获取的时候需要将JSON字符串转换成js对象(这里的对象指数组),还原其结构。 console.log(arr1[0]);//打印数组中索引为0的数据,也就是abc
数组对象形式--例: var arr=[{name:"张三",age:18},{name:"王五",age:20}]; localStotage.setItem("info",JSON.sttingify(arr));//存储 let arr1=JSON.parse(localStorage.getItem("info"));//获取 console.log(arr1[0].name);//打印得到数组arr1中索引为0的对象的name属性值,也就是张三

本地存储--断点添加数据(项目实际操作综合案例)

说明:先获取数据,判断是否为null。如果为null,定义新数组保存数据,否则用获取到的数组往里添加数据即可。

例:

//一进页面就获取本有的数据展示,只判断有数据的情况,没有数据不作操作。 //获取一堆元素 var titles = document.querySelectorAll(".title span"), list1 = document.querySelector(".list1"),//显示内容 list=document.querySelectorAll(".content>div"); endBtn = document.querySelector(".list2 button"),//提交按钮 inp = document.querySelector(".inp"),//输入内容 date = document.querySelector(".date");//选择的时间 //标题循环注册事件 for(let i=0;i<titles.length;i++){ titles[i].onclick=function(){ //循环删除类名 for(let a=0;a<titles.length;a++){ //删除标题类名 titles[a].classList.remove("active"); //隐藏对应的内容 list[a].style.display="none"; } this.classList.add("active"); //显示对应的内容,也可以data-id自定义索引来显示 list[i].style.display="block" } } //一进页面就调用数据显示在页面上 var data = localStorage.getItem("info"); if (data != null) { //数据转化为js对象 data = JSON.parse(data); var strs = '';//定义空字符来保存数据 //循环拼接 for (let i = 0; i < data.length; i++) { var listStr = `${data[i].text}&emsp;&emsp;&emsp;${data[i].time}`//内容和日期的拼接字符串 strs += `<div>${listStr}<button data-id="${i}">删除</button></div>`//相加 } list1.innerHTML = strs;//赋值给页面 } //提交按钮点击事件 endBtn.onclick = function () { //操作数据 //1.先获取本地存储看是否有数据,如果有就直接往里添加数据 2.如果没有就定义一个数组保存数据,添加到本地存储中. //获取输入的内容和选择的时间并创建对象保存 var textlist = inp.value;//内容 var timelist = date.value;//时间 var alltext = { text: textlist, time: timelist };//创建对象保存 var data = localStorage.getItem("info");//获取本地存储数据 if (data == null) { var arr = [];//定义一个空数组保存数据 arr.push(alltext);//将对象添加到数组中 localStorage.setItem("info", JSON.stringify(arr));//然后将数组添加到本地存储中 } else { //已经有数据 data = JSON.parse(data);//JSON字符串转化为js对象(数组) data.push(alltext);//将对象添加到数组中 localStorage.setItem("info", JSON.stringify(data));//然后将数组添加到本地存储中 } location.reload(); } //删除功能 var btns=document.querySelectorAll(".list1 button"); for(let j=0;j<btns.length;j++){ btns[j].onclick=function(){ console.log(333) this.parentNode.remove(); //获取本地存储数据并转化为js对象,按索引删除 var arr2=JSON.parse(localStorage.getItem("info")); arr2.splice(j,1); //重新添加到本地存储中 localStorage.setItem("info",JSON.stringify(arr2)); if(arr2.length==0){ localStorage.removeItem("info"); } location.reload();//删一次刷新一次页面 } }

3.H5布局标签

<header> //定义头部

<nav> //定义导航

<main> //定义主要内容

<section> //定义文档中的节

<article> //定义页面独立的内容区域

<aside> //定义侧边栏

<footer> //定义页脚

4.transition过渡动画

transition 只能添加在初始样式里。

transition:属性1 时间秒 动画特效 延时时间,属性2 时间秒 动画特效 延时时间;

transition:all 时间秒 动画特效 延时时间;//所有样式都参与动画。

动画特效:

linear 线性过渡。等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0)

ease 平滑过渡。等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0)

ease-in 由慢到快。等同于贝塞尔曲线(0.42, 0, 1.0, 1.0)

ease-out 由快到慢。等同于贝塞尔曲线(0, 0, 0.58, 1.0)

ease-in-out 由慢到快再到慢。等同于贝塞尔曲线(0.42, 0, 0.58, 1.0)

可参照网址http://cubic-bezier.com

5.css3变形

配上过渡动画transition 可实现动画时间的过渡和特效

2d变形 transform

transform 可以同时定义多个属性

//一次性定义平移100px 旋转1800度 缩小0.5倍 transform:translate(100px) rotate(1800deg) scale(0,5,0.5)

1)平移 translatex,y//只写一个值表示水平方向平移

2)缩放 scale(x,y)  //只写一个值,默认第二个值等于第一个

3)旋转 rotate(deg) //2d旋转,沿顺时针,和Z轴旋转类似

              rotateX(deg) //沿X3d旋转

              rotateY(deg) //沿Y3d旋转

              rotateZ(deg) //沿Z3d旋转

4)斜切skew(x,y) //只提供一个值,则第二个值默认为0

              skewX(deg) //水平方向上斜切

              skewY(deg) //竖直方向上斜切

6.css3自定义动画

animation-play-state: paused/running;控制动画是否运行 用js配合控制该属性值实现暂停和开始

transform-origin:x y; //定义动画中心点 比如旋转动画可以定义其旋转中心点

animation参数:

animation:1自定义动画名称 2执行时间 3特效 4延时时间 5执行次数(infinite无限循环或者直接给数值) 6是否反序播放(alternate 动画在奇数次(1、3、5...)正向播放,在偶数次(2、4、6...)反向播放) 7控制播放完成帧数(forwards 结束时应用该属性,就是保持结束时的状态);   

例:自定义动画 div{ animation:自定义动画名称1 执行时间 特效,自定义动画名称2 执行时间 特效; } @keyframes 自定义的动画名称1{ 0%{background:url(1)no-repeat;} 20%{background:url(2)no-repeat;} 50%{background:url(3)no-repeat;} 75%{background:url(4)no-repeat;} 100%{background:url(5)no-repeat;} } @keyframes 自定义动画名称2{ 0%{transform:translateX(0) rotateY(0)} 49.999%{transform:translateX(800px) rotateY(0)} 50%{transform:translateX(800px) rotate(180deg)} 99.999%{transform:translateX(0) rotate(180deg)} 100%{transform:translateX(0) rotate(0)} }

7.动画库swiper ,移动端轮播插件

使用方法:https://www.swiper.com.cn/usage/index.html

flex布局

注意,设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效

1.容器属性

容器属性 一共六个

flex-direction 表示主轴对齐方式,四个值

flex-direction:row; //水平布局 也是默认的布局

flex-direction:row-reverse; //反向水平布局

flex-direction:column; //垂直布局

flex-direction:column-reverse; //反向垂直布局

flex-wrap定义一条轴线排不下的时候,如何换行 三个值

flex-wrap:wrap; //换行

flex-wrap:nowrap; //不换行

flex-wrap:wrap-reverse; //反向换行,第一行在最下方

flex-flow属性是flex-direction属性和flex-wrap属性的复合形式,默认值为row nowrap,两个值;

flex-flow:row wrap; //水平布局 换行

flex-flow:column nowrap; //垂直布局 不换行

justify-content 英文表示调整内容,定义子项在主轴方向的对齐方式 五个值

justify-content:flex-start; //起点对齐

justify-content:flex-end; //终点对齐

justify-content:center; //居中

justify-content:space-between; //两端对齐,中间间隔一样

justify-content:space-around; //间隔等分,所有子项间隔都相等,所以子项之间的间距比子项与边框的间距大一倍。

align-item 定义项目在交叉轴上如何对齐 有五个值

align-item:flex-start; //交叉轴起点对齐

align-item:flex-end; //交叉轴终点对齐

align-item:center; //交叉轴居中对齐

align-item:baseline; //在第一行文本的基线上对齐 也就是说后面的都按照第一个文本的最底部进行对齐

align-item:stretch; //默认值,如果项目未设置高度或设为auto,将占满整个容器的高度,不设置也行 ,所以用的少

align-content 属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用 ,本属性去掉了间隔,和align-items区分开来

align-content:flex-start; //交叉轴起点对齐

align-content:flex-end; //交叉轴终点对齐

align-content:center; //交叉轴居中对齐

align-content:space-between; //交叉轴两端对齐,中间间隔平均分布

align-content:space-around; //交叉轴间隔等分,子项的间隔比子项与边框的间隔大一倍。

align-content:stretch; //默认值,子项占满整个交叉轴。

2.子元素属性

flex布局子元素的属性 一共有六个属性

order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。

order: -1

flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为1,其他项目都为0,则前者占据所有的剩余空间

flex-grow: 1; //如果其他子项为0 ,本子项就占满整个剩余空间,通常会用复合属性 flex来设置

flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。 如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。负值对该属性无效

flex-shrink:0; //设置为0 就不缩小

flex-basis 自定义在主轴的大小,等同于设置的宽高,它的默认值为auto,即项目的本来大小

flex-basis: 300px; //自定义在主轴的大小

flex属性是flex-grow(放大比例), flex-shrink(缩小比例) 和 flex-basis(自定义大小)的简写,默认值为0 1 auto。后两个属性可选。 经常使用该属性来分配剩余空间

flex:1; //这个子元素分配所有的剩余空间 有三个值,通常只用第一个

align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch(伸展)

align-self: flex-start;//该子项在交叉轴起点对齐

align-self: flex-end; //该子项在交叉轴的终点对齐

align-self: center; //该子项在交叉轴居中对齐

align-self: baseline; //该子项通过基线对齐

align-self: stretch; //默认,也就是没有设置高度的时候会占满整个容器