CSS高级技巧 (黑马程序员)

 精灵图

一、为什么需要精灵图

一个网页中往往会应用很多小的背景图像作为修饰,当网页中的图像过多时,服务器就会频繁地接收和发送请求图片,造成服务器请求压力过大,这将大大降低页面的加载速度。

因此,为了有效地减少服务器接收和发送请求的次数,提高页面的加载速度,出现了CSS精灵技术(也称css Sprites、CSS雪碧)。


核心技术:将网页中的一些小背景图像整合到一张大图中,这样服务器只需要一次请求就可以了。


二、用ps查看精灵图的位置

1. 用ps打开图片


2. 选择左边切片工具


3. 框出你所需要的图片



4. 右键选择 编辑切片选项


5. 得到的x,y就是坐标


三、精灵图的使用

使用精灵图核心:

  1. 精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中。

  2. 这个大图片也称为sprites精灵图或者雪碧图

  3. 移动背景图片位置,此时可以使用 background-position.

  4. 移动的距离就是这个目标图片的×和y坐标。注意网页中的坐标有所不同 (x坐标往右走增大,y坐标往下走增大)

  5. 因为一般情况下都是往上往左移动,所以数值是负值

  6. 使用精灵图的时候需要精确测量,每个小背景图片的大小和位置。

使用精灵图核心总结:

  • 精灵图主要针对于小的背景图片使用

  • 主要借助于背景图片位置来实现

  • 一般情况下精灵图都是负值(网页的坐标:x轴右边走是正值,y轴下边走是正值)


<style>
   .box {
      width: 60px;
      height: 60px;
      margin: 100px auto;
      background-color: pink;
      background: url(../Photo/sprites.png) no-repeat;
      background-position: -180px 0px
    }
</style>
<div class="box"></div>

案例:拼出自己的名字

<style>
    .d {
        display: inline-block;
        width: 100px;
        height: 109px;
        background: url(../Photo/24字母.jpg) no-repeat;
        background-position: -362px -7px;
    }

    ​ .i {
        display: inline-block;
        width: 62px;
        height: 108px;
        background: url(../Photo/24字母.jpg) no-repeat;
        background-position: -326px -140px;
    }

    ​ .n {
        display: inline-block;
        width: 113px;
        height: 111px;
        background: url(../Photo/24字母.jpg) no-repeat;
        background-position: -254px -275px;
    }

    ​ .g {
        display: inline-block;
        width: 105px;
        height: 108px;
        background: url(../Photo/24字母.jpg) no-repeat;
        background-position: -98px -141px;
    }
</style>
    
<span class="d"></span>
<span class="i"></span>
<span class="n"></span>
<span class="g"></span>

字体图标

一、字体图标的产生

字体图标使用场景:主要用于显示网页中通用、常用的一些小图标

精灵图是有很多优点,但是缺点很明显:

  1. 图片文件还是比较大的

  2. 图片本身放大缩小会失真

  3. 一旦图片制作完成想要更换非常复杂


此时,字体图标iiconfont很好解决了以上的问题。

字体图标可以为前端工程师提供一种方便高效的图标使用方式,展示的是图标,本质属于字体。

二、字体图标的优点


  • 轻量级:一个图标字体要比一系列的图像要小。一旦字体加载了,图标就会马上渲染出来,减少了服务器请求

  • 灵活性:本质其实是文字,可以很随意的改变颜色、产生阴影、透明效果、旋转等

  • 兼容性:几乎支持所有的浏览器,请放心使用

注意:字体图标不能替代精灵技术,只是对工作中图标部分技术的提升和优化。

总结:

  • 如果遇到一些结构和样式比较简单的小图标,就用字体图标。

  • 如果遇到一些结构和样式复杂一点的小图片,就用精灵图。


三、字体图标的下载


