CSS
样式的几种方法,包括内联式样式表、嵌入式样式表、外链式、导入式1.内联式样式表:直接写在现有的元素标签中,比如:
<p style="font-size:24px;">www.jb51.netp>
2.嵌入式样式表:使用
标签嵌入到
HTML
文件的头部中标记中,如:
<style type="text/css">
p{font-size:18px; color:#093;}
style>
3.外链式:使用
标签调用
CSS
文件(最佳实践),如;
<link href="CSS在网页中应用的方式.css" rel="stylesheet" type="text/css" />
4.导入式:也可以使用导入方式
import
,但这种方式和内嵌式一样会占用网页文件的大小,并且有的浏览器解析会有问题,就是先显示网页内容在给网页内容加样式,如:
<style type="text/css">
@import url("css文件")
style>
CSS选择器:
id选择器(#myid
)、类选择器(.myclassname
)、标签选择器(div, h1, p
)、相邻选择器(h1 + p
)、子选择器(ul > li
)、后代选择器(li a
)、通配符选择器(*
)、属性选择器(a[rel="external"
])、伪类选择器(a:hover, li:nth-child
)
可继承的属性:font-size
, font-family
, color
(文本颜色)、line-height(行高)、visibility(可见性)
不可继承的样式:border
, padding
, margin
, width
, height
优先级(就近原则)
!important
> [ id
> class
> tag
]!important
比内联优先级高权重的4个等级定义如下:
第一等:内联样式,如: style=""
,权值为1000。
第二等:ID选择器,如:#content
,权值为100。
第三等:类,伪类和属性选择器,如.content
,权值为10。
第四等:类型选择器和伪元素选择器,如div p
,权值为1。
注:但是某个元素到底用哪个样式,还有3个规则:
h1 {color: blue}
h1 {color: red} //red生效
!important > [ id > class > tag ]
!important
标记,例如: p{ color: gray !important}
标签全部作用超链接标签a
有四个应用场景,一个是链接到外部页面,一个是链接本地页面,还有一个是方便读者的锚点链接,还有一些新的功能,比如打电话和发送邮件,弹出QQ对话框等等。
外部页面链接需要一个完整的网页的地址,看一下具体的例子:
<a href="http://www.baidu.com" target="_blank">百度a>
href
规定的是指向页面的URL
地址,target
属性指的是规定打开链接网页的方式;target
属性的几种属性值的取值分别为:_blank
代表在新窗口中打开页面的链接地址;_self
代表在自身窗口打开页面链接,默认为self
;_parent
代表是在父窗口中打开此网页;_top
代表的是在整个窗口中打开此网页,测试的效果与self
相同;在同一个项目中,
href
的指向为相对路径,此时应该注意相对路径的书写。
<a href="demo02.html" target="_blank">打开demo02a>
在浏览一些网页的时候大都在网页的上方有一个固定住的导航条,上边会列出下方显示内容的版块分区。当点击导航条中的一个版块的时候他会自动的跳转到指定的版块,这是页面内部的区域跳转。上实例:
<p id="part1">第1章p>
<div class="part">div>
<p id="part2">第2章p>
<div class="part">div>
<p id="part3">第3章p>
<div class="part">div>
<div style="position: fixed;top:20px;right: 20px">
<a href="#part1">第1章a>
<a href="#part2">第2章a>
<a href="#part3">第3章a>
div>
分析: 此时点击 导航条的各个区域就会跳转到页面指定的区域。
使用锚点链接的几个重点是:
1:在链接的目的区域设置id
属性,并设置上唯一的一个id
名称。
2:在导航条区域设置a
标签,注意href
属性的属性值是要链接区域的id
值,并且一定要记住带“#”号。
1:发送邮件:
在点击了发送邮件的之后,浏览器会自动开启默认的邮箱软件,并将邮件地址放进接收方中。
<a href="mailto:邮件接收人">发送邮件a>
2:打开QQ:
第一个链接不能打开非好友的对话框,第二个可以打开非好友QQ对话框
<a href="tencent://message/?uin=客服的QQ号&Site=&Menu-=yes">联系客服(不可以打开未添加好友的会话框)a>
<a href="tencent://message/?Menu=yes&uin=客服的QQ号&Site=80fans&Service=300&sigT=45a1e5847943b64c6ff3990f8a9e644d2b31356cb0b4ac6b24663a3c8dd0f8aa12a545b1714f9d45">链接到客服(可以打开未添加好友的会话框)a>
3:拨打电话
这个功能链接多用于移动端的网页,在点击拨打电话之后自动弹出拨号功能并且将电话号码填入;
<a href="tel:13110043538" class="call">拨打客服电话a>
**注意:**这些链接都是可以直接复制过去并且修改邮箱地址,QQ号码,电话之后就可以直接使用。
提升:一个满屏品字布局如何设计?
第一种真正的品字:
三块高宽是确定的;
上面那块用margin: 0 auto;居中;
下面两块用float或者inline-block不换行;
用margin调整位置使他们居中。
第二种全屏的品字布局:
上面的div设置成100%,下面的div分别宽50%,然后使用float或者inline使其不换行。
元素水平居中对齐
1)使用margin对齐(推荐)
2)使用left:50%
3)使用text-align
1)使用filxed(推荐)
2)使用absolute定位
3)使用html和body的width和height填?这个窗口
1)使用float左右浮动
2)使用绝对定位进行左右定位(推荐)
<body>
<div class="main">
<div class="wrapper-up">
<div class="div-square-up">div>
div>
<div class="wrapper-down">
<div class="div-square-left">div>
<div class="div-square-right">div>
div>
div>
body>
CSS元素大的分为两类:块级元素和行内元素
行内元素特点
width
无效。height
无效,但可以通过 line-height 来设置。margin
只有 左右有效,上下无效。padding
只有 左右有效,上下无效。注意元素范围是增大了,但是对元素周围的内容是没影响的。块级元素的特点
行内元素和块级元素对比
margin
和 padding
可以生效。但竖直方向的 margin
和 padding
不能生效。margin
,padding
1. 介绍一下标准的CSS3的盒子模型,与低版本IE的盒子模型有什么不同的?
标准盒子模型( W3C 标准模型):宽度=内容的宽度(content
)+ border
+ padding
+ margin
低版本IE盒子模型(怪异盒子):宽度=内容宽度(content
+border
+padding
)+ margin
上述方式可以通过设置box-sizing
属性来转换
2. box-sizing属性
语法
box-sizing: content-box|border-box|inherit;
content-box
context-box
:W3C的标准盒子模型,设置元素的 height/width
属性指的是content
部分的高/宽border-box
:IE传统盒子模型(怪异盒子)。设置元素的height/width
属性指的是border
+ padding
+ content
部分的高/宽inherit
: 指定 box-sizing 属性的值,应该从父元素继承在html中,默认使用流式布局
流式布局:在一个html
中每个元素都有自己的位置,行元素和行内块元素从左到右,块元素从上到下的布局方式
文档流:在一个页面中,在文档流中的元素都有自己的位置,如果某个元素脱离了文档流,那么它将不再参与流式布局,不再拥有自己的位置。
块元素 如果脱离了文档流,那么它将不再参照父元素的宽度定宽,所以脱离文档流的块元素,如果没有内容,则必须设置宽高,如果有内容,那么它的宽高将取决于它内容的宽高。
static
:静态定位,也是元素默认的定位方式,参与流式布局(在文档流中),不受 top
、bottom
、left
和 right
属性的影响
relative
:相对定位(相对于自身原有的位置进行定位的),不会脱离文档流,依旧参与流式布局,原有的位置依旧还在
absolute
:绝对定位(绝对定位会使元素脱离文档流,不再参与流式布局,即在文档流中不再拥有自己的位置),它会先查看它的父元素是否为静态定位static
(也就是没有设置定位),如果不是,就相对于父元素进行定位,如果是静态定位static
(也就是没有设置定位),那么就查看它父元素的父元素是否为静态定位,一直查找到不是静态定位为止,如果查找到html
都为静态定位,就相对于html
页面进行定位。
所以,如果想让一个元素相对于它的父元素进行定位,那么就把它的父元素定位方式设置成非静态定位即可,一般情况下设置成relative
相对定位,因为相对定位不会破坏父元素的流式布局
fixed
:固定定位,会使元素脱离文档流,不再参与流式布局,在文档流中将没有它的位置
sticky
:粘性定位,元素根据用户的滚动位置进行定位。不会脱离文档流。粘性元素根据滚动位置在相对(relative
)和固定(fixed
)之间切换。起先它会被相对定位,直到在视口中遇到给定的偏移位置为止 - 然后将其“粘贴”在适当的位置(比如 position:fixed
)。
FC(Formatting Context)
它是W3C CSS2.1规范中的一个概念,定义的是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。
常见的Formatting Context有:
下面就来介绍IFC和BFC的布局规则。
1. IFC 行内格式化上下文: Inline Formatting Context
IFC布局规则:
在行内格式化上下文中,框(boxes
)一个接一个地水平排列,起点是包含块的顶部。水平方向上的margin
,border
和padding
在框之间得到保留。框在垂直方向上可以以不同的方式对齐:它们的顶部或底部对齐,或根据其中文字的基线对齐。包含那些框的长方形区域,会形成一行,叫做行框。
2. BFC 块级格式化上下文:block formatting context)
BFC布局规则
BFC
规定了内部的Block Box
如何布局。- 内部的
Box
会在垂直方向上一个接一个放置。Box
垂直方向的距离由margin
决定,属于同一个BFC
的两个相邻Box
的margin
会发生重叠。- 每个元素的
margin box
的左边,与包含块border box
的左边相接触。BFC
的区域不会与float box
重叠。BFC
是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。- 计算
BFC
的高度时,浮动元素也会参与计算。
满足下列条件之一就可触发BFC
- 根元素或其它包含它的元素
- 浮动 (元素的
float
不是none
)- 绝对定位的元素 (元素具有
position
为absolute
或fixed
)- 非块级元素具有
display: inline-block,table-cell, table-caption, flex, inline-flex
- 块级元素具有
overflow
,且值不是visible
浮动元素会造成父元素高度塌陷的问题
清除浮动的方式
- 伪元素,确实存在的结构,但是没有结构的元素,权重值是1和tag一样
伪元素是在元素当中,天生就存在的元素,我们可以通过css选择器选中他们,然后对他们进行一些操作,比较常见的有::after ::before
这两个表示在元素逻辑的最后面和最前面!!!
.box::after {
content: ""; // 伪元素独有的属性,这里将伪元素的内容设置为空
display: block; // 伪元素天生就是行级元素,在清楚浮动的时候要改变该属性
clear: both; //清楚浮动的影响
}
div
定义height
给父级元素.
box
设置了float
属性之后,同样可以清楚浮动流,这是为什么呢?
原因是设置了position: absolute; float: left / right
的元素,它们会自动变成block
元素(能设置宽高)。
div
标签 并添加样式clear:both
。overflow
为hidden
或auto
。div
定义zoom
(针对ie6、ie7当中没有伪元素这样的概念).wrapper {
zoom:1; //视口同比例放大还是缩小,1就是不变
_zoom: 1; //只有ie6可以识别
}
参考文章:浮动模型和清除浮动
inline
(默认)–内联
none
–隐藏
block
–块显示
table
–表格显示
list-item
–项目列表
inline-block
–内联块元素
display
是CSS
中最重要的用于控制布局的属性。每个元素都有一个默认的 display
值,这与元素的类型有关。对于大多数元素它们的默认值通常是 block
或 inline
。一个
block
元素通常被叫做块级元素。一个inline
元素通常被叫做行内元素。
block
div
是一个标准的块级元素。一个块级元素会新开始一行并且尽可能撑满容器。其他常用的块级元素包括 p、 form
和HTML5中的新元素: header
、 footer
、 section
等等。
inline
span是一个标准的行内元素。一个行内元素可以在段落中 像这样
包裹一些文字而不会打乱段落的布局。 a
元素是最常用的行内元素,它可以被用作链接。
none
另一个常用的display
值是 none
。一些特殊元素的默认display
值是它,例如 script
。
display:none
通常被 JavaScript
用来在不删除元素的情况下隐藏或显示元素。它和visibility
属性不一样。把 display
设置成 none
不会保留元素本该显示的空间,但是 visibility: hidden;
还会保留。
display:none 与 visibility:hidden opacity:0的区别
inline-block
同时具有block
的宽高特性又具有inline的同行元素特性
<style>
.inline{display:inline; width:100px; height:100px; padding:5px; background-color:#F00;}
.block{display:block; width:100px; height:100px; padding:5px;background-color:#0f0;}
.inline-block{display:inline-block; width:100px;height:100px; padding:5px;background-color:#00f;}
style>
<body>
<span class="inline">inlinespan>inline
<span class="block">blockspan> block
<span class="inline-block">inline-blockspan>inline-block
body>
inline
特性
我们发现内联对象inline
给它设置属性height
和width
是没有用的,致使它变宽变大的原因是:内部元素的宽高+padding
。观察inline
对象的前后元素我们会发现inline
不单独占一行,其它元素会紧跟其后。
block
特性
块对象block
是可以设置宽高的,但是它的实际宽高是本身宽高+padding
。观察block
的前后元素我们会发现block
要单独占一行。
inline-block
特性
inline-bloc
k既具有block
的宽高特性又具有inline的同行元素特性。也就是说,当我们想要让一个元素既不独占一行,又可以设置其宽高属性的时候,我们就可以选择inline-block了。
解决
margin
重叠问题
在重合元素外包裹一层容器,并触发该容器生成一个BFC
。
1、外层容器overflow: hidden;
2、外层容器:position: absolute;
或者fixed
3、外层容器:display: table
<div class="top">div>
<div class="box">
<div class="down">div>
div>
/*下面是css代码*/
.top{
margin-bottom: 100px;
width: 100px;
height: 150px;
background: #f66;
}
.down{
margin-top: 100px;
height: 200px;
background: #fcc;
}
.box{
/*盒子down的外面包一个div,通过改变此div的属性使两个盒子分属于两个不同的BFC,
以此来阻止margin重叠*/
overflow: hidden; //此时已经触发了BFC属性。
}
在一般的PC端网页制作过程中,
px
和em
用的比较多,在移动端一般采用rem
。
1.px
px
单位名称为像素,像素是固定大小的单元,用于屏幕媒体(即在电脑屏幕上读取)。一个像素等于电脑屏幕上的一个点 (是你屏幕分辨率的最小分割)。许多网页设计师在web文档使用像素单位以生产浏览器渲染的像素完美呈现的网站。
像素单元的一个问题是,它没有为视障读者的扩展,以适应移动设备。
2、em
浏览器的默认字体高都是
16px
。所有未经调整的浏览器都符合:1em=16px
参考物是父元素的font-size
,具有继承的特点。如果自身定义了font-size
按自身来计算(浏览器默认字体是16px
),整个页面内1em
不是一个固定的值。
em
单位有如下特点
em
的值并不是固定的;em
会继承父级元素的字体大小。
使用em
需要注意以下几点body
选择器中声明Font-size=62.5%
;
将你的原来的px
数值除以10
,然后换上em
作为单位;
重新计算那些被放大的字体的em
数值。避免字体大小的重复声明。
3、rem
rem
是CSS3新增的一个相对长度单位,只相对根目录即HTML
元素
所以我们只要在html
标签上设置字体大小为标准,文档中的字体大小都会以此为参照
html{font-size:62.5%; /* 10÷16=62.5% */}
body{font-size:12px;font-size:1.2rem ; /* 12÷10=1.2 */}
p{font-size:14px;font-size:1.4rem;}
兼容性:IE9+,Firefox、Chrome、Safari、Opera 的主流版本都支持,为了兼容不支持
rem
的浏览器,我们需要在rem
前面写上对应的px
值,这样不支持的浏览器可以优雅降级。
在配合响应式网页中建议根据媒体查询来改变
font-size
的大小
html{font-size:20px;} /*chorme下设置为10px无效,推荐设置为20px,1rem=20px*/
@media screen and (max-width:768px){ /*手机屏幕*/
html{font-size: 15px;}
}
@media screen and (min-width: 768px) and (max-width:992px){ /*平板屏幕*/
html{font-size: 20px;}
}
@media screen and (min-width: 992px){ /*电脑屏幕*/
html{font-size: 25px;}
}
4、%
百分比单位更像
em
单位,除了一些根本性的差异。首先,当前的字体大小等于100%
(比如12 pt = 100%
)。当使用百分比单位,你的文字在移动设备上仍然保持完全的可伸缩性和可访问性。
一般来说,1 em = 16 px = 100%
5、vw
css3新单位,
viewpoint width
的缩写,视窗宽度,1vw
等于视窗宽度的1%
。
举个例子:浏览器宽度1200px
,1 vw = 1200px/100 = 12 px
。
6、vh
css3新单位,
viewpoint height
的缩写,视窗高度,1vh
等于视窗高度的1%
。
举个例子:浏览器高度900px
,1vh = 900px/100 = 9 px
。
7、vm 兼容性较差
css3新单位,相对于视口的宽度或高度中较小的那个。其中最小的那个被均分为100单位的vm
举个例子:浏览器高度900px,宽度1200px,取最小的浏览器高度, 1 vm = 900px/100 = 9 px。
问题一:为什么一开始在css样式中给body设置font-size:62.5%?
font-size=62.5%
这就使em
值变为16px*62.5%=10px
。这样1em=10px,1.2em=12px
利于我们进行换算。
问题二:
在谷歌浏览器运行以下代码,1em是显示多大的字体?
body {
font-size: 62.5%
}
p {
font-size:1em;
}
谷歌浏览器强制最小字体为12号,即使设置成
10px
最终都会显示成12px
,当把html
的font-size
设置成10px
,子节点rem
的计算还是以12px
为基准。
Sass
、Less
和Stylus
CSS 预编译处理,从字面上理解,就是预先编译处理CSS。它从以下几个方面提升了CSS开发的效率
核心功能均围绕
通过媒体查询可以为不同大小和尺寸的媒体定义不同的CSS,适应相应的设备的显示。
里边<link rel="stylesheet" type="text/css" href="xxx.css" media="only screen and (max-device-width:480px)">
@media only screen and (max-device-width:480px) {/css样式/}
HTML5的Web Socket
可以让服务器主动向客户端发送消息,非常适合开发聊天室,多人游戏等协作应用。
Web Worker
能够让JavaScript正真意义上实现多线程,并擅长处理大数据计算。
1. Web Socket
Web Socket是一种协议,本质和http
,tcp
一样。它的url
前缀是ws://
或者wss://
,后者是加密的。为了使用Web Socket
,需要在Web
服务器上运行特殊程序,负责协调前后台通信。
以前,为了实现客户端和服务端长连接,一般采用setInterval/setTimout
轮询,或者XmlHttpRequest
长轮询,但是这些方案不算是真正意义上的服务器推送。Web Socket
出现之后,让网页和Web
服务器保持持久连接,并且,Web
服务器可以随时让客户端推送消息。
实现的核心就是WebSocket
对象,监听事件的API有:onopen
,onmessage
,onclose
,onerror
,触发事件的API有:send
,close
。下面是一个简单的客户端例子:
var socket;
$("#connect").click(function(event){
// 初始化WebSocket对象
socket = new WebSocket("ws://127.0.0.1:8080/getLog");
// 连接建立后触发
socket.onopen = function(){
console.log("Socket has been opened");
}
// 从服务器收到消息后触发
socket.onmessage = function(msg){
console.log("get log: " + msg.data);
}
// 连接关闭时触发
socket.onclose = function() {
alert("Socket has been closed");
}
// 连接出现问题时触发
socket.onerror = function() {
console.log(“Web Socket Error!”);
}
});
$("#send").click(function(event){
// 客户端向服务端发送消息
socket.send("send from client"); }
);
$("#close").click(function(event){
// 关闭连接
socket.close();
})
2. Web Worker
Web Worker
是一个独立的JavaScript
线程,运行在后台,适合做费时的大数据计算。特点有:
window
或者document
对象worker
线程,每个worker
代码都要放在一个独立的JS
文件中HTML5提供Worker
对象创建新线程,主页面与Web Worker
线程通过postMessage
传递;通过添加onmessage
事件监听消息变化,获取接受到的消息。下面是一个简单的例子:
/*------------主线程 index.js---------------*/
var data = {"name": "主线程", index: 1};
var myWorker = new Worker("subworker.js");
// 主线程监听消息事件
myWorker.addEventListener("message", function (oEvent) {
console.log("工作线程的结果:" + oEvent.data["name"] + oEvent.data["index"]);
}, false);
// 客户端发送消息
myWorker.postMessage(data);
$("#stop").click(function () {
// 停止web worker
myWorker.terminate();
});
/*------------子线程 subworker.js---------------*/
// 子线程监听消息事件
onmessage = function (oEvent) {
var data = oEvent.data;
data["name"] = "我是子线程";
// 子线程向主线程发送消息
postMessage(data);
};
/* 代码实例 */
div {
width: 40px;
height: 40px;
border-radius: 50%;
background: #0ff;
animation: move 2s linear 3 alternate both;
}
@keyframes move {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(200px, 0);
}
}
meta
声明的viewport
。
SEO(Search Engine Optimization):汉译为搜索引擎优化。搜索引擎优化是一种利用搜索引擎的搜索规则来提高目前网站在有关搜索引擎内的自然排名的方式。SEO是指为了从搜索引擎中获得更多的免费流量,从网站结构、内容建设方案、用户互动传播、页面等角度进行合理规划,使网站更适合搜索引擎的索引原则的行为。
title
、description
、keywords
:搜索对着三项的权重逐个减小,title
值强调重点即可,重要关键词出现不要超过2次,而且要靠前,不同页面title
要有所不同;description
把页面内容高度概括,长度合适,不可过分堆砌关键词,不同页面description
有所不同;keywords
列举出重要关键词即可iframe
:搜索引擎不会抓取iframe
中的内容alt
HTML5常用的新特性
html5新特性总结
谈谈CSS预处理器
1、伪类
CSS 伪类用于向某些选择器添加特殊的效果
常用的伪类
2、伪元素
CSS 伪元素用于向某些选择器设置特殊效果
3、伪类和伪元素的区别
伪类和伪元素的比较实例
50道CSS基础面试题(附答案)
css的几个拷问项