前端笔记---html与css
1.四大浏览器内核?
IE: trident 内核
Firefox: gecko 内核
Safari:webkit 内核
Opera:以前是 presto 内核, Opera 现已改用 Google Chrome 的 Blink 内核
Chrome:Blink(基于 webkit, Google 与 Opera Software 共同开发)
doctype作用?
告诉浏览器按照何种规范解析页面.
Quirks与Standards区别?
区别 布局 样式解析 脚本执行
Quirks 盒模型: 在 W3C 标准中, 如果设置一个元素的宽度和高度, 指的是元素内容的宽度和高度, 而在 Quirks 模式下, IE 的宽度和高度还包含了 padding 和 border。
Standards 设置行内元素的高宽: 在 Standards 模式下, 给span等行内元素设置 wdith 和 height 都 不会生效, 而在 quirks 模式下, 则会生效。
设置百分比的高度: 在 standards 模式下, 一个元素的高度是由其包含的内容来决定的, 如 果父元素没有设置百分比的高度, 子元素设置一个百分比的高度是无效的用 margin:0 auto 设置水平居中: 使用 margin:0 auto 在 standards 模式下可以使元素水平 居中, 但在 quirks 模式下却会失效。
div+css较table有何优点?
改版的时候更方便 只要改 css 文件。
页面加载速度更快、 结构化清晰、 页面显示简洁。 表现与结构相分离。
易于优化( seo) 搜索引擎更友好, 排名更容易靠前。
前端做好seo需要考虑什么:https://www.jianshu.com/p/7d7d83e4ec46
img 的 alt 与 title 有何异同? strong 与 em 的异同?
a:alt(alt text):为不能显示图像、 窗体或 applets 的用户代理( UA) , alt 属性用来指 定替换文字。 替换文字的语言由 lang 属性指定。 (在 IE 浏览器下会在没有 title 时把 alt 当成 tool tip 显示)
title(tool tip):该属性为设置该属性的元素提供建议性的信息。
strong:粗体强调标签, 强调, 表示内容的重要性
em:斜体强调标签, 更强烈强调, 表示内容的强调点
多个域名存储网站资源的利弊和处理手段?
优点:
CDN 缓存更方便
突破浏览器并发限制
节约 cookie 带宽
节约主域名的连接数, 优化页面响应速度
防止不必要的安全问题
问题:
两个或多个域名指向同一个网站,会造成这两个或多个网站的收录数量差较大、权重分散的问题,不利于网站的排名。
处理手段:
cookies, sessionStorage 和 localStorage 的区别?
sessionStorage ( session) 中的数据, 这些数据只有在同一个会话中的页面才能访问 并且当会话结束后数据也随之销毁。 因此 sessionStorage 不是一种持久化的本地存储, 仅 仅是会话级别的存储。
而 localStorage 用于持久化的本地存储, 除非主动删除数据, 否则 数据是永远不会过期的。 web storage 和 cookie 的区别 Web Storage 的概念和 cookie 相似, 区别是它是为了更大容量存储设计的。
Cookie 的大小 是受限的, 并且每次你请求一个新的页面的时候 Cookie 都会被发送过去, 这样无形中浪费 了带宽, 另外 cookie 还需要指定作用域, 不可以跨域调用。
除此之外, Web Storage 拥有 setItem,getItem,removeItem,clear 等方法, 不像 cookie 需要前端开发者自己封装 setCookie, getCookie。
但是 Cookie 也是不可以或缺的: Cookie 的作用是与服务器进行交互, 作为 HTTP 规范的一部分而存在 , 而 Web Storage 仅仅是为 了在本地“ 存储” 数据而生。
简述一下 src 与 href 的区别?
src 用于替换当前元素, href 用于在当前文档和引用资源之间确立联系。
src 是 source 的缩写, 指向外部资源的位置, 指向的内容将会嵌入到文档中当前标签所在 位置; 在请求 src 资源时会将其指向的资源下载并应用到文档内, 例如 js 脚本, img 图片 和 frame 等元素。<script src =” js.js” > 当浏览器解析到该元素时, 会暂停其他资源的下载和处理, 直到将该资源加载、 编译、 执行 完毕, 图片和框架等元素也如此, 类似于将所指向资源嵌入当前标签内。 这也是为什么将 js 脚本放在底部而不是头部。
href 是 Hypertext Reference 的缩写, 指向网络资源所在位置, 建立和当前元素( 锚点) 或当前文档( 链接) 之间的链接, 如果我们在文档中添加<link href=” common.css” rel=” stylesheet” />那么浏览器会识别该文档为 css 文件, 就会并行下载资源并且不会停止对当前文档的处理。 这也是为什么建议使用 link 方式来加载 css, 而不是使用@import 方式。
网页制作用到的图片格式有哪些?
webp ,png-8, png-24, jpeg, gif, svg
如何在前端适当考虑微格式?
微格式( Microformats) 是一种让机器可读的语义化 XHTML 词汇的集合, 是结构化数据的开 放标准。 是为特殊应用而制定的特殊格式。
优点: 将智能数据添加到网页上, 让网站内容在搜索引擎结果界面可以显示额外的提示。( 应 用范例: 豆瓣, 有兴趣自行 google)
如何巧妙应用,详见:https://www.jianshu.com/p/7e11c1f32a48
一个页面上有大量的图片( 大型电商网站) , 加载很慢, 你有哪些方法优化这些图片的加载, 给用户更好的体验?
图片懒加载, 在页面上的未可视区域可以添加一个滚动条事件, 判断图片位置与浏览器顶端 的距离与页面的距离, 如果前者小于后者, 优先加载。
如果为幻灯片、 相册等, 可以使用图片预加载技术, 将当前展示图片的前一张和后一张优先 下载。
如果图片为 css 图片, 可以使用 CSSsprite, SVGsprite, Iconfont、 Base64 等技术。 如果图片过大, 可以使用特殊编码的图片, 加载时会先加载一张压缩的特别厉害的缩略图, 以提高用户体验。
如果图片展示区域小于图片的真实大小, 则因在服务器端根据业务需要先行进行图片压缩, 图片压缩后大小与展示一致。
如何理解HTML的语义化
什么是HTML语义化?
<基本上都是围绕着几个主要的标签,像标题(H1~H6)、列表(li)、强调(strong em)等等
根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开发者阅读和写出更优雅的代码的同时让浏览器的爬虫和机器很好地解析。
为什么要语义化?
为了在没有CSS的情况下,页面也能呈现出很好地内容结构、代码结构:为了裸奔时好看;
用户体验:例如title、alt用于解释名词或解释图片信息、label标签的活用;
有利于SEO:和搜索引擎建立良好沟通,有助于爬虫抓取更多的有效信息:爬虫依赖于标签来确定上下文和各个关键字的权重;
方便其他设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页;
便于团队开发和维护,语义化更具可读性,是下一步吧网页的重要动向,遵循W3C标准的团队都遵循这个标准,可以减少差异化。
写HTML代码时应注意什么?
尽可能少的使用无语义的标签div和span;
在语义不明显时,既可以使用div或者p时,尽量用p, 因为p在默认情况下有上下间距,对兼容特殊终端有利;
不要使用纯样式标签,如:b、font、u等,改用css设置。
需要强调的文本,可以包含在strong或者em标签中(浏览器预设样式,能用CSS指定就不用他们),strong默认样式是加粗(不要用b),em是斜体(不用i);
使用表格时,标题要用caption,表头用thead,主体部分用tbody包围,尾部用tfoot包围。表头和一般单元格要区分开,表头用th,单元格用td;
表单域要用fieldset标签包起来,并用legend标签说明表单的用途;
每个input标签对应的说明文本都需要使用label标签,并且通过为input设置id属性,在lable标签中设置for=someld来让说明文本和相对应的input关联起来。
路径问题?
1.绝对路径
绝对路径是指文件在硬盘上真正存在的路径。例如“bg.jpg”这个图片是存放在硬盘的“E:\book\网页布局代码\第2章”目录下,那么 “bg.jpg”这个图片的绝对路径就是“E:\book\网页布\代码\第2章\bg.jpg"。那么如果要使用绝对路径指定网页的背景图片就应该使用 以下语句: 使用绝对路径的缺点: 事实上,在网页编程时,很少会使用绝对路径,如果使用“E:\book\网页布\代码\第2章\bg.jpg”来指定背景图片的位置,在自己的计算机上 浏览可能会一切正常,但是上传到Web服务器上浏览就很有可能不会显示图片了。因为上传到Web服务器上时,可能整个网站并没有放在Web服务器的E盘, 有可能是D盘或H盘。即使放在Web服务器的E盘里,Web服务器的E盘里也不一定会存在“E:\book\网页布局\代码\第2章”这个目录,因此在浏 览网页时是不会显示图片的。
2.相对路径
为了避免这种情况发生,通常在网页里指定文件时,都会选择使用相对路径。所谓相对路径,就是相对于自己的目标文件位置。例如上面的例子,“s1.htm” 文件里引用了“bg.jpg”图片,由于“bg.jpg”图片相对于“s1.htm”来说,是在同一个目录的,那么要在“s1.htm”文件里使用以下代 码后,只要这两个文件的相对位置没有变(也就是说还是在同一个目录内),那么无论上传到Web服务器的哪个位置,在浏览器里都能正确地显示图片。 再 举一个例子,假设“s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网页 布局\代码\第2章\img”,那么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的“img”子目录里,则引用图片的语句应该 为: 注意:相对路径使用“/”字符作为目录的分隔字符,而绝对路径可以使用“\”或“/”字符作为目录的分隔字符。由于“img”目录是“第2章”目录下的子目录,因此在“img”前不用再加上“/”字符。 在相对路径里常使用“../”来表示上一级目录。如果有多个上一级目录,可以使用多个“../”,例如“http://www.cnblogs.com/”代表上上级目录。假设 “s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网页布局\代码”,那 么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的上级目录里,则引用图片的语句应该为: 再举一个例子,假设“s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网 页布局\代码\img”,那么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的上级目录里的“img”子目录里,则引用图片的语句 应该为:
3.相对虚拟目录
有关相对路径还有一个比较特殊的表示:“相对虚拟目录”。请看下面的例子: 在这个例子里,background属性的值为“/img/bg.jpg”,注意在“img”前有一个“/”字符。这个“/”代表的是虚拟目录的根目录. 假设把“E:\book\网页布局\代码”设为虚拟目录,那么“/img/bg.jpg”的真实路径为“E:\book\网页布局\代码\img \bg.jpg”;如果把“E:\book\网页布局\代码\第2章”设为虚拟目录,那么“/img/bg.jpg”的真实路径为“E:\book\网页 布局\代码\第2章\img\bg.jpg”
前端角度谈SEO需要考虑什么?
了解搜索引擎如何抓取网页和如何索引网页
你需要知道一些搜索引擎的基本工作原理, 各个搜索引擎之间的区别, 搜索机器人 ( SE robot 或叫 web crawler) 如何进行工作, 搜索引擎如何对搜索结果进行排序等 等。
Meta 标签优化
主要包括主题( Title), 网站描述(Description), 和关键词( Keywords) 。 还有一些其它 的隐藏文字比如 Author( 作者) , Category( 目录) , Language( 编码语种) 等。
如何选取关键词并在网页中放置关键词
搜索就得用关键词。关键词分析和选择是 SEO 最重要的工作之一。 首先要给网站确定主关键 词( 一般在 5 个上下) , 然后针对这些关键词进行优化, 包括关键词密度( Density) , 相 关度( Relavancy) , 突出性( Prominency) 等等。
了解主要的搜索引擎
虽然搜索引擎有很多, 但是对网站流量起决定作用的就那么几个。 比如英文的主要有 Google, Yahoo, Bing 等; 中文的有百度, 搜狗, 有道等。 不同的搜索引擎对页面的抓取和 索引、 排序的规则都不一样。 还要了解各搜索门户和搜索引擎之间的关系, 比如 AOL 网页搜 索用的是 Google 的搜索技术, MSN 用的是 Bing 的技术。
主要的互联网目录
Open Directory 自身不是搜索引擎, 而是一个大型的网站目录, 他和搜索引擎的主要区别 是网站内容的收集方式不同。 目录是人工编辑的, 主要收录网站主页; 搜索引擎是自动收集 的, 除了主页外还抓取大量的内容页面。
按点击付费的搜索引擎
搜索引擎也需要生存, 随着互联网商务的越来越成熟, 收费的搜索引擎也开始大行其道。 最典型的有 Overture 和百度, 当然也包括 Google 的广告项目 Google Adwords。 越来越多的 人通过搜索引擎的点击广告来定位商业网站, 这里面也大有优化和排名的学问, 你得学会用 最少的广告投入获得最多的点击。
搜索引擎登录
网站做完了以后, 别躺在那里等着客人从天而降。 要让别人找到你, 最简单的办法就是将网 站提交( submit) 到搜索引擎。 如果你的是商业网站, 主要的搜索引擎和目录都会要求你付 费来获得收录( 比如 Yahoo 要 299 美元) , 但是好消息是( 至少到目前为止) 最大的搜索引 擎 Google 目前还是免费, 而且它主宰着 60%以上的搜索市场。
链接交换和链接广泛度( Link Popularity)
网页内容都是以超文本( Hypertext) 的方式来互相链接的, 网站之间也是如此。 除了搜索 引擎以外, 人们也每天通过不同网站之间的链接来 Surfing( “ 冲浪” ) 。 其它网站到你的 网站的链接越多, 你也就会获得更多的访问量。 更重要的是, 你的网站的外部链接数越多, 会被搜索引擎认为它的重要性越大, 从而给你更高的排名。
合理的标签使用
导入CSS的三种方式
外部样式表, 引入一个外部 css 文件
内部样式表, 将 css 代码放在 标签内部
内联样式, 将 css 样式直接定义在 HTML 元素内部
使用链接方式时,会在装载页面主体部分之前装载css文件,这样显示出来的网页从一开始就是带有样式
导入式,会在整个页面装载完成后再装载css文件,对于有的浏览器来说,在一些情况下,如果网页文件的体积比较大,则会出现先显示无样式页面,闪一下之后再出现设置样式后的效果。
对于较大网站,为了便于维护,可能会希望把所有的css样式分类别放到几个css文件中,这样如果使用链接式引入,就需要几个语句分别导入css,如果要调整css的文件分类,就需要同是调整HTML文件。这对于维护工作来说,是一个缺陷。如果使用导入式,则可以只引进一个总的css文件,在这个文件中再导入其他独立css文件;而链接则不具备这个特性
导入JS的三种方式
CSS 都有哪些选择器?
派生选择器( 用 HTML 标签申明)
id 选择器( 用 DOM 的 ID 申明)
类选择器( 用一个样式类名申明)
属性选择器( 用 DOM 的属性申明, 属于 CSS2, IE6 不支持, 不常用, 不知道就算了)
除了前 3 种基本选择器, 还有一些扩展选择器, 包括
后代选择器( 利用空格间隔, 比如 div .a{ })
群组选择器( 利用逗号间隔, 比如 p,div,#a{ })
那么问题来了, CSS 选择器的优先级是怎么样定义的?
基本原则: 一般而言, 选择器越特殊, 它的优先级越高。 也就是选择器指向的越准确, 它的优先级就越 高。
!important > id > class > tag
important 比 内联优先级高
复杂的计算方法:
用 1 表示派生选择器的优先级 用 10 表示类选择器的优先级 用 100 标示 ID 选择器的优先级
div.test1 .span var 优先级 1+10 +10 +1
span#xxx .songs li 优先级 1+100 + 10 + 1
#xxx li 优先级 100 +1
那么问题来了, 看下列代码,
标签内的文字是什么颜色的?
<style>
.classA{ color:blue;}
.classB{ color:red;}
</style>
<body>
<p class='classB classA'> 123 </p>
</body>
答案: red。 与样式定义在文件中的先后顺序有关, 即是后面的覆盖前面的, 与在<p class=’ classB classA’ >中的先后关系无关。
CSS 中可以通过哪些属性定义, 使得一个 DOM 元素不显示在浏览器可视范围 内?
最基本的:
设置 display 属性为 none,
或者设置 visibility 属性为 hidden
技巧性:
设置宽高为 0, 设置透明度为 0, 设置 z-index 位置在-1000
19.超链接访问后hover样式就不出现的问题如何解决?
被点击访问过的超链接样式不在具有 hover 和 active 了,解决方法是改变 CSS 属性的 排列顺序: L-V-H-A( link,visited,hover,active)
20.什么是 Css Hack? ie6,7,8 的 hack 分别是什么?
针对不同的浏览器写不同的 CSS code 的过程, 就是 CSS hack。
示例如下:
#test {
width:300px;
height:300px;
background-color:blue; /*firefox*/
background-color:red\9; /*all ie*/
background-color:yellow; /*ie8*/
+background-color:pink; /*ie7*/
_background-color:orange; /*ie6*/ }
:root #test { background-color:purple\9; } /*ie9*/
@media all and (min-width:0px){ #test {background-color:black;} } /*opera*/
@media screen and (-webkit-min-device-pixel-ratio:0){ #test {background-color:gray;}
and safari*/
块状元素和行内元素
块级元素(block)特性:
总是独占一行, 表现为另起一行开始, 而且其后的元素也必须另起一行显示; 宽度(width)、 高度(height)、 内边距(padding)和外边距(margin)都可控制;
div p h1 h2 h3 h4 form ul
内联元素(inline)特性:
和相邻的内联元素在同一行; 宽度(width)、 高度(height)、 内边距的 top/bottom(padding-top/padding-bottom)和外边 距的 top/bottom(margin-top/margin-bottom)都不可改变( 也就是 padding 和 margin 的 left 和 right 是可以设置的) , 就是里面文字或图片的大小。
a b br i span input select
那么问题来了, 浏览器还有默认的天生 inline-block 元素( 拥有内在尺寸, 可设置高宽, 但不会自动换行) , 有哪些? 答案: 、 、 、 、 。
margin重叠
在 CSS 当中, 相邻的两个盒子( 可能是兄弟关系也可能是祖先关系) 的外边距可以结合成一 个单独的外边距。 这种合并外边距的方式被称为折叠, 并且因而所结合成的外边距称为折叠 外边距。
折叠结果遵循下列计算规则:
两个相邻的外边距都是正数时, 折叠结果是它们两者之间较大的值。 两个相邻的外边距都是负数时, 折叠结果是两者绝对值的较大值。 两个外边距一正一负时, 折叠结果是两者的相加的和。
rgba()和 opacity 的透明效果有什么不同?
opacity 作用于元素, 以及元素内的 所有内容的透明度
rgba()只作用于元素的颜色或其背景色。 ( 设置 rgba 透明的元素的子元素不会继承透明 效果! )
24.css 中可以让文字在垂直和水平方向上重叠的两个属性是什么?
垂直方向: line-height
水平方向: letter-spacing
那么问题来了, 关于 letter-spacing 的妙用知道有哪些么? 答案:可以用于消除 inline-block 元素间的换行符空格间隙问题
如何垂直居中一个浮动元素
方法一: 已知元素的高宽
#div1{
background-color:#6699FF;
width:200px;
height:200px;
position: absolute; //父元素需要相对定位
top: 50%;
left: 50%;
margin-top:-100px ; //二分之一的 height, width
margin-left: -100px;
}
方法二:未知元素的高宽
#div1{
width: 200px;
height: 200px;
background-color: #6699FF;
margin:auto;
position: absolute; //父元素需要相对定位
left: 0;
top: 0;
right: 0;
bottom: 0;
}
那么问题来了, 如何垂直居中一个 ?( 用更简便的方法。 )
#container //<img>的容器设置如下
{
display:table-cell;
text-align:center;
vertical-align:middle;
}
px与em的区别
px 和 em 都是长度单位, 区别是, px 的值是固定的, 指定是多少就是多少, 计算比较容易。 em 得值不是固定的, 并且 em 会继承父级元素的字体大小。
浏览器的默认字体高都是 16px。所以未经调整的浏览器都符合: 1em=16px。那么 12px=0.75em, 10px=0.625em。
描述一个"reset"的CSS文件并如何使用它?了解normalize.css
由于浏览器兼容的问题, 不同的浏览器对标签的默认样式值不同, 若不初始化会造成不同浏 览器之间的显示差异
但是初始化 CSS 会对搜索引擎优化造成小影响
重置样式非常多, 凡是一个前端开发人员肯定有一个常用的重置 CSS 文件并知道如何使用它 们。他们是盲目的在做还是知道为什么这么做呢? 原因是不同的浏览器对一些元素有不同的 默认样式, 如果你不处理, 在不同的浏览器下会存在必要的风险, 或者更有戏剧性的性发生。
你可能会用 Normalize 来代替你的重置样式文件。 它没有重置所有的样式风格, 但仅提供了 一套合理的默认样式值。 既能让众多浏览器达到一致和合理, 但又不扰乱其他的东西( 如粗 体的标题) 。
在这一方面, 无法做每一个复位重置。 它也确实有些超过一个重置, 它处理了你永远都不用 考虑的怪癖, 像 HTML 的 audio 元素不一致或 line-height 不一致。
28.ass、 LESS 是什么? 大家为什么要使用他们?
他们是 CSS 预处理器。 他是 CSS 上的一种抽象层。 他们是一种特殊的语法/语言编译成 CSS。
例如 Less 是一种动态样式语言. 将 CSS 赋予了动态语言的特性, 如变量, 继承, 运算, 函 数. LESS 既可以在客户端上运行 (支持 IE 6+, Webkit, Firefox), 也可一在服务端运行 (借助 Node.js)。
为什么要使用它们?
结构清晰, 便于扩展。
可以方便地屏蔽浏览器私有语法差异。 这个不用多说, 封装对浏览器语法差异的重复处理, 减少无意义的机械劳动。
可以轻松实现多重继承。
完全兼容 CSS 代码, 可以方便地应用到老项目中。 LESS 只是在 CSS 语法上做了扩展, 所 以老的 CSS 代码也可以与 LESS 代码一同编译。
CSS 中可以通过哪些属性定义, 使得一个 DOM 元素不显示在浏览器可视范围内?
display : 隐藏对应的元素但不挤占该元素原来的空间。
visibility: 隐藏对应的元素并且挤占该元素原来的空间。
即是, 使用 CSS display:none 属性后, HTML 元素( 对象) 的宽度、 高度等各种属性值都将 “ 丢失”;而使用 visibility:hidden 属性后, HTML 元素( 对象) 仅仅是在视觉上看不见( 完 全透明) , 而它所占据的空间位置仍然存在。
设置宽高为 0, 设置透明度为 0, 设置 z-index 位置在-1000
CSS 中 link 和@import 的区别
Link 属于 html 标签, 而@import 是 CSS 中提供的
在页面加载的时候, link 会同时被加载, 而@import 引用的 CSS 会在页面加载完成后才会加 载引用的 CSS
@import 只有在 ie5 以上才可以被识别, 而 link 是 html 标签, 不存在浏览器兼容性问题
Link 引入样式的权重大于@import 的引用( @import 是将引用的样式导入到当前的页面中)
BFC 是什么?
BFC( 块级格式化上下文) , 一个创建了新的 BFC 的盒子是独立布局的, 盒子内元素的布局 不会影响盒子外面的元素。
在同一个 BFC 中的两个相邻的盒子在垂直方向发生 margin 重叠 的问题 BFC 是指浏览器中创建了一个独立的渲染区域, 该区域内所有元素的布局不会影响到区域外 元素的布局, 这个渲染区域只对块级元素起作用
html 语义化是什么?
当页面样式加载失败的时候能够让页面呈现出清晰的结构 有利于 seo 优化, 利于被搜索引擎收录( 更便于搜索引擎的爬虫程序来识别)
便于项目的开发及维护, 使 html 代码更具有可读性, 便于其他设备解析。
html 常见兼容性问题?
双边距 BUG float 引起的 使用 display
IE 的双边距 BUG: 块级元素 float 后设置横向 margin, ie6 显示的 margin 比设置的较大。 解决: 加入_display: inline
IE6 双边距 bug:块属性标签 float 后, 又有横行的 margin 情况下, 在 ie6 显示 margin 比设置的大。 浮动 ie 产生的双倍距离 #box{ float:left; width:10px; margin:0 0 0 100px;} 这种情况之下 IE 会产生 20px 的距离, 解决方案是在 float 的标签样式控制中加入 — —display:inline;将其转化为行内属性。 (这个符号只有 ie6 会识别) 渐进识别的方式, 从总体中逐渐排除局部。 首先, 巧妙的使用“ \9” 这一标记, 将 IE 游览器从所有情况中分离出来。 接着, 再次使用“ +” 将 IE8 和 IE7、 IE6 分离开来, 这样 IE8 已经独立识别。
css
.bb{
background-color:#f1ee18;/所有识别 /
.background-color:#00deff\9; /IE6、 7、 8 识别 /
+background-color:#a200ff;/IE6、 7 识别 /
_background-color:#1e0bd1;/IE6 识别 /
}
3 像素问题 使用 float 引起的 使用 dislpay:inline -3px
超链接 hover 点击后失效 使用正确的书写顺序 link visited hover active
Ie z-index 问题 给父级添加 position:relative
Png 透明 使用 js 代码 改
Min-height 最小高度 ! Important 解决’
select 在 ie6 下遮盖 使用 iframe 嵌套
为 什 么 没 有 办 法 定 义 1px 左 右 的 宽 度 容 器 (IE6 默 认 的 行 高 造 成 的 , 使 用 over:hidden,zoom:0.08 line-height:1px)
IE5-8 不支持 opacity, 解决办法:
.opacity {
opacity: 0.4
filter: alpha(opacity=60); /* for IE5-7 /
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; / for IE
8*/
}
IE6不支持PNG透明背景 解决办法:IE6使用gif图片
png24 为的图片在 iE6 浏览器上出现背景 解决方案是做成 PNG8.
浏 览 器 默 认 的 margin 和 padding 不 同 。 解 决 方 案 是 加 一 个 全 局 的 *{margin:0;padding:0;}来统一
IE 下,可以使用获取常规属性的方法来获取自定义属性, 也可以使用 getAttribute()获取自定义属性; Firefox 下,只能使用 getAttribute()获取自定义属性. 解决方法:统一通过 getAttribute()获取自定义属性.
( 条件注释) 缺点是在 IE 浏览器下可能会增加额外的 HTTP 请求数。
Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示, 可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决
IE 下,even 对象有 x,y 属性,但是没有 pageX,pageY 属性; Firefox 下,event 对象有 pageX,pageY 属性,但是没有 x,y 属性
超链接访问过后 hover 样式就不出现了 被点击访问过的超链接样式不在具有 hover 和 active 了解决方法是改变 CSS 属性的排列顺序: L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}
空元素有哪些?
知名的空元素:
<br><hr><img><input><link><meta>
鲜为人知的是:
<area><base><col><command> <embed><keygen><param><source><track><wbr>
CSS的盒子模型?
IE 盒子模型: IE 的 content 部分包含了 border 和 pading;
盒模型: 内容(content)、 填充(padding)、 边界(margin)、 边框(border).
列出 display 的值, 说明他们的作用。position 的值, relative 和 absolute 定位原点是?
block 象块类型元素一样显示。
none 缺省值。 向行内元素类型一样显示。
inline-block 象行内元素一样显示, 但其内容象块类型元素一样显示。
list-item 象块类型元素一样显示, 并添加样式列表标记。
position 的值
*absolute
生成绝对定位的元素, 相对于 static 定位以外的第一个父元素进行定位。
*fixed ( 老 IE 不支持)
生成绝对定位的元素, 相对于浏览器窗口进行定位。
relative
生成相对定位的元素, 相对于其正常位置进行定位。
static 默认值。 没有定位, 元素出现在正常的流中
*( 忽略 top, bottom, left, right z-index 声明) 。
inherit 规定从父元素继承 position 属性的值。
absolute 的 containing block 计算方式跟正常流有什么不同?
若此元素为 inline 元素,则 containing block 为能够包含这个元素生成的第一个和最后一个 inline box 的 padding box (除 margin, border 外的区域) 的最小矩形;
否则则由这个祖先元素的 padding box 构成。
根元素所在的 containing block 被称为 initial containing block,在我们常用的浏览器环境下,指的是原点与 canvas 重合,大小和 viewport 相同的矩形;
对于 position 为 static 或 relative 的元素,其 containing block 为祖先元素中最近的 block container box 的 content box (除 margin, border, padding 外的区域);
对于 position:fixed 的元素,其 containing block 由 viewport 建立;
对于 position:absolute 的元素,则是先找到其祖先元素中最近的 position 属性非 static 的元素,然后判断:
如果都找不到,则为 initial containing block。
哪些CSS属性可以继承?
可继承: font-size font-family color, ul li dl dd dt;
不可继承 : border padding margin width height ;
40.text-align:center 和 line-height 有什么区别?
text-align 是水平对齐, line-height 是行间。
前端笔记---JS
开发人员优化性能时, 一次 js 请求一般情况下有哪些地方会有缓存处理?
dns 缓存, cdn 缓存, 浏览器缓存, 服务器缓存。
split() join() 的区别?
前者是切割成数组的形式, 后者是将数组转换成字符串
事件绑定和普通事件的区别?
事件绑定方式添加事件:
var btn = document.getElementById("hello");
btn.addEventListener("click",function(){
alert(1);
},false);
btn.addEventListener("click",function(){
alert(2);
},false);
执行上面的代码会先alert 1 再 alert 2
而事件绑定(addEventListener)方式添加事件可以添加多个
普通添加事件的方法:
var btn = document.getElementById("hello");
btn.onclick = function(){
alert(1);
}
btn.onclick = function(){
alert(2);
}
执行上面的代码只会alert 2
区别:
普通事件:
如果说给同一个元素绑定了两次或者多次相同类型的事件, 那么后面的绑定会覆盖前面 的绑定
不支持 DOM 事件流 事件捕获阶段=>目标元素阶段=>事件冒泡阶段
事件绑定(addEventListener ):
如果说给同一个元素绑定了两次或者多次相同类型的事件, 所有的绑定将会依次触发
支持 DOM 事件流的
进行事件绑定传参不需要 on 前缀
addEventListener(“click”,function(){},true);//此时的事件就是在事件冒泡阶段执行
ie9 开始, ie11 edge: addEventListener
ie9 以前: attachEvent/detachEvent
1、 进行事件类型传参需要带上 on 前缀
2、 这种方式只支持事件冒泡, 不支持事件捕获
事件绑定是指把事件注册到具体的元素之上, 普通事件指的是可以用来注册的事件
4.IE和DOM事件流的区别?
1.执行顺序不一样
2.参数不一样
3.事件加不加 on
4.this 指向问题
IE9 以前: attachEvent(“ onclick” )、 detachEvent(“ onclick” )
IE9 开始跟 DOM 事件流是一样的, 都是 addEventListener
IE 和标准下有哪些兼容性的写法
var ev = ev || window.event
document.documentElement.clientWidth || document.body.clientWidth
var target = ev.srcElement||ev.target
call与apply的区别?
call 和 apply 相同点:
都是为了用一个本不属于一个对象的方法, 让这个对象去执行
toString.call([],1,2,3)
toString.apply([],[1,2,3])
Object.call(this,obj1,obj2,obj3)
Object.apply(this,arguments)
JavaScript this 指针、 闭包、 作用域 ?
this: 指向调用上下文
闭包: 内层作用域可以访问外层作用域的变量
闭包就是能够读取其他函数内部变量的函数。
闭包的缺点: 滥用闭包函数会造成内存泄露, 因为闭包中引用到的包裹函数中定义的变量都
永远不会被释放, 所以我们应该在必要的时候, 及时释放这个闭包函数
作用域: 定义一个函数就开辟了一个局部作用域, 整个 js 执行环境有一个全局作用域
8.什么是事件委托?
符合 W3C 标准的事件绑定 addEventLisntener /attachEvent
让利用事件冒泡的原理, 让自己的所触发的事件, 让他的父元素代替执行!
如何住址事件冒泡和默认事件?
e. stopPropagation();//标准浏览器
event.canceBubble=true;//ie9 之前阻止默认事件
为了不让 a 点击之后跳转, 我们就要给他的点击事件进行阻止
return false
e.preventDefault();
document load与document ready的区别?
Document.onload 是在结构和样式加载完才执行 js
window.onload: 不仅仅要在结构和样式加载完, 还要执行完所有的样式、 图片这些资源文 件, 全部加载完才会触发 window.onload 事件
Document.ready 原生中没有这个方法, jquery 中有 $().ready(function)
””和“ =”的不同 ?
前者会自动转换类型
后者不会
1” 1”
null undefined
===先判断左右两边的数据类型, 如果数据类型不一致, 直接返回 false
之后才会进行两边值的判断
JavaScript的同源策略?
一段脚本只能读取来自于同一来源的窗口和文档的属性, 这里的同一来源指的是主机名、 协
议和端口号的组合
http,ftp:协议
主机名; localhost
端口名: 8
同源策略带来的麻烦: ajax 在不 0:http 协议的默认端口
https:默认端口是 8083
同域名下的请求无法实现,
如果说想要请求其他来源的 js 文件, 或者 json 数据, 那么可以通过 jsonp 来解决
JavaScript的数据类型都有什么?
基本数据类型: String,Boolean,number,undefined,object,Null
引用数据类型: Object(Array,Date,RegExp,Function)
那么问题来了, 如何判断某变量是否为数组数据类型?
方法一.判断其是否具有“ 数组性质” , 如 slice()方法。 可自己给该变量定义 slice 方法,
故有时会失效
方法二.obj instanceof Array 在某些 IE 版本中不正确
方法三.方法一二皆有漏洞, 在 ECMA Script5 中定义了新方法 Array.isArray(), 保证其兼容性, 最好的方法如下:
toString.call(18);//” [object Number]”
toString.call(“ ” );//” [object String]”
解析这种简单的数据类型直接通过 typeof 就可以直接判断toString.call 常用于判断数组、 正则这些复杂类型
toString.call(/[0-9]{10}/)//” [object RegExp]”
if(typeof Array.isArray="undefined"){
Array.isArray = function(arg){
return Object.prototype.toString.call(arg) ="[object Array]"
};
}
内存泄漏
前端笔记---综合
webstorm使用技巧
Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/…/ )
Ctrl+X 删除行
Ctrl+D 复制行
选中文本,按Ctrl+Shift+F7 高亮显示所有该文本,按Esc高亮消失。(因为这个功能我就可以发放心的放弃sublime了)
Ctrl+G 查找行
Ctrl+B或Ctrl+鼠标左键单击 快速打开光标处的类或方法,(NB的功能)
Ctrl+Shift+Up/Down 代码向上/下移动。
写代码,按Tab 生成代码
Ctrl + Alt + B Go to implementation(s) 跳转方法实现处
F2 或Shift+F2 高亮错误或警告快速定位
Ctrl + Shift + I Open quick definition lookup 打开定义快速查找
Alt + Up/Down Go to previous/next method 跳转到上一个/下一个方法
Ctrl+E 最近打开的文件
Alt+F1 查找代码所在位置
Ctrl+Alt+L 格式化代码
Ctrl+R 替换文本
Ctrl+F 查找文本
Ctrl+P 方法参数提示
F3 查找下一个
Shift+F3 查找上一个
alt+Shift+F 将当前文件加入收藏夹
ctrl+alt+s 打开配置窗口
ctrl+Shift+N 通过文件名快速查找工程内的文件(必记)
ctrl+Shift+alt+N 通过一个字符快速查找位置(必记)
Shift+enter 重新开始一行(无论光标在哪个位置)
Ctrl + Alt + T with…(if, else, try, catch, for, etc)用 * 来围绕选中的代码行,( * 包括 if 、 while 、 try catch 等)
Ctrl + Shift + U Toggle case for word at caret or selected block 光标所在位置大小写
Ctrl + Delete Delete to word end 删除文字结束
Ctrl + Backspace Delete to word start 删除文字开始
Ctrl + E Recent files popup 弹出最近打开的文件
F11 Toggle bookmark 切换标记,我觉得叫书签更好,就是sublime text 的F2
Ctrl + Shift + F12 Toggle maximizing editor 切换最大化编辑器
Alt + Shift + F Add to Favorites 添至收藏夹
Shift+F6 重构-重命名
公司的前端开发流程和前端架构是怎么做的呢?
通过框架(vue,angular,kissy)组织,把html、css、js写成模块工具或框架(webpack,broswerify,seajs,kissy)组织各种模块化(cmd,amd,kmd)、组件化再用工具(grunt,gulp)打包解析压缩合并成html、css和js,最后版本控制(git,svn,cvs)发布到静态资源平台(cdn),后端提供接口前端渲染或是后端(有时候权限也在前端那儿)将前端html文件套成后端语言模板发布上线。总而言之,离不开“三化”——模块化,组件化,工程化
这些公司里基本上一个大部门会有自己的独立的开发流程和架构不过也不外乎这些玩意编码规范CSS、JS、HTML小文件开发引入规范AMDCMD自定义等项目目录结构规范lib、或组件开发(使用)规范codereview版本库使用及方式gitsvn主干开发、分支上线或相反等上线方式是否强制经过codereview前端独立上线前后端一起上线运维上线等辅助工具代码扫描类语法、规范符合与否扫描注释扫描提取文档代码修正类CSS 补全JS 修正语法树、补全IDE代码合并打包类图片压缩类版本控制器
目前分为手机端和PC端两种开发流程手机端:
手机端: 前后端完全分离,采用Vue.js作为开发框架,NPM作为包管理,Less组织样式,Webpack作为模块加载工具,Gulp作为打包工具,反正是前端使用怎么方便怎么来,各种新奇的玩具都可以用上,后端只需要提供数据接口,开发完成后直接打包把静态资源丢到CDN上,这样的模式开发起来最舒服。
PC端: 因为考虑到SEO问题,所以不能采用前后端完全分离的方式。考虑到后台是Java开发,所以不能引进nodejs作为中间层渲染。那么采用velocity模版作为渲染层,前端产出页面,然后自个按照velocity模版进行占位符填充,然后再丢给后端进行数据渲染,没有问题就可以将页面返回给前端,编译打包等等流程也全部由前端处理,前后端相安无事,前端改改样式,写写js,完全不要依赖后台。
公司一般是用什么工具更新他们的网站代码的?
1、ftp上传(不推荐)。
这是最简单最原始的上传方法。一般是用于空间上还没有任何东西,我们需要把做好的程序上传到空间上去,或者是我们需要对空间上的文件进行删除或者本地上传新的文件,这个过程一般不会设计覆盖和更新。一般如果我们仅仅是更新了空间上已有一个文件文件的代码,我们上传覆盖即可,但是如果整个项目比较大,我们也不知道更改了哪些文件,此时如果全部长传替换也是有些麻烦了。
2、SVN+CRT工具。
一般我们更改版本或者程序也需要团队合作和测试,此时我们需要搭建一个开发环境或者是功能环境,此时我们可以借助SVN这个版本工具来实现团队的合作。当我们测试无误后我们便可以使用CRT将本地开发环境服务器的程序更新推送到生产环境,这样看来这个是一个比较完美的方案。
html与css表格的应用场景
浏览器常用的控件
如何实现表单交互
HTML4改成H5需要哪些改进
script的6个属性
什么是微格式
浏览器的模式对于有什么影响前端开发者
不能作为标识符的单词
插入多个样式表时,网页如何识别 先插入总样式表,然后插入分样式表。
两个样式表中如果有相同内容,后面的回覆盖前面的内容
如何实现段落的首行缩进 用CSS
........................
换行两行之间没有空白,换行后两行之间有空白。如果想让他们没有区别 可以在css中调整
标签的margin与padding值为0
如何将网站转换为html和xhtml或html5
学前端,需要知道的算法
有蒙板和没有蒙板的图片有什么区别
在网页中插入音频、视频有多少种办法。有什么优缺点
Sublime Text 3下Emmet使用技巧
与
标签区别
用工具检查网页是一般检查什么
css面向不同设备时如何设置
用下边框为文本加下划线与用underline(下划线)的区别
当一个网页引用两个相互冲突的css,如何解决
从三万英尺看文本和字体,怎么用css做出来
链接前后的下划线与颜色设置
font-family要怎么写
固定宽度的字体有哪些
字体如何托管,现今制作网站是否用托管
通过字体网站建立自己的字体库
字体的大小设置有什么讲究
常用的字符实体
其他进制与十进制转换
网络链接下面去掉下划线
如何将图像放在浏览器的的中间(css或js)
网页自动刷新时间的长短对用户和开发者有什么影响
常见的内联与块状元素
font元素简写时的顺序
内联元素的margin的重叠机制是怎样的
伪类可以处理哪些问题
层叠的作用,应用场景,效果,规则
流体布局和绝对定位布局
如何提取网页上的图片
img是内联元素,它的特殊在什么地方
css的基本布局方式
背景图片的定位有没有便捷的方式或工具
section,article和div
插入视频产生的问题:格式,加载方面,服务器方面
各种浏览器对视频和图片的支持水平
如何让视频全屏
H5播放器
JS高级进阶
类和对象、this、作用域和闭包、call、apply、bind、继承和原型链、V8的JS新特性
Node.js介绍
Node.js原理和特点、Node.js开发注意事项,环境的安装和开发环境布署。
REPL 可交互式运行环境
操作变量、使用下划线、上下文对象等。
Node.js基础
console、全局作用域和函数、事件处理机制及事件环
模块与npm
核心模块、文件模块、exports、组织与管理模块、模块的属性和包管理工具。
Buffer 操作二进制数据
创建buffer、类型转换、读写buffer和常用方法。
fs 读写文件和目录
读写文件和目录、查看修改文件信息、读写流对象、路径的常用操作。
tcp&udp TCP和UDP和服务器端和客户端通信。
http&https
http原理、cookie、session、创建http服务器、接收请求、转换URL、发送接收响应。
进程与子进程与集群
进程对象和属性、创建多进程程序、cluster集群以及 forever和pm2工具。
加密与压缩
crypto模块和散列算法、公钥加密、压缩和解压缩。
常用模块
os、path、util、async、eventproxy、uuid、md5、promise、express等
数据库
mongodb、redis、mysql、memcached等数据库针对不同场景下的应用。
express
express的cookie、 redisSession、日志、中间件、模板、静态文件的源码实现。
websocket&socket.io
实现双工通信、保存用户数据、广播消息和使用命名空间。
angular
MVC、模块与依赖注入、双向数据绑定MVVM、指令、Filter、Service、Provider等。
linux
阿里云linux的安装、常用命令、VI、包管理、用户管理、进程 管理及node安装布署。
grunt
安装布署,以及常用的uglify、concat、copy、clean、watch等插件在实战中的应用。
yeoman& bower
项目结构生成以及前台框架依赖的管理。
git
git和github的使用,gitignore、checkout、提交、处理冲突、分支合并等功能。
nginx
阿里云服务器的nginx安装布署、反向代理、重定向、负载均衡的配置。