列表:
总结1:CSS icon和切图
总结2: CSS 字体
总结3:CSS3动画解决方案(含JS)
CSS实战总结
总结1:CSS icon和切图
CSS Sprite
二、CSS Sprite
1、俗称“雪碧图
”或“精灵图
”指将不同的图片、图标合并在一张图上。
2、作用:使用CSS Sprite 可以减少网络请求(如每一张小icon图片都会产生加载时间),提高网页加载性能。
3、使用:利用background-position,对图标进行位置偏移
字体图标
background: url(./xx.ipg)
前言
需求
image
CSS Sprites
icon font
CSS icon
SVG
一、用5种方式实现一个页面有多个小图标
1、使用imag实现
注意:(1)img的大小设置
(2)img的vertical-align
(3)请求数过多
二、CSS Sprites
CSS精灵图
优点:解决请求过多的问题
缺点:无法缩放;不好修改
使用:
(1)写代码
两个图标,用
同样的banckground-image,只是用了
不同的background-position
(2)用命令行:
sprity create build resource/*.png -s style.css
(3)用在线工具:http://cn.spritegen.website-performance.org
三、icon Font
将字体做成图标
1、制作字体文件
2、声明font-family
- 使用本地连接
- 使用第三方连接
3、使用font-family、
- 使用HTML实体
-
使用CSS:before
总结2: CSS 字体
七、字体图标的实现
当你写完带有字体的html文件时,在浏览器打开页面时,浏览器会读取 HTML 文件进行解析渲染。当读到「饥饿」两个字时会转换成对应的 unicode码(一种识别字体的特定编号)。再根据HTML 里设置的 font-family (如果没设置则使用浏览器默认设置)去查找电脑里(如果有自定义字体@font-face ,则加载对应字体文件)对应字体的字体文件。找到文件后根据 unicode 码去查找绘制外形,找到后绘制到页面上。 所以对于第二个范例, 「⛭」是「饥」的 unicede 码,所以用户最终也能看到serf字体样式的「饥」字。
2、实现步骤: 第一步:进入Iconfont-阿里巴巴矢量图标库——选一个喜欢的图标——添加至购物车——添加至项目——复制Unicode码
第二步:进入代码——并未展示图标(说明系统中没有能体现字体图标的该Unicode码,浏览器也未能识别Unicode码)——复制该图标自动生成的css代码(用@font-face来定义一个字体,该字体名可以随便取,这里为:XXX)——定义该字体图标,并设置它css样式如font-family:XXX;等样式
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
<style>
@font-face {
font-family: 'iconfont'; /* project id 645342 */
src: url('//at.alicdn.com/t/font_645342_wae7ml0d77am7vi.eot');
src: url('//at.alicdn.com/t/font_645342_wae7ml0d77am7vi.eot?#iefix') format('embedded-opentype'),
url('//at.alicdn.com/t/font_645342_wae7ml0d77am7vi.woff') format('woff'),
url('//at.alicdn.com/t/font_645342_wae7ml0d77am7vi.ttf') format('truetype'),
url('//at.alicdn.com/t/font_645342_wae7ml0d77am7vi.svg#iconfont') format('svg');
}
p{
font-family: iconfont;
font-size: 40px;
}
</style>
</head>
<body>
<p></p>
</body>
</html>
二、关于
《深入理解 CSS:字体度量、line-height 和 vertical-align》
- font-size em-square
- line-height 实际占地高度
- 100px 100px -> 103px
- vertical top middle bottom text-top text-bottom
- 图片下面有空隙
- vertical-align: top
- img{display: block;}
- font-size: 0 傻逼采用
总结3:CSS3动画解决方案(含JS)
(一)JS动画
用原生JS写动画
一、使用 setTimeout 实现(不推荐)
<style>
#ball {
position: absolute;
left:0;
width: 30px;
height: 30px;
background: blue;
border-radius: 50%;
}
</style>
<body>
<div id="ball"></div>
<script>
var offsetX = 500 //计划水平移动的举例
var moveOffset = 0 //当前已移动的距离
var step = 5 //每次移动的距离
function move(){
if(moveOffset < offsetX){
ball.style.left = parseInt(getComputedStyle(ball).left) + step + 'px'
// getComputedStyle(ball) 获取小球滚动的距离
moveOffset += step
}
setTimeout(move,5)
}
move()
</script>
</body>
二、requestAnimationFrame (推荐)
<div id="ball"></div>
<script>
var offsetX = 500 //要水平移动的距离
var moveOffset = 0 //当前已经移动的距离
var step = 5 //每次移动的距离
function move(){
if(moveOffset < offsetX){
ball.style.left = parseInt(getComputedStyle(ball).left) + step + 'px'
moveOffset += step
requestAnimationFrame(move)
}
}
move()
3d效果:http://js.jirengu.com/sizaq 加载: http://js.jirengu.com/tawuf
歌词效果: http://js.jirengu.com/gewof
打字机效果 http://js.jirengu.com/cobeq
3D正方体 http://js.jirengu.com/divih
正方体形变 http://js.jirengu.com/hobij
(二)CSS3 过渡和动画
玩转CSS3 动画与3D特效 - 写代码啦!
一、过渡
在CSS3引入transition之前css没有时间轴,所有的状态变化都是瞬间完成
div{
height:15px;
width:15px;
}
div:hover{
height: 450px;
width: 450px;
}
transition的作用在于,指定状态变化所需要的时间
div{
transition: 1s;
}
2、指定属性
我们还可以指定transition适用的属性,比如只适用于height
transition: 1s height;
这样一来,只有height的变化需要1秒实现,其他变化(主要是width)依然瞬间实现,在同一行transition语句中,可以分别指定多个属性
transition: 1s height, 1s width;
3、delay
但是,这样一来,height和width的变化是同时进行的,跟不指定它们没有差别,我们希望,让height先发生变化,等结束以后,再让width发生变化。实现这一点很容易,就是为width指定一个delay参数
transition: 1s height, 1s 1s width;
上面代码指定,width在1秒之后,再开始变化,也就是延迟(delay)1秒
delay的真正意义在于,它指定了动画发生的顺序,使得多个不同的transition可以连在一起,形成复杂效果
4、transition-timing-function
transition的状态变化速度(又称timing function),默认不是匀速的,而是逐渐放慢,这叫做ease
transition: 1s ease;
除了ease以外,其他模式还包括
- linear:匀速
- ease-in:加速
- ease-out:减速
- cubic-bezier函数:自定义速度模式 演示
看个例子
transition: 1s height cubic-bezier(.83,.97,.05,1.44);
语法
transition的完整写法如下
transition: 1s 1s height ease;
这其实是一个简写形式,可以单独定义成各个属性
transition-property: height;
transition-duration: 1s;
transition-delay: 1s;
transition-timing-function: ease;
5、注意事项
- 目前,各大浏览器(包括IE 10)都已经支持无前缀的transition,所以transition已经可以很安全地不加浏览器前缀
- transition需要明确知道,开始状态和结束状态的具体数值,才能计算出中间状态,none到block之类的是不行的
- transition是一次性的,不能重复发生,除非一再触发
二、animation
transition 比较简单,animation可以帮我们实现复杂的动画,使用animation我们首先需要定义动画过程,也就是关键帧
@keyframes rainbow {
0% { background: #c00; }
50% { background: orange; }
100% { background: yellowgreen; }
}
rainbow效果一共有三个状态,分别为起始(0%)、中点(50%)和结束(100%)。如果有需要,完全可以插入更多状态,值是每个状态下的属性值
定义了关键帧之后就可以给DOM元素绑定动画了,和事件很像
div:hover {
animation: 1s rainbow;
}
当鼠标悬停在div元素上时,会产生名为rainbow的动画效果,持续时间为1秒,默认情况下,动画只播放一次。加入infinite关键字,可以让动画无限次播放
div:hover {
animation: 1s rainbow infinite;
}
也可以指定动画具体播放的次数,比如3次
div:hover {
animation: 1s rainbow 3;
}
心跳demo
1、animation-fill-mode
动画结束以后,会立即从结束状态跳回到起始状态。如果想让动画保持在结束状态,需要使用animation-fill-mode属性。
div:hover {
animation: 1s rainbow forwards;
}
animation-fill-mode可以使用下列值
- none:默认值,回到动画没开始时的状态
- forwards:让动画停留在结束状态
- backwards:让动画回到第一帧的状态
- both: 根据animation-direction(见后)轮流应用forwards和backwards规则
2、animation-direction
动画循环播放时,每次都是从结束状态跳回到起始状态,再开始播放。animation-direction属性,可以改变这种行为
@keyframes rainbow {
0% { background-color: yellow; }
100% { background: blue; }
}
默认情况是,animation-direction等于normal
div:hover {
animation: 1s rainbow 3 normal;
}
此外,还可以等于取alternate、reverse、alternate-reverse等值。它们的含义见下图(假定动画连续播放三次)。
简单说,animation-direction指定了动画播放的方向,最常用的值是normal和reverse。浏览器对其他值的支持情况不佳,应该慎用
3、语法
同transition一样,animation也是一个简写形式
div:hover {
animation: 1s 1s rainbow linear 3 forwards normal;
}
这是一个简写形式,可以分解成各个单独的属性
div:hover {
animation-name: rainbow;
animation-duration: 1s;
animation-timing-function: linear;
animation-delay: 1s;
animation-fill-mode:forwards;
animation-direction: normal;
animation-iteration-count: 3;
}
keyframes关键字用来定义动画的各个状态,它的写法相当自由
@keyframes rainbow {
0% { background: #c00 }
50% { background: orange }
100% { background: yellowgreen }
}
0%可以用from代表,100%可以用to代表,因此上面的代码等同于下面的形式
@keyframes rainbow {
from { background: #c00 }
50% { background: orange }
to { background: yellowgreen }
}
如果省略某个状态,浏览器会自动推算中间状态,所以下面都是合法的写法。
@keyframes rainbow {
50% { background: orange }
to { background: yellowgreen }
}
@keyframes rainbow {
to { background: yellowgreen }
}
甚至,可以把多个状态写在一行。
@keyframes pound {
from,to { transform: none; }
50% { transform: scale(1.2); }
}
另外一点需要注意的是,浏览器从一个状态向另一个状态过渡,是平滑过渡。steps函数可以实现分步过渡。
div:hover {
animation: 1s rainbow infinite steps(10);
}
4、animation-play-state
有时,动画播放过程中,会突然停止。这时,默认行为是跳回到动画的开始状态,如果想让动画保持突然终止时的状态,就要使用animation-play-state属性。
div {
animation: spin 1s linear infinite;
animation-play-state: paused;
}
div:hover {
animation-play-state: running;
}
三、工具
CSS3 Tool
【CSS使用】 实战总结
(CSS3)box-sizing是什么设置CSS盒模型为标准模型或IE模型。标准模型的宽度只包括content,二IE模型包括border和padding box-sizing属性可以为三个值之一:
- content-box,默认值,只计算内容的宽度,border和padding不计算入width之内
- padding-box,padding计算入宽度内
- border-box,border和padding计算入宽度之内
CSS 引入的方式有哪些? link 和@import 的区别是?
有四种:内联(元素上的style属性)、内嵌(style标签)、外链(link)、导入(@import) link和@import的区别:
- link是XHTML标签,除了加载CSS外,还可以定义RSS等其他事务;@import属于CSS范畴,只能加载CSS。
- link引用CSS时,在页面载入时同时加载;@import需要页面网页完全载入以后加载。
- link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持。
- link支持使用Javascript控制DOM去改变样式;而@import不支持。
( CSS3 )"nth-child"和"nth-of-type"的区别
“nth-child”选择的是父元素的子元素,这个子元素并没有指定确切类型,同时满足两个条件时方能有效果:其一是子元素,其二是子元素刚好处在那个位置;“nth-of-type”选择的是某父元素的子元素,而且这个子元素是指定类型。 元素:nth-child(odd) 奇数设置样式
元素:nth-child(even) 偶数设置样式
元素:nth-child(1)有两个同样元素的第一个
元素:nth-type-of(1)这种元素类型的第一个
浮动的问题
- 行内元素能发现浮动元素,一旦为其设置float或者position,便有了块级元素可设置宽高的属性
- 块级元素,固定宽高+float
- 清除浮动,父元素增加 .clearfix::before{content:'';display:block;clear:both;}
定位的问题
- position: relative; 相对定位,相对于它本身原先位置做的位置偏移,在文档流中的位置大小不变
- position: absolute; 绝对定位,选一个子元素作为参考点进行绝对定位position: absolute;(相当于有了浮动的特性),然后父元素要相应设置相对定位position: relative;
- 设置了position: absolute; 绝对定位,行内元素可以设置宽高
boder-radius:4px,边框圆角
transform:translate(50%,-50%)
子元素用position:absolution; 父元素要对应地用position:relative
css透明度,用rgba比用opacity好
css如果铺满整个页面,那么就height:100%
经常会问:
经常会问 line-height:50%;line-height:.5的区别。
整理十种css垂直居中的实例
一、table自带垂直居中属性代码如下:
<table class="parent">
<tr>
<td class="child">
一串文字一串文字一串文字一串文字一串文字一串文字一串文字
</tr>
</table>
前提: 父元素:position:relative 子元素:position:absolute二、transform:translate(-50%,50%)
代码如下:
<div class="parent">
<div class="child">
一串文字一串文字一串文字一串文字一串文字一串文字一串文字一串文字一串文字一串文字
</div>
</div>
.parent{
height: 600px;
border: 1px solid red;
position: relative;
}
.child{
border: 1px solid green;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
}
三、margin-top:-50px; margin-left:-150px; 代码如下:
<div class="parent">
<div class="child">
一串文字一串文字一串文字一串文字一串文字一串文字一串文字一串文字一串文字一串文字
</div>
</div>
.parent{
height: 600px;
border: 1px solid red;
position: relative;
}
.child{
border: 1px solid green;
width: 300px;
position: absolute;
top: 50%;
left: 50%;
margin-left: -150px;
height: 100px;
margin-top: -50px;
}
四、margin:auto ; +top: 0; bottom: 0; left: 0; right: 0; 代码如下
<div class="parent">
<div class="child">
一串文字一串文字一串文字一串文字一串文字一串文字一串文字一串文字一串文字一串文字
</div>
.parent{
height: 600px;
border: 1px solid red;
position: relative;
}
.child{
border: 1px solid green;
position: absolute;
width: 300px;
height: 200px;
margin: auto;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
五、display: flex; +justify-content: center; +align-items: center; 代码如下:
<div class="parent">
<div class="child">
一串文字一串文字一串文字一串文字一串文字一串文字一串文字一串文字一串文字一串文字
</div>
</div>
.parent{
height: 600px;
border: 3px solid red;
display: flex;
justify-content: center;
align-items: center;
}
.child{
border: 3px solid green;
width: 300px;
}