推荐下载网站:

  • iconmoon字库:iconmoon.io - 该网站正在出售! - iconmoon 资源和信息。

  • icoMoon成立于2011年,推出了第一个自定义图标字体生成器,它允许用户选择所需要的图标,使它们成一字型。该字库内容种类繁多,非常全面,唯一的遗憾是国外服务器,打开网速较慢。

  • 阿里 iconfont 字库 iconfont-阿里巴巴矢量图标库

  • 这个是阿里妈妈M2UX的一个iconfont字体图标字库,包含了淘宝图标库和阿里妈妈图标库。可以使用Al制作图标上传生成。重点是,免费!

字体图标的引入


下载完成后,注意压缩文件不要删,后面会用

  • 把压缩包解压,里面的fonts文件夹放入项目的根目录下;


  • 不同浏览器所支持的字体格式是不一样的,字体图标之所以兼容,就是因为包含了主流浏览器支持的字体文件。


  1. TureType (.ttf) 字体 是windows和Mac的最常见的字体,支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、IOS Mobile、Safari4.2+

  2. Web Open Font Form (.woff) 字体,支持这种字体的浏览器有 IE9+、Firefox3.5+、Chrome6+、Safari3。6+、Opera11.1+

  3. Embedded Open Type (.eot) 字体 是IE专用字体,支持这种字体的浏览器有IE4+

  4. SVG (.svg) 字体 是基于SVG字体渲染的一种格式,支持这种字体的浏览器有Chorme4+、Safari3.1+、Opera10.0+、ios Mobile Safari3.2+;


  • 在CSS样式中全局声明字体︰简单理解把这些字体文件通过css引入到我们页面中。

  • 一定注意字体文件路径的问题。



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>字体图标的使用</title>
    <style>
        @font-face {
            font-family: 'icomoon';
            src: url('fonts/icomoon.eot?drjfm0');
            src: url('fonts/icomoon.eot?drjfm0#iefix') format('embedded-opentype'),
                url('fonts/icomoon.ttf?drjfm0') format('truetype'),
                url('fonts/icomoon.woff?drjfm0') format('woff'),
                url('fonts/icomoon.svg?drjfm0#icomoon') format('svg');
            font-weight: normal;
            font-style: normal;
            font-display: block;
        }
    span {
         font-family: 'icomoon';
    }
    </style>
</head>
<body>
    <span></span>
</body>
</html>

四、字体图标的追加


把压缩包里面的selection.json 重新上传到网站,然后选中自己想要的新图标,重新下载替换源文件即可


CSS三角

网页常见一些三角形,使用CSS直接画出来就可以,不必做成图片或者字体图标

<style>
 div {
    width: 0;
    height: 0;
    line-height: 0; // 为了照顾兼容性问题
    font-size: 0;   // 为了照顾兼容性问题
    border: 10px solid transparent;
    border-left-color: pink;    // 左边三角形
    border-top-color: pink;     // 上三角形
    ...
}
</style>
<div></div>

案例:京东三角


<style>
    .box {
        position: relative;
        width: 100px;
        height: 100px;
        margin: 100px auto;
        background-color: pink;
    }

    ​ .triangle {
        position: absolute;
        top: -19px;
        right: 10px;
        width: 0;
        height: 0;
        border: 10px solid transparent;
        border-bottom-color: pink;
        ​
    }
</style>
    
<div class="box">
   <div class="triangle"></div>
</div>

CSS界用户面样式


一、什么是界面样式

所谓的界面样式,就是更改一些用户操作样式,以便提升用户的体验

  • 鼠标样式

  • 表单轮廓

  • 防止表单域拖拽


二、鼠标样式 cursor

设置或检索在对象上移动的鼠标指针采用何种系统预定义的光标形状

选择器 {
    cursor: pointer;
}
属性值说明
default默认的鼠标样式
pointer小手(链接时)
move移动(查看大图时)
text文本(打字时)
not-allowed禁止
<ul>
    <li style="cursor: pointer;">鼠标小手样式</li>
    <li style="cursor: move;">鼠标移动样式</li>
    <li style="cursor: text;">鼠标文本样式</li>
    <li style="cursor: not-allowed;">鼠标禁止样式</li>
