bowean 2019-12-27
组件是组成页面中最基本的元素,按钮,输入框,下拉选择都是组件,组件和组件组合就变成了一个更复杂的组件。至于为什么要用组件库我想应该是体验了,用户使用体验以及开发人员的开发体验,用户在页面上的交互都是通过组件,一个颜值高的组件可以第一眼吸引用户去点击,这就是用户体验,开发体验更不用说,组件就是同种类型不同交互的封装,是用组件库可以让我们更专注的针对业务的开发和产品的交互。
库:库是有用功能的有组织的集合。库的典型功能包括处理字符串,日期,HTML DOM元素,事件,Cookie,动画,网络请求等。每个函数将值返回给调用应用程序,但是你从中可以选择参数来应用。库是更多是一个封装好的特定的集合,提供给开发者使用,的英文特定而且于某一方面的集合(方法和函数),库没有控制权,控制权在使用者手中,库在查询中需要的功能在自己的应用中使用,我们可以从封装的角度理解库。
框架:框架顾名思义就是一套架构,会基于自身的特点向用户提供一套相当于叫完整的解决方案,而且控制权的在框架本身,使用者要找框架所规定的某种规范进行开发框架。是一个应用程序的骨架,它要求你以特定的方式处理软件设计,并在某些点插入自己的逻辑。通常框架提供事件。 存储和数据绑定等功能。
从网页开发人员的角度:库可以很容易地被另一个库替换但框架不能 。
Vue、Angular、React三大主流
Mint UI是 饿了么团队开发基于vue.js的移动端UI框架,它包含丰富的 CSS 和 JS 组件,能够满足日常的移动端开发需要。
WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信内网页和微信小程序量身设计,令用户的使用感知更加统一。包含button、cell、dialog、toast、article、icon等各式元素。
Element是饿了么前端开源维护的Vue UI组件库,组件齐全,基本涵盖后台所需的所有组件,文档讲解详细,例子也很丰富。 主要用于开发PC端的页面,是一个质量比较高的Vue UI组件库。官网地址:element-cn.eleme.io/#/zh-CN
vant UI是有赞前端团队基于有赞统一的规范实现的 Vue 组件库,提供了一整套 UI 基础组件和业务组件。通过 Vant,可以快速搭建出风格统一的页面,提升开发效率。
简洁、直观、强悍的前端开发框架,让web开发更迅速、简单
开箱即用的高质量 Angular 组件,与 Angular 保持同步升级。
使用 TypeScript 构建,提供完整的类型定义文件。
layer是一款口碑极佳的web弹层组件,是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用。layui 首个版本发布于2016年秋,她区别于那些基于 MVVM 底层的 UI 框架,从核心代码到 API 的每一处细节都经过精心雕琢,非常适合界面的快速开发。
Ant Design 是基于 React 开发的,并不是传统的 html。React 起源于 Facebook 的内部项目,现在已经成了一个很流行的开发工具。
块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。
浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不为“visiable”的块级盒子,都会为他们的内容创建新的块级格式化上下文。
在一个块级格式化上下文里,盒子从包含块的顶端开始垂直地一个接一个地排列,两个盒子之间的垂直的间隙是由他们的margin 值所决定的。两个相邻的块级盒子的垂直外边距会发生叠加。
在块级格式化上下文中,每一个盒子的左外边缘(margin-left)会触碰到容器的左边缘(border-left)(对于从右到左的格式来说,则触碰到右边缘),即使存在浮动也是如此,除非这个盒子创建一个新的块级格式化上下文。
块格式化上下文对浮动定位(参见 float)与清除浮动(参见 clear)都很重要。浮动定位和清除浮动时只会应用于同一个BFC内的元素。浮动不会影响其它BFC中元素的布局,而清除浮动只能清除同一BFC中在它前面的元素的浮动。外边距折叠(Margin collapsing)也只会发生在属于同一BFC的块级元素之间。
使用display: flow-root
一个新的 display 属性的值,它可以创建无副作用的BFC。在父级块中使用 display: flow-root 可以创建新的BFC。
搜索引擎会考评网站的质量,保持网站的经常更新,使网站拥有大量的、有用的、可读性强的优质信息。网站的权重会相应的提升。
建立的网站结构层次越少,越容易被“蜘蛛”抓取,也就容易被收录。
网站首页是权重最高的地方,如果首页链接太少,没有“桥”,“蜘蛛”不能继续往下爬到内页,直接影响网站收录数量。但是首页链接也不能太多,一旦太多,没有实质性的链接,很容易影响用户体验,也会降低网站首页的权重,收录效果也不好。注意链接要建立在用户的良好体验和引导用户获取信息的基础之上。
导航应该尽量采用文字方式,也可以搭配图片导航,但是图片代码一定要进行优化,img标签必须添加“alt”和“title”属性,告诉搜索引擎导航的定位,做到即使图片未能正常显示时,用户也能看到提示文字。其次,在每一个网页上应该加上面包屑导航,好处:从用户体验方面来说,可以让用户了解当前所处的位置以及当前页面在整个网站中的位置,帮助用户很快了解网站组织形式,从而形成更好的位置感,同时提供了返回各个页面的接口,方便用户操作;对“蜘蛛”而言,能够清楚的了解网站结构,同时还增加了大量的内部链接,方便抓取,降低跳出率。
当速度很慢时,用户体验不好,留不住访客,并且一旦超时,“蜘蛛”也会离开
.clear:after { content: ""; display: block; clear: both; } .icon:before { content: "\e778"; }
CSS 的 content 属性用于在元素的::before
和::after
伪元素中插入内容。使用content属性插入的内容都是匿名的可替换元素。
从上面看到它只能用于「伪元素」中,但其实它在 chrome 浏览器中,可用于任何元素.不过除了chrome浏览器,其它浏览器并不支持直接在元素上使用,只能用在「伪元素」上。所以使用场景并不多。
<template> <div> <form class="form"> <label>用户名</label><input type="text" /> <label>手机号</label><input type="text" /> <label>邮箱</label><input type="text" /> </form> </div> </template> <style> .form label:before { content: "*"; color: red; } </style>
Q:是不是发现了新大陆?
A:是
Q:登哥,你是如何看待别人都说你很帅的?
A:我这该死的,无处安放的魅力
<template> <p class="question">是不是发现了新大陆?</p> <p class="answer">是</p> <p class="question">登哥,你是如何看待别人都说你很帅的?</p> <p class="answer">我这该死的,无处安放的魅力</p> </template> <style> .question:before { content: "Q:"; } .answer:before { content: "A:"; } </style>
通常你想在网页中显示一张图片,一般是两种方式:使用或者使用 background-image。
除此之外,你还可以利用 content 属性,它的值可以是图片的地址
不过以这种方式插入时无法更改图像的尺寸。所以我们很少这么使用
可以用它获取 HTML 属性的值。
年龄:18
<template> <label class="label" data-label="年龄">18</label> </template> <style> .label:before { content: attr(data-label) ": "; } </style>
通常你要实现一个动态的递增数,都是通过 JavaScript 实现,你可能都没有想过 CSS 也是可以实现递增数。
本质上 CSS 计数器是由 CSS 维护的变量,这些变量可能根据 CSS 规则增加以跟踪使用次数。
计数器的值通过使用 counter-reset 和 counter-increment 操作,然后通过 counter() 或 counters()函数来显示在页面上。
如何使用它:
首先,使用前必须要通过 counter-reset 重置一个初始值。它默认是 0。你也可以指定初始值
counter-reset: record; /* 重置计数器为 0 */ counter-reset: record 2; /* 重置计数器为 2 */
除此之外,它的值还可以是多个。
<template> <h3></h3> </template> <style> h3 { counter-reset: first 2 second 4; } h3:before { content: counter(first) counter(second); } </style>
counter() 函数可以接受两个参数。
counter(name, list-style-type)
list-style-type 的值可以为:disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | none | inherit
除了 counter() 之外还有一个 counters(),那它是做什么的呢?
counters() 对嵌套的计数器非常有用,它可以在不同级别的嵌套计数器之间插入字符串。
建立在已有的、被广泛采用的标准基础之上的一组简单的、开放的数据格式(microformats.org官方定义)。是把语义嵌入到HTML以便有助于分离式开发而制定的一些简单约定,是兼顾人机可读性设计的数据表达方式,对Web网页进行语义注解的方法。
微格式按照某种已有的被广泛应用的标准,通过对内容块的语义标记,可以让外部应用程序、聚合程序和搜索引擎能够做以下事情:
1、在捉取Web内容时,能够更为准确地识别内容块的语义;
2、对内容进行操作,包括提供访问、校对,还可以将其转化成其他的相关格式,提供给外部程序和Web服务使用。
我们从上面的描述知道,微格式实际就是为现有的(X)HTML元素添加元数据和其他属性,增强语义。
不同种类的微格式
1、
例如 一个地理坐标:46.32,-12.33,普通人无法理解这些数字的含义,现在把它做成微格式:
<span class="geo"> <span class ="latitude">52.48</span> <span class="longtitude">-1.89</span>
这样机器就可以正确地理解这些字符的含义,并对其进行索引并在地图上发现相应位置,导出到GPS设备,或者用于其他的用途。
2、
当我用手机浏览某公司的网站时,手机浏览器识别出了网页中的 hCard 信息。这个 hCard 标记了该公司的多种联络方式,手机浏览器很聪明地提示我“是否保存到通讯录”,于是我很经松地保存了我所需要的信息。
离线存储可以将站点的一些文件存储在本地,在没有网络的时候还是可以访问到以缓存的对应的站点页面,其中这些文件可以包括html,js,css,img等等文件,即使在有网络的时候,浏览器也会优先使用已离线存储的文件,返回一个200(fromcache)头。这跟HTTP的缓存使用策略是不同的。
做好相应资源的缓存可以带来更好的用户体验,当用户使用自己的流量上网时,本地缓存不仅可以提高用户访问速度,而且大大节约用户的使用流量。
HTML5的离线存储是基于一个新建的.manifest文件的缓存机制(不是存储技术),通过这个文件上的解析清单离线存储资源,
这些资源就会像cookie一样被存储了下来。之后当网络在处于离线状态下时,浏览器会通过被离线存储的数据进行页面展示。
Manifest是一个简单的文本文件,它的扩展名是任意的,定义需要缓存的文件、资源,当第一次打开时,浏览器会自动缓存相应的资源。
离线存储的manifest一般由三个部分组成:
localStorage
没有时间限制的数据存储(永久),对于同一个浏览,当用户关闭浏览器窗口后,数据不会被删除。sessionStorage
针对一个session
的数据存储(sesion/),当用户关闭浏览器窗口后,数据会被删除。cookie
:不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得cookie
速度很慢而且效率也不高优点:
缺点:
渐进增强(Progressive Enhancement):一开始就针对低版本浏览器进行构建页面,完成基本的功能,然后再针对高级浏览器进行效果、交互、追加功能达到更好的体验。
写法
.transition{ -webkit-transition: all .5s; -moz-transition: all .5s; -o-transition: all .5s; transition: all .5s; }
优雅降级(Graceful Degradation):一开始就构建站点的完整功能,然后针对浏览器测试和修复。比如一开始使用 CSS3 的特性构建了一个应用,然后逐步针对各大浏览器进行 hack 使其可以在低版本浏览器上正常浏览。
写法
.transition{ transition: all .5s; -o-transition: all .5s; -moz-transition: all .5s; -webkit-transition: all .5s; }
根据你的用户所使用的客户端的版本来做决定
现在有很成熟的技术,能够让你分析使用你客户端程序的版本比例。如果低版本用户居多,当然优先采用渐进增强的开发流程;如果高版本用户居多,为了提高大多数用户的使用体验,那当然优先采用优雅降级的开发流程。
Quirks怪异模式、标准模式(Standards mode)和接近标准模式(Almost standards mode)
对HTML文件来说,<!DOCTYP>
声明位于<html>
标签之前,这个<!DOCTYP>
可以告知浏览器使用哪种 HTML 规范
<!DOCTYPE html>
当 doctype 信息如上时,表明该页面是遵守了 HTML5 规范的,浏览器会选择 Standards Mode,这种 doctype 是最推荐的一种,我们平时设计页面都应该加上这一个 doctype。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
当 doctype 如上时,浏览器同样会选择 Standards Mode,虽然和第一种 doctype 有一些区别,但是几乎可以认为是一样的。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
当 doctype 如上时,浏览器会选择 Almost Standards Mode,需要注意的是如果今后需要把这个页面改为 HTML5 规范,那么<table>
中的分割图片问题可能会错乱。
当 doctype 缺失的时候或者声明不正确的时候
浏览器会选择 Quirks Mode,这是非常不推荐的方式,我们应该尽量避免 Quirks Mode,这对一个 web 应用是非常不利的地方
盒模型是浏览器 Quirks Mode 和 Standards Mode 的主要区别。
在 IE 盒模型中,
CSS 中常见的元素有两类,分别是 block(块级)元素及 inline(内联)元素。根据 CSS 标准,对于 inline 元素,又可以分为 replaced 和 non-replaced 两类。
默认具有 CSS 格式化外表范围的元素,比如 img 标签,有自己的宽和高,我们称其为 replaced 元素,还有 input,textarea,select,object,等都是 replaced 元素。除了这些元素之外的元素就是 non-replaced 元素。如 span 标签。
在 IE Standards Mode 下,non-replaced inline 元素无法自定义大小,而在 IE Quirks Mode 下,可以自定义大小,改变该元素显示的尺寸。
标准模式下会生效,而在怪异模式下不会生效
问题出现的浏览器:IE6及其更低的版本
问题描述:在IE6浏览器上,使用png24为的图片不透明,出现背景。
解决方法:图片使用gif格式,或者png-8格式图片。
3
像素问题,问题出现的浏览器:IE6及其更低的版本问题描述:两个相邻的div之间有3个像素的空隙,一个div使用了float,而另一个没有使用产生的。
解决方法:对另一个div也使用float;
给浮动的div添加属性margin-right:-3px,但是这样写,在其他浏览器又会不正常,所以我们需要添加IE6的hack,在属性margin-right前添加下划线 margin-right:-3px.(IE6以及更低版本的hack,是在属性前面添加下划线 )
解决方案加CSS样式重置
解决方法:这时可以另外添加ie滤镜alpha,如下:
Opacity:0.8; Filter:alpha(opacity=80); -ms-filter:”progid:DXImageTransform.Microsoft.Alpha(opacity=80)”;
问题描述:创建一个高度为1px的容器,在IE6中没效果。
解决方法:因为行高line-height在IE6下有默认值,设置 line-height:1px|overflow:hidden|zoom:0.08.
问题描述:IE6不支持min-height属性。即使定义了元素高度,如果内容超过元素的高度,IE6在解析时,会自动延长元素的高度。
解决方法:利用IE6不识别!Important,给元素设置固定高度,并且设置元素高度自动。
Height: auto !important; Height: 300px; Min_height: 300px;
因为IE6不识别!Important,它只识别到了height:300px,当内容超过300px时,它会自动延长高度。IE7以及其他浏览器都识别!Important,虽然定义了Height:300px,但是!Important的优先级别最高。所以内容超过300px时,还是会自动延长。
问题描述:块属性标签float后,又有横行的margin情况下,在IE 6显示margin 比设置的大。
任何浮动的元素上的外边距加倍,例如:如果元素设置的外边距为maigin-left:15px, 在浏览器里会显示为margin-left:30px.
解决办法:将元素的display属性设置为inline,因为元素是浮动的,所以这么设置
不会影响元素在浏览器的显示。块级元素就加display:inline;行内元素转块级元素display:inline后面再加display:table。
问题描述:Firefox浏览器在点击链接时,会自动在元素周围添加一个虚线边框。
解决方法:我们为了和其他浏览器保持一致,需要去掉虚线框,我们可以给a标签设 置outline属性,如下:
a{outline:none;} a:focus{outline:none;}
background-color: blue;background-color: yellow;<input type="button" value="变蓝" @click="changeColorT