当前位置: 首页 > Web前端 > CSS

前端初学者基础知识1

时间:2023-03-31 01:16:31 CSS

前端学习记录周1基础知识CSS盒模型所有的HTML元素都可以看做是盒子。在CSS中,术语“盒子模型”用于设计和布局。CSS盒子模型本质上是一个盒子,封装了周围的HTML元素。它包括:边距、边框、填充和实际内容。margin-边界外的区域被清空,外边距透明。Border-围绕填充和内容外部的边框。Padding-清除内容周围的区域,填充是透明的。内容-框的内容,显示文本和图像。CSS3增加了box-sizing;border-box:计算padding的宽度和border的宽度。html5标签模板:用于在运行时通过JavaScript实例化内容的容器。header:定义页面或部分的标题。它通常包括徽标、页面标题和导航目录。footer:定义页面或章节的页脚。它通常包含版权信息、法律信息的链接以及反馈建议的地址。aside:定义与页面内容不太相关的内容——如果删除,剩余的内容仍然有意义。section:定义文档中的一个部分。nav:定义仅包含导航链接的部分。audio:定义音频内容(属性:autoplay,controls,loop,muted,preload)video:定义视频(属性同上)-JavaScript数据类型和数据结构JavaScript是弱类型语言,有6种基本类型BoolObjectStringNullUndefinedNumber*可以通过判断typeof数据类型,数组和null属于Object*Object,属于引用类型,有constructor、hasOwnProperty、isPropertyOf、propertyIsEnumerable等方法。对象的属性Data属性:包含一个数据值的位置,可以读写包含Configurable、Enumerable、Writable、Value4个特性Accessor属性:不包含数据value可以包含getter和setter函数,可读写会分别触发这两个方法,包括Configurable、Enumerable、get、set属性,使用defineProperty()修改默认属性。访问器属性不能直接定义,只能调用应该使用的方法。对象创建工厂模式构造函数原型模式构造函数:functionPerson(name,age,job){this.name=name;这个。年龄=年龄;这个。工作=工作;this.sayName=function(){控制台。日志(这个。名称);}}letperson1=newPerson("name",20,"job");原型模式:functionPerson(){}Person.prototype.name="name";Person.prototype.age=20;Person.prototype.job="工作";Person.prototype.sayName=function(){console.log(this.name);}让person1=newPerson();JavaScript常用的字符串操作substring()–返回字符串的子串。传入的参数是开始位置和结束位置。substr()-返回字符串的子字符串。传入的参数是起始位置和编号。replace()–用于查找与正则表达式匹配的字符串,并将匹配的字符串替换为新字符串。slice()–提取字符串的一部分并返回一个新字符串。split()–通过将字符串分成子字符串,将字符串变成字符串数组。length–返回字符串的长度,所谓字符串的长度是指它包含的字符数。toLowerCase()–将整个字符串转换为小写。toUpperCase()–将整个字符串转换为大写。concat()–组合两个或多个字符的文本,返回一个新字符串。indexOf()–返回字符串中子字符串第一次出现的索引。如果没有匹配项,则返回-1。charAt()–返回指定位置的字符。match()–检查字符串是否匹配正则表达式JavaScript常用的数组操作-concat-合并数组-push、pop-分别增删元素、栈形式-unshift、shift-增删元素、队列形式-reverse-reverse-sort()-排序,arr.sort(function(a,b){returna-b;}输入比较函数-slice,splice-delete,参数为起始位置和编号,slice不改变原Elementgroup,返回一个新的数组,splice会改变元素组,并返回删除的数组。-substring,substr-截取数组,类似于上面string中的两个方法。JavaScript模块化是为了不阻塞代码的污染整个世界,更好的利用别人的代码所以有JavaScript模块化的需求可以使用立即执行函数varparams='test';varmodule=(function(params){varmod=function(){//...};返回{mod:mod};})(params);external不能直接访问模块内部的变量。传入外部变量后,内部改变其值不会影响全局。closure的一些新特性border-radius:border圆角box-sizing:border-box,content-boxbox-shadow:shadowbackground-sizebackground-origin:背景显示区域,content-box,padding-boxorborder-boxtext-shadow:文字阴影word-wrap:文字强制换行@font-face:fonttransform:2D,3D转换ratate,translate,scale,skewtransition:excessiveanimation:animation@keyframes:创建动画规则vue基本常用指令v-if,v-else-if,v-elsev-showv-on缩写@v-bindv-modelv-forv-htmlv-textfeatureref:在元素上添加这个属性,而不是原生JavaScript获取dom操作this.$refs.name在bindingLinkedstylesandclasses下面的写法涉及到所有的样式和类名的绑定方法,样式就不详细解释了:style="[item.a,item.b]":style="{width:item.value+'px'}":style="{color:activeColor,fontSize:fontSize+'px'}":style="item.titlefont":style="a<0?'color:red':'color:black'":style="item.choosetype==3?{width:ul_width+'px'}:''"Class:class="{a:item.x==1}":class="[b,{a:item.x==1}]":class="{a:item.x==1,b:item.x==2}"实践一、个人center-生活中心页面遇到的问题及学到的知识点1.将内层div的margin-top属性传递给外层div

{{constellation}}
{{memberGrade}}
{{memberName}
原因:当两个垂直边距相遇时,它们形成一个边距合并后的边距高度等于两个合并后边距高度中的较大者。当一个元素包含在另一个元素中时(如果没有填充或边框分隔边距),它们的顶部和/或底部边距也会合并。空元素,它有outermargin,但是没有border和padding,那么上下margin会合并解决方法外层元素加上innermarginborder,去掉内层元素的mqrgin,直接设置外层元素padding2。事件冒泡
让root=document.getElementsByClassName('root')[0];让父亲=document.getElementsByClassName('父亲')[0];让child=document.getElementsByClassName('child')[0];root.onclick=function(){console.log("root");};father.onclick=function(){console.log("父亲");};child.onclick=function(){console.log("child");};单击最里面的div时,控制台依次显示:child、father、root。按照从下到上的DOM层次结构,这就是事件冒泡。3.防止冒泡实现弹窗,然后点击别处隐藏弹窗/*javascript*/letfather=document.getElementsByClassName('root')[0];让child=document.getElementsByClassName('child')[0];father.onclick=function(){console.log("父亲");};child.onclick=function(e){让ev=e||window.event;ev.stopPropagation();};2.学习编码标准和项目结构基础在现有项目上尝试写*模仿网易云音乐播放器页面地址:https://gitee.com/zhangweiqin...代码规范tab=2Space移动端使用rem布局生命周期排列顺序:name,props,components,data,create,mounted,computed,watch,beforedestory,methods自定义组件使用小驼峰命名目录结构根组件App.vue页面组件:src/view页面模块:src/view/modules路由:src/router通用组件:src/componentsrem自适应布局先了解一下:rem、em、pxpx:相对长度单位。Pixelpx是相对于显示器的屏幕分辨率的。em:是相对长度单位,是所在元素的字体大小。如果不设置,则逐层获取字体大小,直到浏览器默认字体大小。rem:相对长度大小,相对于根元素的字体大小。因为rem的大小只和根元素的字体大小有关,只要根据设备设置不同的根元素大小,那么以相同的rem为单位得到的实际大小是不一样的。适应。document.documentElement.style.fontSize=document.documentElement/375*20+'px';/*这样,如果宽度为375(iphone6/7/8),1rem=20px。也可以选择使用360的宽度(多为1080p的屏幕)开发环境要相应的除以360,根据设计稿的宽度选择方便的计算方式。*/项目路由App.vue目前只有主页面和歌曲列表页面,主界面下的两个子路由:我的音乐,发现,以及两个组件:个人设置页面,播放控制栏。{path:"/",redirect:"/index/myMusic"},//重定向{//主界面路径:'/index',name:'index',component:index,children:[{//IMusicpath:'/index/myMusic',name:'myMusic',component:myMusic},{//Discoverypath:'/index/findMusic',name:'findMusic',component:findMusic}]},{//歌曲列表pagepath:'/songList',name:'songList',component:songList}路由使用和参数传递:(两种方式){path:'helloWorld',name:helloWorld,component:···}this.$router.push({path:'/helloWorld',query:{msg:'hello'}});this.$router.push({name:'helloWorld',params:{msg:'hello'}});console.log(this.$route.query);//{msg:hello},区别在于查询参数会附加到url地址上的console.log(this.$route.params);//{msg:hello}组件的使用和导入组件的数据传递,两种加载方式1.importu来自'@/view/modules/userSetting.vue'的serSetting;2.constuserSetting=resolve=>require(['@/view/modules/userSetting.vue'],resolve);//lazyloading异步加载,优点:最大限度的实现on-the-goloading,减少加载首页的延迟;缺点:可能会导致网页显示慢,渲染不均匀的问题。组件注册//单文件组件组件:{userSetting},数据传输父组件->子组件://Receiveexportdefault{name:"user-setting",props:['data']}childComponent->ParentComponent:高级设置methods:{recive(msg){console.log(msg);//来自儿子的信息}}Vue.extend(),$mount()Vue.extend():使用基本的Vue构造函数,创建一个“子类”,其参数是一个包含组件选项的对象。让alertOptions={data:function(){return{title:title,text:text,}},methods:{close(){resolve('ok');对话框关闭(虚拟机);}},template:'',components:{alert}}letcreator=Vue.extend(alertOptions)vm.$mount():手动挂载一个未挂载的实例。//挂到#appnewcreator().$mount('#app')//在文档外渲染然后挂载vm=newcreator().$mount()dialogContainer.appendChild(vm.$el)