</ul>

三、轮廓线 outline

给表单添加 outline: 0 或者outline: none;之后,就可以去掉表单默认的蓝色边框

input {
    outline: none;
}

四、防止表单拖拽 resize

实际开发中,文本域右下角是不允许拖拽的,可以通过 resize属性取消

textarea {
    resize: none;
}

CSS3常用属性

一、vertical-align属性应用

CSS的 vertical-align属性使用场景:设置图片或者表单 (form)(行内块元素)与文字垂直居中对齐

官方解释:用于设置一个元素的垂直对齐方式,但是它只针对行内元素或者行内块元素有效

vertical-align: baseline | top | middle | bottom;
属性值说明
baseline默认。与父元素的基线对齐
top把元素的顶端与行中最高元素的顶端对齐
middle把此元素放置在父元素的中部
bottom把元素的顶端与行中最低元素的底端对齐


<style>
    .ldh {
        vertical-align: middle;
    }
</style>
<img src="../Photo/ldh.jpg" alt="" class="ldh">pink老师是刘德华



图片、表单都属于行内块元素、默认的 vertical-align是基线对齐的

设置为 vertical-align: middle;可以让文字与图片垂直居中对齐。


解决图片底部默认留白


图片底侧会有一个空白空隙,原因是行内块元素默认是和文字基线对齐

主要的解决方法有两种:

  • 给图片添加 vertical-align: middle | top | bottom;都行,只要不是基线对齐就行(推荐)

  • 把图片转换为块级元素 display: block;


二、溢出文字显示为省略号

单行文本溢出


必须满足下面三个条件:

  • 文本强制单行显示;

  • 溢出隐藏

  • 省略号代替溢出部分



1. 先强制一行内显示文本
   white-space: nowarp; (默认 normal 自动换行)
2. 溢出隐藏
   overflow: hidden;
3. 文字用省略号替代超出的部分
   text-overflow: ellipsis;

<style>
    div {
        width: 150px;
        height: 80px'
        background-color: pink;
        margin: 100px auto;
        /* 1.文字显示不开隐藏 */
        white-space: nowrap;
        /* 2.溢出的部分隐藏起来 */
        overflow: hidden;
        /* 3.文字用省略号替代超出的部分 */
        text-overflow: ellipsis;
    }
</style>
<div>此处省略一万字,自己好好思考后续吧</div>

多行文本溢出


多行文本溢出显示省略号,有较大兼容性问题,适用于webkit浏览器或移动端(移动端大部分是webkit内核)

overflow: hidden;
text-overflow: ellipsis;
弹性伸缩盒子模型显示
display: -webkit-box;
限制在一个块元素显示的文本的行数
-webkit-line-clamp: 2;
设置或检索伸缩盒子对象的子元素的排列方式
-webkit-box-orient: vertical;

更推荐让后台人员来做这个效果,因为后台人员可以设置显示多少个字,操作更简单


margin负值的运用
文字围绕浮动元素
行内块的巧妙运用
css三角强化

三、margin负值的运用

  • 让每个盒子 margin-left: -1px;正好压着相邻盒子边框

  • 鼠标经过某个盒子的时候,提高当前盒子的层级即可 (如果没有定位,则加相对定位(保留当前位置),如果都有定位,则设置 z-index提高层级)


<style>
    ul li {
        list-style: none;
        width: 150px;
        height: 200px;
        border: 1px solid  red;
        margin-left: -1px;
    }
    ul li:hover {
        z-index: 1;
        border: 1px solid blue;
    }
</style>
<ul>
    <li></li>
    <li></li>
    <li></li>
</ul>


四、文字围绕浮动元素


文字标准流,会环绕浮动的元素


五、行内块的巧妙运用

行内块元素之间默认会有间距,制作页码很方便,给父元素添加 text-align: center;后会很便捷的水平居中,十分方便


<style>
    .box {
        text-align: center;
    }
