CSS高级技巧
一、精灵图
1、为什么需要精灵图?
一个网页中往往会应用很多小的背景图片作为装饰,当网页中的图像过多的时候,服务器就会频繁地接收和发送请求图片,造成服务器请求压力过大,这将大大降低页面的加载速度。
因此,为了有效的减少服务器接收和请求的次数,提高页面的加载速度,出现了CSS精灵技术,也称(CSS Sprites、CSS雪碧)
核心原理:将网页中的一些小的背景图片整合到一张大图中,这样服务器只需请求一次就可以了。
2、精灵图(sprites)的使用
使用精灵技术的核心:
1、精灵技术主要针对背景图片使用,将网页中的一些小的背景图片整合到一张大图中
2、这个大图也称为Sprites 精灵图 或者雪碧图
3、移动背景图片的位置,此时可以使用background-position。
4、移动的距离就是这个目标图片的x和y坐标,注意网页中的坐标有所不同
5、因为一般情况都是往上往左移动,所以数值都是负值(网页中的坐标:x轴右边走是正值,y轴往下走是正值)
6、使用精灵图的时候需要精确测量,每个小背景图的大小和位置
二、字体图标
1、字体图标的产生
字体图标使用场景:主要用于显示网页中通用常用的一些小图标
精灵图有很多的优点,但是缺点也很明显
1、图片文件还是比较大的
2、图片放大缩小会失真
3、一旦图片制作完成想要更换很麻烦
此时,有一种技术的出现很好的解决了这个问题,就是字体图标 iconfont。
字体图标可以为前端工程师提供一种方便高效的图标使用方式,展示的是图标,本质是字体。
2、字体图标的优点
- 轻量级 :一个图标字体要比一系列的图像要小,一旦字体加载了,图标就会马上渲染出来,减少了服务器的请求
- 灵活性:本质其实就是文字,可以随便更换颜色、产生阴影、透明效果、旋转等
- 兼容性:几乎支持所有的浏览器,请放心使用。
注意: 字体图标不能替代精灵技术,只是对工作中的图标部分技术的提升和优化。
总结:
1、如果遇到一些结构样式比较简单的小图标,就用字体图标
2、如果遇到一些结构和样式复杂一点的小图片,就用精灵图
字体图标是一些网页常见的小图标,我们直接网上下载即可,因此使用可以分为:
1、字体图标的下载
2、字体图标的引入(引入到我们自己的HTML页面中)
3、字体图标的追加(以后添加新的小图标)
3、字体图标的下载
4、字体图标的引入
以阿里的字库为例
1、登陆https://www.iconfont.cn/
2、选择自己想要的图标库,添加入库
4、下载图标,随便哪个都可以,推荐添加至项目,后期可以往里面加图标
5、打开压缩包会发现以下文件
6、把解压的文件夹放入自己想添加的项目中去
7、具体使用查看demo_index.html 支持三种使用方式,点击想要的使用方式往下拉就有具体使用方法,对应图标的代码啥的见下图
8、成功使用
5、字体图标的追加
如果工作中,原来的字体图标不够用了,我们需要添加新的字体图标到原来的字体文件中
1、把想要的图标添加至我的项目
2、重新下载至本地即可
3、CSS 三角形
网页中常见一些三角形,使用CSS直接画出来就可以,不必做成图片或者自己图标
原理如下:
.d2 {
width: 0;
height: 0;
border-top: 50px solid red;
border-right: 50px solid green;
border-bottom: 50px solid blue;
border-left: 50px solid black;
margin: 100px auto;
}
<div class="d2"></div>
三角形如下:
.box1 {
width: 0;
height: 0;
border: 50px solid transparent;
border-top-color: red;
margin: 100px auto;
}
<div class="box1"></div>
注意: 调整三角形位置实则是调整正方形的位置
四、CSS用户界面样式
什么是界面样式?
所谓的界面样式就是更改一些用户操作样式,以便提高更好的用户体验
- 更改用户的鼠标样式
- 表单轮廓
- 防止表单域拖拽
1、鼠标样式cursor
li {cursor: pointer;}
设置或检索在对象上移动的鼠标指针采用何种系统预定义的光标形状
属性值 | 描述 |
---|---|
default | 小白,默认 |
pointer | 小手 |
move | 移动 |
text | 文本 |
not-allowed | 禁止 |
2、轮廓线outline
给表单添加outline: 0; 或者outline: none; 样式之后,就可以去掉默认的蓝色边框。
input {outline: none;}
3、防止拖拽文本域 resize
实际开发中我们文本域右下角是不可以拖拽的
textarea { resize: none; }
注意:文本域的标签最好写到一行上去
五、vertical-align属性应用
CSS的vertical-align属性的应用场景:经常用于设置图片或者表单(行内块元素)和文字垂直对齐
官方解释:用于设置一个元素的垂直对齐方式,但是它只针对于行内元素或者行内块元素有效
语法:
vertical-align: baseline | top | middle | bottom
值 | 描述 |
---|---|
baseline | 默认,元素放在父元素的基线上 |
top | 把元素的顶端与行中最高元素的顶端对齐 |
middle | 把此元素放置在父元素的中部 |
bottom | 把元素的顶端与行中最低的元素的顶端对齐 |
1、图片、表单和文字对齐
图片、表单都属于行内块元素,默认的vertical-align是基线对齐
2、解决图片底部默认空白缝隙的问题
bug:图片底侧会有一个空隙,原因是行内块元素会和文字的基线对齐。
主要解决方法有两种:
1、给图片添加vertical-align:middle | top | bottom等。(提倡使用的)
2、把图片转化为块级元素:display:block;
六、溢出的文字省略号表示
1、单行文本溢出显示省略号
必须满足三个条件:
1、先强制一行内显示文本white-space:nowrap
2、超出的部分隐藏overflow:hidden
3、用省略号代替超出的部分text-overflow:ellipsis
2、多行文本溢出显示省略号
多行的文本溢出显示省略号,有较大的兼容性问题,适合于webKit浏览器或移动端(移动端大部分是webKit内核)
条件:
overflow:hidden;
text-overflow:ellipsis;
弹性伸缩盒子模型显示:display: -webkit-box;
限制在一个块元素显示的文本行数:-webkit-line-clamp:2;
设置或检索伸缩盒对象的子元素的排列方式:-webkit-box-orient:vertical
更推荐让后台人员来做这个效果,因为后台人员可以设置显示多少子,操作更简单
七、常见布局技巧
1、margin负值的应用
1、让每个盒子margin往左移动-1px正好压住相邻的盒子边框,避免出现两个1px边框相邻等于2px的情况
2、让鼠标经过某个盒子的时候,显示这个盒子的边框,但是可能出现左边盒子的右边框无法显示情况,这时可以提高当前盒子的层级(如果没有定位,则加相对定位(保留位置),如果有定位,则加z-index)
2、文字围绕浮动元素
如何实现在一个盒子中,左边有一个图片,右边有一段文字?
平时做法是左边图片放在一个盒子中添加左浮动,右边文字放在一个盒子中,给定宽高设置右浮动。
高级做法可以利用文字会围绕浮动元素的特点,给左边图片设置一个浮动,文字自然就在右边了
3、行内块的巧妙应用
把div标签下的a标签的display属性设为inline-block,然后设置div标签的text-align:center就可以实现a标签在div中居中并设置width等属性
4、CSS三角强化
div {
width: 0px;
height: 0px;
border-width: 100px 0px 0px 50px;//右边和下边的border为0,相当于正方形右边砍了一半,上面的border变大会导左边边长被拉长,因为上面变高了麽
border-color: transparent transparent transparent green;//再把下面的颜色透明即可
border-style: solid;
}
八、CSS初始化
不同浏览器对有些标签的默认值是不同的,为了消除不同浏览器对HTML文本呈现的差异,照顾浏览器的兼容,我们需要对CSS初始化
简单理解:CSS初始化是指重设浏览器的样式
每个网页都必须要进行CSS初始化
这边以京东为例:
* {
margin: 0;
padding: 0
}
em,
i {
font-style: normal
}
li {
list-style: none
}
img {
border: 0;
vertical-align: middle
}
button {
cursor: pointer
}
a {
color: #666;
text-decoration: none
}
a:hover {
color: #c81623
}
button,
input {
font-family: Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, "\5B8B\4F53", sans-serif
}
body {
-webkit-font-smoothing: antialiased;
background-color: #fff;
font: 12px/1.5 Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, "\5B8B\4F53", sans-serif;
color: #666
}
.hide,
.none {
display: none
}
.clearfix:after {
visibility: hidden;
clear: both;
display: block;
content: ".";
height: 0
}
.clearfix {
*zoom: 1
}