• CSS学习250~272(精灵图+字体图标+CSS三角+CSS用户界面样式+vertical-align+溢出文本省略号显示+布局技巧+CSS初始化)


    1 精灵图

    1.1 为什么需要精灵图

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

    因此,为了有效地减少服务器接收和发送请求的次数,提高页面的加载速度,出现了CSS精灵技术(也称CSS Sprites、CSS雪碧)。
    核心原理:将网页中一些笑得小背景图像整合到一张大图中,这样服务器只需要一次请求就可以了

    精灵技术目的:为了有效地减少服务器接收和发送请求的次数,提高页面的加载速度

    1.2 精灵图(sprites)的使用

    使用精灵图核心:

    1. 精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中。
    2. 这个大图片也称为sprites精灵图或者雪碧图
    3. 移动背景图片位置,此时可以使用background-position.
    4. 移动的距离就是这个目标图片的xy坐标。注意网页中的坐标有所不同
    5. 因为一般情况下都是往上往左移动,所以数值是负值。
    6. 使用精灵图的时候需要精确测量,每个小背景图片的大小和位置。

    使用精灵图核心总结:

    1. 精灵图主要针对于小的背景图片使用。
    2. 主要借助于背景位置来实现–background-position.
    3. 一般情况下精灵图都是负值。(千万注意网页中的坐标: x轴右边走是正值,左边走是负值,y轴同理。)
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Documenttitle>
        <style>
            .box1 {
                width: 60px;
                height: 60px;
                margin: 100px auto;
                background: url(images/sprites.png) no-repeat -182px 0;
            }
            .box2 {
                width: 27px;
                height: 27px;
                margin: 200px;
                background: url(images/sprites.png) no-repeat -155px -106px;
            }
        style>
    head>
    <body>
        <div class="box1">div>
        <div class="box2">div>
    body>
    html>
    
    拼出自己名字
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Documenttitle>
        <style>
            span {
                display: inline-block;
                background: url(images/abcd.jpg) no-repeat;
            }
            .l {
                width: 105px;
                height: 115px;
                background-position: 0 -274px;
            }
            .x {
                width: 108px;
                height: 105px;
                background-position: -251px -564px;
            }
            .y {
                width: 114px;
                height: 111px;
                background-position: -362px -558px;
            }
        style>
    head>
    <body>
        <span class="l">lspan>
        <span class="x">xspan>
        <span class="y">yspan>
    body>
    html>
    

    2 字体图标

    2.1字体图标的产生

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

    精灵图是有诸多优点的,但是缺点很明显。

    1. 图片文件还是比较大的。
    2. 图片本身放大和缩小会失真。
    3. 一旦图片制作完毕想要更换非常复杂。

    此时,有一种技术的出现很好的解决了以上问题,就是字体图标iconfont.

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

    2.2字体图标的优点

    • 轻量级:一个图标字体要比一系列的图像要小。一旦字体加载了,图标就会马上渲染出来,减少了服务器请求
    • 灵活性:本质其实是文字,可以很随意的改变颜色、产生阴影、透明效果、旋转等
    • 兼容性:几乎支持所有的浏览器,可以放心使用

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

    总结:

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

    2.3 字体图标的下载

    推荐下载网站:

    2.4 字体图标的引入

    1. 把下载包里面的fonts文件夹放入页面根目录下
    2. 在CSS样式中全局声明字体:简单理解把这些字体文件通过css引入到我们页面中。

    一定注意字体文件路径的问题。
    3. html标签内添加小图标

    在这里插入图片描述

    1. 声明字体
    DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Documenttitle>
        <style>
            /* 字体声明 */
          @font-face {
            font-family: "icomoon";
            src: url("fonts/icomoon.eot?g4x2d1");
            src: url("fonts/icomoon.eot?g4x2d1#iefix") format("embedded-opentype"),
              url("fonts/icomoon.ttf?g4x2d1") format("truetype"),
              url("fonts/icomoon.woff?g4x2d1") format("woff"),
              url("fonts/icomoon.svg?g4x2d1#icomoon") format("svg");
            font-weight: normal;
            font-style: normal;
            font-display: block;
          }
    
          span {
            font-family: "icomoon";
            font-size: 100px;
            color: pink;
          }
        style>
      head>
      <body>
        <span>span>
      body>
    html>
    

    2.5 字体图标的追加

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

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

    在这里插入图片描述

    3 CSS三角

    京东三角
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Documenttitle>
        <style>
            .box1 {
                width: 0;
                height: 0;
                /* border: 10px solid pink; */
                border-top: 10px solid pink;
                border-right: 10px solid red;
                border-bottom: 10px solid blue;
                border-left: 10px solid green;
            }
            .box2 {
                width: 0;
                height: 0;
                border: 50px solid transparent;
                border-left-color: pink;
                margin: 100px auto;
            }
            .jd {
                position: relative;
                width: 120px;
                height: 249px;
                background-color: pink;
            }
            .jd span {
                position: absolute;
                right: 15px;
                top: -10px;
                width: 0;
                height: 0;
                /* 为了照顾兼容性 */
                line-height: 0;
                font-size: 0;
                border: 5px solid transparent;
                border-bottom-color: pink;
            }
        style>
    head>
    <body>
        <div class="box1">div>
        <div class="box2">div>
        <div class="jd">
            <span>span>
        div>
    body>
    html>
    

    4 CSS用户界面样式

    4.1 什么是界面样式

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

    • 更改用户的鼠标样式
    • 表单轮廓
    • 防止表单域拖拽

    4.2 鼠标样式 cursor

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

    在这里插入图片描述

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Documenttitle>
    head>
    <body>
        <ul>
            <li style="cursor: default;">我是默认的小白鼠标样式li>
            <li style="cursor: pointer;">我是鼠标小手样式li>
            <li style="cursor: move;">我是鼠标移动样式li>
            <li style="cursor: text;">我是鼠标文本样式li>
            <li style="cursor: not-allowed;">我是鼠标禁止样式li>
        ul>
    body>
    html>
    

    4.3 轮廓线 outline

    给outline添加outline();或者outline:none; 样式之后,就可以去掉默认的蓝色边框

    4.4 防止拖拽文本域 resize

    textarea{ resize: none;}

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Documenttitle>
        <style>
            input,
            textarea {
                /* 取消表单轮廓 */
                outline: none;
            }
            textarea {
                /* 防止拖拽文本域 */
                resize: none;
            }
        style>
    head>
    <body>
        
        <input type="text">
        
        <textarea name="" id="" cols="30" rows="10">textarea>
    body>
    html>
    

    5 vertical-align属性应用

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

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

    语法:

    vertical-align: baseline | top | middle | bottom

    在这里插入图片描述

    5.1 图片、表单和文字对齐

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

    此时可以给图片、表单这些行内块元素的vertical-align属性设置为middle就可以让文字和图片垂直居中对齐了。

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Documenttitle>
        <style>
            img {
                /* vertical-align: bottom; */
                /* 让图片和文字垂直居中 */
                vertical-align: middle;
                /* vertical-align: top; */
            }
            textarea {
                vertical-align: middle;
            }
        style>
    head>
    <body>
        <img src="images/ldh.jpg" alt=""> yaya是刘德华
        <br>
        <textarea name="" id="" cols="30" rows="10">textarea>请您留言
    body>
    html>
    

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

    bug:图片底侧会有一个空白缝隙,原因是行内块元素会和文字的基线对齐。

    主要解决方法有两种:

    1. 给图片添加vertical-align:middle | top| bottom等。(提倡使用的)
    2. 把图片转换为块级元素display: block;
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Documenttitle>
        <style>
            div {
                border: 2px solid red;
            }
            img {
                /* vertical-align: middle; */
                display: block;
            }
        style>
    head>
    <body>
        <div>
            <img src="images/ldh.jpg" alt="">
        div>
    body>
    html>
    

    6 溢出的文本省略号显示

    1. 单行文本溢出显示省略号
    /* 1. 这个单词意思是如果文字显示不开也必须强制一行内显示 */
    white-space: nowrap;
    /* 2. 超出的部分隐藏 */
    overflow: hidden;
    /* 3. 文字用省略号替代超出的部分 */
    text-overflow: ellipsis;
    
    1. 多行文本溢出显示省略号
      多行文本溢出显示省略号,有较大兼容性问题,适合于webKit刘览器或移动端(移动端大部分是webkit内核)
    overflow: hidden;
    text-overflow: ellipsis;
    text-overflow: hidden;
    /* 弹性伸缩盒子模型显示 */
    display: -webkit-box;
    /* 研制在一个块元素的文本的行数 */
    -webkit-line-clamp: 3;
    /* 设置或检索伸缩盒对象的子元素的排列方式 */
    -webkit-box-orient: vertical;
    
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Documenttitle>
        <style>
            div {
                width: 150px;
                height: 65px;
                background-color: pink;
                margin: 100px auto;
                overflow: hidden;
                text-overflow: ellipsis;
                /* 弹性伸缩盒子模型显示 */
                display: -webkit-box;
                /* 研制在一个块元素的文本的行数 */
                -webkit-line-clamp: 3;
                /* 设置或检索伸缩盒对象的子元素的排列方式 */
                -webkit-box-orient: vertical;
            }
        style>
    head>
    <body>
        <div>
            啥也不说,此处省略一万字,啥也不说,此处省略一万字,啥也不说,此处省略一万字
        div>
    body>
    html>
    

    7 常见布局技巧

    1. margin负值运用
    • 让每个盒子margin往左侧移动-1px 正好压住相邻盒子边框
    • 鼠标经过某个盒子的时候,提高当前盒子的层级即可(如果没有有定位,则加相对定位(保留位置),如果有定位,则加z-index )
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Documenttitle>
        <style>
            ul li {
                position: relative;
                float: left;
                list-style: none;
                width: 150px;
                height: 200px;
                border: 1px solid red;
                margin-left: -1px;
            }
            /* ul li:hover {
                1. 如果盒子没有定位 则鼠标经过添加相对定位即可
                position: relative;
                border: 1px solid blue;
            } */
            ul li:hover {
                /* 如果li都有定位 则利用z-index提高层级 */
                z-index: 1;
                border: 1px solid blue;
            }
        style>
    head>
    <body>
        <ul>
            <li>1li>
            <li>2li>
            <li>3li>
            <li>4li>
            <li>5li>
        ul>
    body>
    html>
    
    1. 文字围绕浮动元素
      巧妙运用浮动元素不会压住文字的特性
    DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Documenttitle>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
          .box {
            width: 300px;
            height: 70px;
            background-color: pink;
            margin: 0 auto;
            padding: 5px;
          }
          .pic {
            float: left;
            width: 120px;
            height: 60px;
            margin-right: 5px;
          }
          .pic img {
            width: 100%;
          }
        style>
      head>
      <body>
        <div class="box">
          <div class="pic">
            <img src="images/img.png" alt="" />
          div>
          <p>【集锦】热身赛-巴西0-1秘鲁 内马尔替补两人血染赛场p>
        div>
      body>
    html>
    
    1. 行内块巧妙运用
      在这里插入图片描述
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Documenttitle>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
            .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;
                font-size: 14px;
            }
            .box .prev,
            .box .next {
                width: 85px;
            }
            .box .current,
            .box .elp {
                background-color: #fff;
            }
            .box input {
                height: 36px;
                width: 45px;
                border: 1px solid #ccc;
                outline: none;
            }
            .box button {
                width: 60px;
                height: 36px;
                background-color: #f7f7f7;
                border: 1px solid #ccc;
            }
        style>
    head>
    <body>
        <div class="box">
            <a href="#" class="prev"><<上一页a>
            <a href="#" class="current">2a>
            <a href="#">3a>
            <a href="#">4a>
            <a href="#">5a>
            <a href="#">6a>
            <a href="#" class="elp">...a>
            <a href="#" class="next">>>下一页a>
            到第
            <input type="text"><button>确定button>
        div>
    body>
    html>
    
    1. css三角强化

    代码:

    width: 0;
    height: 0;
    border-color: transparent red transparent transparent;
    border-style: solid;
    border-width: 22px 8px 0 0;
    

    在这里插入图片描述

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Documenttitle>
        <style>
            .box1 {
                width: 0;
                height: 0;
                /* 把上边框宽度调大 */
                /* border-top: 100px solid transparent; */
                /* border-right: 50px solid skyblue; */
                /* 左边和下边的边框设置为0 */
                /* border-bottom: 0 solid blue; */
                /* border-left: o solid green; */
                /* 1. 只保留右边的边框有颜色 */
                border-color: transparent red transparent transparent;
                /* 2. 样式都是solid */
                border-style: solid;
                /* 3. 上边框宽度要大 右边框宽度稍小 其余的边框为0 */
                border-width: 100px 50px 0 0;
            }
            .price {
                width: 160px;
                height: 24px;
                border: 1px solid red;
                margin: 0 auto;
                line-height: 24px;
            }
            .miaosha {
                position: relative;
                float: left;
                width: 90px;
                height: 100%;
                background-color: red;
                text-align: center;
                color: #fff;
                font-weight: 700;
                margin-right: 8px;
            }
            .miaosha i {
                position: absolute;
                right: 0;
                top: 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>
    head>
    <body>
        <div class="box1">div>
        <div class="price">
            <span class="miaosha">
                ¥1650
                <i>i>
            span>
            <span class="origin">¥5650span>
        div>
    body>
    html>
    

    8 CSS初始化

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

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

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

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

    比如:
    黑体 \9ED1\4F53
    宋体 \5B8B\4F53
    微软雅黑 \5FAE\8F6F\96C5\9ED1

  • 相关阅读:
    Python与正则表达式
    java 版本企业招标投标管理系统源码+功能描述+tbms+及时准确+全程电子化
    HTML怎么使用角度代码调节一个角的角度
    【问题思考】为什么SCAN CSCAN会导致磁臂黏着而FCFS不会导致磁臂黏着?
    元宇宙虚拟展厅:沉浸式体验、个性化互动、全新展示
    设计模式-行为型-访问者模式(双分派)
    聊聊我们Java中代码优化的30个小技巧
    vuex的使用
    Exch:POP3 和 IMAP4 操作指南
    如何实现多任务管理
  • 原文地址:https://blog.csdn.net/m0_57809042/article/details/127112483