CSS高级技巧

ppgo8 于 2023-02-27 发布

CSS高级技巧

精灵图

为什么需要精灵图?

​ 网页中有很多背景图像作为装饰,当网页图像过多时,服务器就会频繁接受和发送请求图片,服务器压力过大,降低网页加载速度。

精灵技术目的

为了有效减少服务器介绍的发送请求的次数,提高页面的加载速度,出现了CSS精灵技术(也成为了CSS Sprites,CSS 雪碧)

**核心原理**

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

精灵图(sprites)的使用

精灵图核心:

  1. 主要是针对背景图片使用,把多个小背景图片整合到一张大图片中(产品图片等不使用精灵技术)

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

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

  4. 移动距离就是这个目标图片的xy的坐标。注意网页中的坐标和笛卡尔坐标系有所不同。

    默认情况,背景图片与盒子的左上角对齐

  5. 一般来说

    背景图片朝左边移动是负值,向上移动是负值

总结:

  1. 使用对象:小背景
  2. 借助背景位置实现–background-position
  3. 一般情况下精灵图都是负值

案例:拼出自己的名字

​ 使用精灵图的上的各个字母,确定盒子大小、移动到合适的位置,展示字母。

image-20230228105830435

网页效果:

image-20230228105857922

只在大标签里写了背景图片,其他的只是调整位置。这样可以节省向服务器请求的图片次数。

字体图标

为什么需要字体图标

最早这些小图标用精灵图制作,但是也有缺点:

  1. 图片比较大
  2. 放大缩小图片会失真
  3. 更换图片样式比较负责。要转给网页美工修改图片再重新设置css样式

此时,有一种更好的技术解决了上述问题,就是字体图标iconfont

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

总结

  1. 一些结构和样式比较简单的小图标,就用字体图标。image-20230228110843574
  2. 结构和样式复杂一点的小图片,就用精灵图。

字体图标使用

​ 字体图标是一些网页中常见的小图标,直接在网上下载即可。使用可以分为:

  1. 字体图标的下载
  2. 字体图标的引入(引入到html页面中)
  3. 字体图标的追加(图标不够用,后面还想再引入)

字体图标的下载

字体图标的引入

下载完毕之后,注意原先的文件不要删,后面会用
  1. fonts文件夹放在页面根目录下面

    根目录:打开文件目录的第一个页面,见下图

image-20230228122409213

  1. 在css样式中全局声明字体:

    不用背,直接去下载的字体素材里面,有个style.css文件,复制粘贴里面的第一部分即可。

    注意,里面的路径问题,是否正确。

    image-20230228122614186

  2. 使用字体图标

    打开demo.html,复制需要图标的小框框。

    demo.html文件在下载的素材,解压得到的文件中。

    image-20230228123101935

  3. 给标签指定字体font-family

    这个字体必须和@font face里面font-family的属性值必须一致。

image-20230228123303334

字体图标的追加

​ 如果工作中,原来的字体图标不够用了,需要将新的字体图标到原来的字体文件中。

​ 把压缩包里面的selection.json重新上传,然后选中自己想要更新的图标,从新下载压缩包,并替换原来的文件即可。

image-20230228123851145

加载原理

​ 类似精灵图,第一次请求到了字体图标,后面的其他也全部都包含在一个文件里面了。

CSS三角

​ 三角图标CSS可以直接制作。image-20230303094203073

image-20230303095154165

CSS用户界面样式

界面样式:更改一些用户的操作样式,以便提高更好的用户体验。

鼠标样式 cursor

​ cursor翻译过来叫光标

image-20230303095650853

后面经常搭配js使用。

轮廓线outline

​ 很多时候,选中表单后,点击后不想要表单显示默认的轮廓线。

​ 操作:outline:0;或outline:none;

防止拖拽文本域resize

​ 文本域默认是可以拖拽更改大小的,这样会影响布局。因此应该禁止拖拽。修改方法:

​ 文本域的选择器添加属性:resize: none;

注意:

vertical-align属性应用

​ CSS的vertical-align属性使用场景:经常用于设置图片或者表单(行内块元素)和文字垂直对齐。

​ 备注:此处对齐是指:在一行内的,图片or其他行内/行内块元素,和文字的哪一部分垂直对齐。

使用方法

image-20230303101843239

image-20230303101941925

image-20230303104715375

使用场景:图片、表单等元素和文字对齐,默认和文字的基线对齐。

解决图片底部默认空白缝隙问题

​ 给图片添加边框后,效果如图:image-20230303105327758

​ 原因:图片默认和文字基线对齐。所以下面的空白是给文字基线下的部分保留的。

解决方案:

  1. vertical-align

    属性修改属性值,不让其为默认的baseline。(提倡使用)

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

    只有行内/行内块元素才会有和文字对齐的方式,块级元素没有。所以块级元素没有缝隙问题

高级技巧:溢出文字省略号显示

​ 如果文字太多,在盒子里面放不下,在最后面使用省略号…结束。

单行文本溢出显示省略号

image-20230303110156956

/* 1.强制一行显示 */ 
white-space: nowrap;   /* 默认自动换行 */
 /* 2.隐藏多余部分 */
overflow: hidden;
 /* 3.多余部分显示省略号 */
text-overflow: ellipsis;

多行文本溢出显示省略号

这种写法有比较大的兼容问题,适合webKit浏览器或移动端(移动端大多是Webkit内核)

image-20230303110202402

/* 1.隐藏多余部分 */
 overflow: hidden;
/* 2.多余部分显示省略号 */
 text-overflow: ellipsis;
/* 3.弹性伸缩盒子模型显示 */
display: -webkit-box;
/* 4.限制在一个块元素内显示的文本的行数 */
-webkit-line-clamp: 3;
/* 5.设置或检索伸缩盒对象的子元素的排列方式 */
-webkit-box-orient: vertical;

对装文字盒子高度有要求,后面要手动根据文字省略号内容修改高度 。

更推荐让后台人员做这个效果,因为后台人员可以设置显示多少个字,更方便

常见布局技巧

​ 巧妙利用一个技术更快更好的布局:

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

margin负值的应用

适用于表格的方法:

/* 默认相邻单元格拥有独立边框*/ 
/* 按如下修改参数,相邻单元格共享边框;这样相邻的边框不会变成2倍粗*/
border-collapse : collapse;  /* 该方法只适用于表格 */

总结image-20230303195753687

文字围绕浮动元素image-20230303195950072

上述布局常见做法:大盒子里面两个小盒子,一个左浮动一个右浮动。

新方法:

行内块元素的巧妙应用

页码的布局

image-20230303200959600

CSS三角巧妙应用

image-20230303203123740

​ 上图的T形制作。

image-20230303203614707

直角三角形想要哪个是直角,就保留左边或者右边的那个边框。再根据需要留上或者下,其他设置为0。

CSS初始化

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

简单理解:CSS初始化就是重设浏览器样式。也称为CSS reset。每个网页都必须首先进行CSS初始化。