​
    .box a {
        display: inline-block;
        width: 36px;
        height: 36px;
        background-color: #f7f7f7;
        border: 1px solid #ccc;
        text-align: center;
        line-height: 36px;
        text-decoration: none;
        color: #333;
    }
​
    .box .prev,
    .box .next {
        width: 95px;
    }
</style>
<div class="box">
    <a href="#" class="prev">&lt;&lt;上一页</a>
    <a href="#">2</a>
    <a href="#">3</a>
    <a href="#">4</a>
    <a href="#">5</a>
    <a href="#">6</a>
    <a href="#">...</a>
    <a href="#" class="next">&gt;&gt;下一页</a>
</div>

六、CSS制作直角三角形


在原先CSS三角的基础上:(以直角在右边的直角三角形为例)


  1. 把底部、左侧边框的宽度设为0,颜色设为透明色;

  2. 把顶部边框调大,把等边直角三角形拉高,颜色设置为透明;

    width: 0;
    height: 0;
    /* transparent(透明色)*/
    border-color: transparent blue transparent transparent; (上右下左)
    border-style: solid;
    border-width: 150px 100px 0 0; (上右下左)

CSS三角强化的巧妙运用:


<style>
    .price {
        width: 160px;
        height: 24px;
        line-height: 24px;
        text-align: center;
        border: 1px solid red;
        margin: 0 auto;
    }
​
    .miaosha {
        position: relative;
        float: left;
        width: 90px;
        height: 100%;
        background-color: red;
        color: #fff;
        font-weight: 700;
    }
​
    .miaosha i {
        position: absolute;
        top: 0;
        right: 0;
        width: 0;
        height: 0;
        border-color: transparent #fff transparent transparent;
        border-style: solid;
        border-width: 24px 10px 0 0;
    }
​
    .origin {
        font-size: 12px;
        color: gray;
        text-decoration: line-through;
    }
</style>
​
<div class="price">
    <span class="miaosha">
        ¥1650
        <i></i>
    </span>
    <span class="origin">¥5650</span>
</div>

CSS初始化

不同浏览器对有些标签的默认值是不同的,为了消除不同浏览器对HTML文本呈现的差异,照顾刘览器的兼容,我们需要对CSS初始化

简单理解:CSS初始化是指重设浏览器的样式。(也称为CSS reset )

每个网页都必须首先进行CSS初始化。

/* 清零所有标签的内外边距 */
* {
    margin: 0;
    padding: 0;
    /* CSS3盒子模型 */
    /* 可以不用考虑padding和border是否会撑大盒子的情况了*/
    box-sizing: border-box;
}
​
/* em 和 i 斜体的文字不倾斜 */
em,
i {
    font-style: normal;
}
​
/* 去掉li 的小圆点 */
li {
    list-style: none;
}
/* 插入图片的设置 */
img {
    /* border 0 照顾低版本浏览器 如果 图片外面包含了链接会有边框的问题 */
    border: 0;
    /* 取消图片底侧有空白缝隙的问题 */
    vertical-align: middle;
}
​
button {
    /* 当我们鼠标经过button 按钮的时候,鼠标变成小手 */
    cursor: pointer;
}
​
a {
    color: #666;
    text-decoration: none;
}
​
a:hover {
    color: #c81623;
}
​
button,
input {
    /* "\5B8B\4F53" 就是宋体的意思 这样浏览器兼容性比较好 */
    font-family: Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, "\5B8B\4F53", sans-serif;
    /* 手动去掉默认的灰色边框 */
    border: 0;
    /* 手动去掉input输入时的蓝色/加粗边框 */
    outline: none;
}
​
body {
    /* CSS3 抗锯齿形 让文字显示的更加清晰 */
    -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;
}

这里我们以京东css初始化代码为例。

Unicode编码字体

把中文字体的名称用相应的Unicode编码来代替,这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。

比如:

黑体 (\9ED1\4F53)
​
宋体 (\5B8B\4F53)
​
微软雅黑 (\5FAE\8F6F\96C5\9ED1)

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值