DAY 9 | 自学前端第九天
自学一定要连续,记忆点深,知识点也容易串联。
今天学习CSS高级技巧,要求:
- 能使用精灵图
- 能使用字体图标
- 能写出CSS三角
- 能写出常见的CSS用户界面样式:鼠标样式,表单轮廓去除,文本域防拖拽
- vertical-align和溢出文字省略号显示
- 能够说出常见的布局技巧
- CSS初始化
一 、精灵图
1.1为什么需要精灵图
一个网页中往往 应用很多小背景图作为修饰,当网页中的图像过多时,服务器就会频繁接收和发送请求图片,造成服务器请求压力过大,降低页面加载速度。
因此,为了有效减少服务器接收和发送请求的次数,提高页面加载速度,出现了CSS精灵技术(也叫CSS Sprites、CSS雪碧)。
核心原理:将网页中的一些小背景图整合道一张大图中,这样服务器只需要一次请求就可以了。
应用如:王者荣耀精灵图,淘宝精灵图
1.2 精灵图(sprites)的使用
- 精灵技术主要针对背景图片使用。就是把多个小背景图片整合到一张大图片中;
- 这个大图片也称为Sprites精灵图或者雪碧图;
- 移动背景图片位置,此时可以用background-position;
- 移动的距离就是这个目标图片的x和y坐标,注意网页中的坐标有所不同(右x 下y);
- 一般情况往上和往左都是负值;
- 使用精灵图需要精确测量,每个小背景图片呢的大小和位置。
精灵图核心总结:
- 针对小背景图片
- 借助背景位置实现background-position
- 一般情况下精灵图都是负值。
<title>精灵图使用</title><style>.box1 {width: 60px;height: 60px;background: url(images/index.png) no-repeat -182px 0;margin-left: 182px;/* background-position: -182px 0; */}.box2 {width: 235px;height: 130px;background: url(images/index.png) no-repeat 0 -218px;}.box3 {width: 25px;height: 30px;background: url(images/index.png) no-repeat 0 -104px;}</style>
</head><body><div class="box1"></div><div class="box2"></div><div class="box3"></div>
</body>
二、字体图标
2.1字体图标的产生
字体图标使用场景:主要用于显示网页中通用、常用的一些小图标。
精灵图缺点明显:
- 图片文件还是比较大的;
- 图片本身放大和缩小会失真;
- 一旦图片制作完成,想要更换非常复杂。
此时, 可以解决以上问题的技术出现——字体图标 iconfont
字体图标 可以为前端工程师 提供一种方便高效的图标使用方式,展示的是图标,本质属于字体。
2.1字体图标的优点
- 轻量型:一个图标字体 要比 一系列的图像要小。一旦字体加载了,图标就会马上渲染出来,较少了服务器请求;
- 灵活性:随意改颜色,大小,透明效果,阴影;
- 兼容性:几乎支持所有浏览器,请放心使用;
注意:字体图标不能替代精灵技术,只是对工作中图标部分技术的提升和优化。
总结:
- 如果遇到结构样式简单的小图标,就用字体图标;
- 结构样式 复杂小图片,使用精灵图。
如何使用字体图标:
- 字体图标下载
- icomoon字库 http://icomoon.io
- 阿里iconfont字库 http://www.iconfont.cn/
- 字体图标引入
- 把下载包里面的fonts文件夹放入页面根目录下;
- 在CSS样式中全局声明字体:通过CSS引入字体文件到页面中;
- 打开字体文件夹中的demo.html,复制右下角小方框放入span标签;
- 给span设置字体样式为 font-family: 'icomoon'。
@font-face {font-family: 'icomoon';src: url('fonts/icomoon.eot?gzpfrc');src: url('fonts/icomoon.eot?gzpfrc#iefix') format('embedded-opentype'),url('fonts/icomoon.ttf?gzpfrc') format('truetype'),url('fonts/icomoon.woff?gzpfrc') format('woff'),url('fonts/icomoon.svg?gzpfrc#icomoon') format('svg');font-weight: normal;font-style: normal;font-display: block;
}
使用:
<title>字体图标的使用</title><style>/* 字体声明 */@font-face {font-family: 'icomoon';src: url('fonts/icomoon.eot?gzpfrc');src: url('fonts/icomoon.eot?gzpfrc#iefix') format('embedded-opentype'),url('fonts/icomoon.ttf?gzpfrc') format('truetype'),url('fonts/icomoon.woff?gzpfrc') format('woff'),url('fonts/icomoon.svg?gzpfrc#icomoon') format('svg');font-weight: normal;font-style: normal;font-display: block;}span {font-family: 'icomoon';font-size: 18px;color: aqua;}</style>
</head><body><span></span><span></span>
</body>
- 字体图标追加
如果工作中,原来的字体图标不够用了,我们需要添加新的字体图标到原来的字体文件中。
把压缩包里面的 selection.json重新上传,然后选中自己想要新的图标,重新下载压缩包,并替换原先的压缩包即可。将压缩包重新解压替换原先的文件夹,并把fonts文件夹重新替换。
三、CSS三角
网页中一些简单的三角形,使用CSS可以直接画出来,不用图片或者文字图标。
<title>京东小三角</title><style>.jd {position: relative;width: 120px;height: 249px;background-color: pink;margin: 100px auto;}.jd span {position: absolute;right: 15px;/* 整个盒子有上边框和下边框,一共20px高,上边框透明 */top: -20px;width: 0;height: 0;/* 为了照顾兼容性 */line-height: 0;font-size: 0;border: 10px solid transparent;border-bottom-color: pink;}.xiaomi {position: relative;width: 300px;height: 100px;background-color: blue;}.xiaomi span {position: absolute;right: -20px;top: 40px;width: 0;height: 0;line-height: 0;font-size: 0;border: 10px solid transparent;border-left-color: blue;}</style>
</head><body><div class="jd"><span></span></div><div class="xiaomi"><span></span></div>
</body>
四、CSS用户界面样式
4.1 什么是界面样式
所谓界面样式,就是更改一些用户操作样式,以便更好地用户体验。
- 用户的鼠标样式
- 表单轮廓
- 防止表单域拖拽
4.2 鼠标样式 cursor
li {cursor: pointer;}
一些个:
<title>鼠标样式 cursor</title>
</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><li style="cursor: wait;">鼠标等待</li><li style="cursor: help;">鼠标帮助</li></ul>
</body>
4.3 轮廓线 outline
取消表单轮廓线:
input {outline: none;}
4.4 文本域防拖拽
textarea {resize: none;}
<title>用户界面样式——表单轮廓防拖拽文本域</title><style>/* 去除表单轮廓 */input {outline: none;}/* 防止文本域拖拽 */textarea {resize: none;}</style>
</head><body><input type="text"><!-- 文本域最好写到一行,换行 文本不是顶格 --><textarea name="" id="" cols="30" rows="10"></textarea>
</body>
五、vertical-align 属性应用
CSS的 vertical-align 经常用于:设置图片或表单(行内块元素)和文字垂直对齐。
只对行内元素和行内块元素有效,块元素不行。
选择器 {vertical-align : baseline;}
5.1 图片、表单和文字对齐
让图片和文字垂直居中:
vertical-align: middle;
<title>vertical-align 文字图片垂直居中</title><style>img {/* 让图片和文字垂直居中 */vertical-align: middle;/* vertical-align: bottom; *//* 默认 *//* vertical-align: baseline; *//* vertical-align: top; */}textarea {resize: none;outline: none;vertical-align: middle;}</style>
</head><body><img src="data:images/index.png" alt="">胖胖的葡萄籽<br><textarea name="" id="" cols="30" rows="10"></textarea>去睡觉
</body>
5.2 解决图片底部默认空白缝隙问题
行内块元素默认和底下的基线baseline对齐,不是底线bottom对齐 。解决方案:
改成除了基线以外其他的属性值都可以 vertical-align: bottom;
转换成块元素 display: block;
<title>解决图片底部默认空白缝隙问题</title><style>div {border: 2px solid red;}img {/* 解决方案1:除了基线以外其他的属性值都可以 *//* vertical-align: bottom; *//* 解决方案2:转换成块元素 */display: block;}</style>
</head><body><div><img src="data:images/index.png" alt=""></div>
</body>
解决后:
六、溢出文字省略号显示
6.1 单行文本溢出显示省略号
- 强制一行内显示文本;—— white-space: nowrap; (默认normal 自动换行)
- 超出的部分隐藏;——overflow:hidden;
- 文字用省略号代替超出的部分;——text-overflow: ellipsis;
<title>单行文本溢出显示省略号</title><style>div {width: 150px;height: 80px;background-color: pink;margin: 100px auto;/* 如果文本一行显示不开,自动换行(默认) *//* white-space: normal; *//* 强制一行内显示文本 */white-space: nowrap;/* 超出的部分隐藏; */overflow: hidden;/* 单行文本溢出显示省略号 */text-overflow: ellipsis;}</style>
</head><body><div>啥也不说,此处省略一万字</div>
</body>
6.2 多行文字溢出显示省略号
多行文本溢出显示省略号,有较大兼容性问题,适合webkit浏览器或移动端(移动端大部分是webkit内核) 谷歌可以,IE大部分不起效果。
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
<title>多行文本溢出显示省略号</title><style>div {width: 80px;height: 110px;border: 1px solid red;margin: 100px auto;overflow: hidden;text-overflow: ellipsis;/* 弹性伸缩盒子模型显示 */display: -webkit-box;/* 限制在一个块元素显示的文本的行数 */-webkit-line-clamp: 5; /* 设置或检索伸缩盒对象的子元素的排列方式 */-webkit-box-orient: vertical;}</style>
</head><body><div>希望各地疫情快快消失,互联网寒冬快快过去,经济转好吧啊啊</div>
</body>
更推荐让后台人员来做这个效果,因为后台人员可以设置显示多少个字,操作更简单。
七、常见布局技巧
7.1 margin负值的运用
去除相邻浮动盒子边框重叠:
<title>去除浮动相邻边框重叠</title><style>ul li {float: left;list-style: none;width: 200px;height: 200px;border: 1px solid black;margin-left: -1px;}</style>
</head><body><ul><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li></ul>
</body>
解决鼠标经过 相邻边框颜色不统一:
- 如果盒子没有定位,鼠标经过添加相对定位即可
如果盒子都有定位,利用z-index提高层级
<title>去除浮动相邻边框重叠</title><style>ul li {position: relative;float: left;list-style: none;width: 200px;height: 200px;border: 1px solid black;margin-left: -1px;}/* ul li:hover {1. 如果盒子没有定位,鼠标经过添加相对定位即可相对定位保留原来的位置,并压过其他标准流 position: relative;border-color: orange;} */ul li:hover {/*2. 如果盒子都有定位,利用z-index提高层级 */z-index: 1;border: 1px solid blue;}</style>
</head><body><ul><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li></ul>
</body>
7.2 文字围绕浮动元素
巧妙运用浮动元素不会压住文字特性。
- 一个大盒子中里装文字
- 一个盒子装图片,在加上浮动,文字就会环绕图片
<title>文字环绕浮动元素的使用</title><style>* {margin: 0;padding: 0;}.box {width: 300px;height: 70px;background-color: pink;margin: auto;padding: 5px;}.pic {float: left;height: 70px;}.pic img {height: 100%;}</style>
</head><body><div class="box"><div class="pic"><img src="data:images/img.png" alt=""></div><p>一个大盒子中装文字一个盒子装图片,加上浮动,文字就会环绕图片</p></div>
</body>
7.3 行内块的巧妙运用
<title>行内块的巧妙运用</title><style>* {margin: 0;padding: 0;}.box {text-align: center;margin: 100px auto;}.box a {display: inline-block;width: 35px;height: 35px;background-color: #f7f7f7;border: 1px solid #ccc;text-align: center;line-height: 35px;text-decoration: none;color: #333;}.box .prev,.box .next {width: 85px;}.box .current,.box .elp {background-color: #fff;border: none;}.box input {width: 35px;height: 35px;border: 1px solid #ccc;outline: none;}.box button {width: 45px;height: 35px;background-color: #f7f7f7;border: 1px solid #ccc;}</style>
</head><body><div class="box"><a href="#" class="prev">< <上一页</a><a href="#">1</a><a href="#" class="current">2</a><a href="#">3</a><a href="#">4</a><a href="#">5</a><a href="#">6</a><a href="#" class="elp">...</a><a href="#" class="next">下一页>></a>到第<input type="text">页<button>确定</button></div>
</body>
7.4 CSS三角强化
直角三角形
.box22 {width: 0;height: 0;/* 简写 */border-style: solid;/* 只显示右边 */border-color: transparent green transparent transparent;/* 上是右的2倍 */border-width: 200px 100px 0 0;}
<title>直角实际运用</title><style>.price {width: 160px;height: 24px;line-height: 24px;border: 1px solid red;margin: 100px auto;}.miaosha {position: relative;float: left;width: 90px;height: 24px;background-color: red;text-align: center;color: #fff;font-weight: 700;margin-right: 8px;}.miaosha i {position: absolute;right: 0;width: 0;height: 0;border-style: solid;border-color: transparent #fff transparent transparent;border-width: 24px 12px 0 0;}.price .older {font-size: 14px;color: gray;text-decoration: line-through;}</style>
</head><body><div class="price"><span class="miaosha">¥1650<i></i></span><span class="older">¥5650</span></div>
</body>
八、CSS初始化
不同浏览器对有些标签的默认值是不同的,为了消除不同浏览器对html文本呈现的差异,照顾浏览器的兼容,我们需要对CSS初始化。
简单理解:CSS reset
每个网页都必须先进行CSS初始化。
Unicode编码字体:
把中文字体名称用相应的Unicode编码来代替,这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。
比如:
黑体:\9ED1\4F53
宋体:\5BBB\4F53
微软雅黑:\5FAE\8F6F\96C5\9ED1
/* 把所有标签的内外边距清零 */
* {margin: 0;padding: 0;
}/* 斜体文字不倾斜 */
em,
i {font-style: normal;
}/* 去掉li的小圆点 */
li {list-style: none;
}img {/* border 0 照顾低版本浏览器 如果 图片外边包含了链接 会有边框的问题 */border: 0;/* 取消图片底端有空白间隙的问题 */vertical-align: middle;
}button {/* 鼠标经过按钮时变成小手 */cursor: pointer;
}a {color: #666;text-decoration: none;
}a:hover {color: red;
}button,
input {/* \5BBB\4F53是宋体的意思,这样浏览器兼容性比较好 */font-family: Microsoft YaHei, heiti SC, tahoma, arial, hiragino sans gb, "\sbbb\4f53";
}body {/* CSS3属性,抗锯齿性,让文字放大显示更清晰 */-webkit-font-smoothing: antialiased;background-color: #fff;/* 1.5倍行高 */font: 12px/1.5 microsoft yahei, heiti SC, tahoma, arial, hiragino sans gb;color: #666;
}.hide,
none {display: none;
}/* 清除浮动 */
.clearfix:after {/* 溢出隐藏,位置保留 */visibility: hidden;clear: both;display: block;content: ".";height: 0;
}.clearfix {*zoom: 1
}
DAY 9 | 自学前端第九天相关推荐
- grep从文件末尾开始找_新人自学前端到什么程度才能找工作?
这个问题打我记事起到现在,问过我的人,没有1000也有800了.足以见得这个问题是多么的不得人心. 自学前端开发,不管他在网上百度了多少资料,看了多少教程,你总得先做个网页出来.所以,很多人都是从ht ...
- 如何系统地自学前端(女生),女生发展前端是否是青春饭?
看问题描述,题主应该对互联网开发了解的不多,题主问的就是两方面: 1.女生如何自学前端? 2.女生如果从事前端开发这个工作能不能长远的发展? 最初我入行的时候也有这样的担忧,很正常. 网上大力鼓吹兴趣 ...
- 自学前端真的没有前途吗?
现在全职从事前端工作,到20年年底整6年,在做前端之前,我是那种跟在销售后面,他投标,我负责把他吹的牛逼变出来的板儿砖型程序员,什么语言和技术栈,根本不是借口,deadline放在那里,让你今天学一个 ...
- 自学前端,一天学4个小时左右,能到什么水平?
自学前端,你的学习时间不是最主要的 而是你拿着这些时间做了什么 如果只是简单的看一些理论知识,没有实际操作 那是远远不够的 如果你是拿这些时间全部用来写demo,折腾一些实战项目 那用不了多久,你水平 ...
- 自学前端,需要学习哪些知识点?学多久可以入职前端工程师?
假如有那么残酷的一天,我不小心喝错了一瓶药,一下子抹掉了我这十多年的编程经验,把我变成了一只小白.我想自学 前端,并且想要找到一份工作,我预计需要 6 个月的时间,前提条件是每天都处于高效率的学习状态 ...
- 是自学前端还是培训学前端?
"学web前端是自学好还是去培训机构,哪个靠谱?" 类似的问题应接不暇,包括前段时间逛知乎,关于这个话题的热度,还是居高不下. 都快2021年了,匆匆入场的人还是很多,尤其是在校大 ...
- 自学前端很难吗?只要你足够努力,高中学历也能获得offer
这是一位粉丝朋友分享的他的故事,很感人,希望以此激励那些转行前端现在却很吃力的朋友们. 正文开始: 不得不说,我的人生比很多人都要黑暗,我是2014届的本科生,但是本科我只读了三年就中途退学了. 当时 ...
- 0基础自学前端好,还是报班培训好?
0基础自学前端好,还是报班培训好? 1.自学 优点: 1.自我分析问题和自我解决问题的能力比较的强:自学要自己的找学习资料,学习要自己的摸索学习,学习中遇到的问题要自己去分析,自己去解决. 通过自学成 ...
- 自学前端两三个月,很迷茫,有大佬可以指导吗?
自学前端两三个月,很迷茫,有大佬可以指导吗? Web前端工程师已经成为互联网公司,最亲睐的对象,不管是起薪还是薪资涨幅,都居所有互联网行业职位之首,成为互联网行业最有"钱"景职位! ...
最新文章
- 谈谈秒杀系统的落地方案
- Changes at Different Environment?
- 2020.5.27 线性规划测试(Lingo实现)
- MyEclipse的Debug模式
- python mysql工具类_Python工具类(一)—— 操作Mysql数据库
- markdown方式测试图片2
- C语言控制台窗口界面编程:用printf在终端打印一个GUI窗口
- C++_二维数组的动态申请内存3种方法
- 毕设题目:Matlab疾病识别与分类
- c语言程序设计题题库,c语言程序设计试题题库含答案
- 三体第一部(13到22节)
- 基于Python的深度学习的中文语音识别系统
- MyEclipse 8.5 开发环境配置,汉化,Aptana2.0插件,SVN 插件,Flex Builder 3/4 插件安装(转)...
- 论文学习笔记 POSEIDON: Privacy-Preserving Federated Neural Network Learning
- C语言设计学生宿舍管理系统
- 计算机网络课论文参考文献,热门计算机网络课程论文参考文献 计算机网络课程专著类参考文献哪里找...
- php常见后门,php后门隐藏技巧大全
- bzoj4455 loj2091 [Zjoi2016]小星星 容斥原理+树形DP(+状压DP?)
- 2022-2028中国半导体行业用真空电缆市场现状研究分析与发展前景预测报告
- 计算机网络:HTTP相关知识
热门文章
- 将 Business Events 与WESB及WPS rver 集成
- sqlzoo错题总结-1
- git+小乌龟安装教程。。
- Vue路由懒加载报错问题解决
- osi七层语言html,OSI分为哪七层 OSI七层功能介绍【详解】
- Vert.x(vertx) Web开发-路由
- <笔记>Long and Short -Term Recommendations with Recurrent Neural Networks
- GitHub 项目徽章的添加和设置
- https://github.com/lin-xin/vue-manage-system
- 【笔记】DeepIGeoS: A Deep Interactive Geodesic Framework for Medical Image Segmentation