首页
前端面试题
前端报错总结
电子书
更多
插件下载
Search
1
JavaScript基础(二)操作符 流程控制
42 阅读
2
HTML基础
20 阅读
3
Vue基础
17 阅读
4
wctype.h
14 阅读
5
Vue2(知识点)
13 阅读
默认分类
HTML CSS
HTML基础
CSS
HTML5 CSS3
javaScript
javaScript基础
javaScript高级
Web APIs
jQuery
js小总结
WEB开发布局
Vue
PS切图
数据可视化
Git使用
Uniapp
c语言入门
标准库
嵌入式
登录
Search
小仙女
累计撰写
108
篇文章
累计收到
12
条评论
首页
栏目
默认分类
HTML CSS
HTML基础
CSS
HTML5 CSS3
javaScript
javaScript基础
javaScript高级
Web APIs
jQuery
js小总结
WEB开发布局
Vue
PS切图
数据可视化
Git使用
Uniapp
c语言入门
标准库
嵌入式
页面
前端面试题
前端报错总结
电子书
插件下载
搜索到
4
篇与
的结果
2021-09-04
CSS(四) 精灵图和字体图标
1. 精灵图(重点)1.1 为什么需要精灵图一个网页中往往会应用很多小的背景图像作为修饰,当网页中的图像过多时,服务器就会频繁地接收和发送请求图片,造成服务器请求压力过大,这将大大降低页面的加载速度。为什么使用精灵图(目的): 为了有效地减少服务器接收和发送请求的次数,提高页面的加载速度,出现了 CSS 精灵技术(也称 CSS Sprites、CSS 雪碧)。核心原理: 将网页中的一些小背景图像整合到一张大图中 ,这样服务器只需要一次请求就可以了。精灵图举例:1.2 精灵图(sprites)的使用使用精灵图核心:精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中。这个大图片也称为 sprites 精灵图 或者 雪碧图移动背景图片位置, 此时可以使用 background-position 。移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同因为一般情况下都是往上往左移动,所以数值是负值。使用精灵图的时候需要精确测量,每个小背景图片的大小和位置。使用精灵图核心总结:精灵图主要针对于小的背景图片使用。主要借助于背景位置来实现---background-position 。一般情况下精灵图都是负值。(千万注意网页中的坐标: x轴右边走是正值,左边走是负值, y轴同理。)1.3 案例:拼出自己名字1.3.1 案例效果1.3.2 代码参考结构<span class="p">p</span> <span class="i">i</span> <span class="n">n</span> <span class="k">k</span>样式span { display: inline-block; background: url(images/abcd.jpg) no-repeat; } .p { width: 100px; height: 112px; /* background-color: pink; */ background-position: -493px -276px; } .i { width: 60px; height: 108px; /* background-color: pink; */ background-position: -327px -142px; } .n { width: 108px; height: 109px; /* background-color: pink; */ background-position: -215px -141px; } .k { width: 105px; height: 114px; /* background-color: pink; */ background-position: -495px -142px; }2. 字体图标2.1 字体图标的产生字体图标使用场景: 主要用于显示网页中通用、常用的一些小图标。精灵图是有诸多优点的,但是缺点很明显。1.图片文件还是比较大的。2.图片本身放大和缩小会失真。3.一旦图片制作完毕想要更换非常复杂。此时,有一种技术的出现很好的解决了以上问题,就是字体图标 iconfont。字体图标可以为前端工程师提供一种方便高效的图标使用方式,展示的是图标,本质属于字体。2.2 字体图标的优点轻量级:一个图标字体要比一系列的图像要小。一旦字体加载了,图标就会马上渲染出来,减少了服务器请求灵活性:本质其实是文字,可以很随意的改变颜色、产生阴影、透明效果、旋转等兼容性:几乎支持所有的浏览器,请放心使用注意: 字体图标不能替代精灵技术,只是对工作中图标部分技术的提升和优化。总结:1.如果遇到一些结构和样式比较简单的小图标,就用字体图标。2.如果遇到一些结构和样式复杂一点的小图片,就用精灵图。使用步骤字体图标是一些网页常见的小图标,我们直接网上下载即可。 因此使用可以分为:1.字体图标的下载 2.字体图标的引入 (引入到我们html页面中)3.字体图标的追加 (以后添加新的小图标)2.3 字体图标的下载推荐下载网站:icomoon 字库 http://icomoon.io 推荐指数 ★★★★★IcoMoon 成立于 2011 年,推出了第一个自定义图标字体生成器,它允许用户选择所需要的图标,使它们成一字型。该字库内容种类繁多,非常全面,唯一的遗憾是国外服务器,打开网速较慢。阿里 iconfont 字库 http://www.iconfont.cn/ 推荐指数 ★★★★★这个是阿里妈妈 M2UX 的一个 iconfont 字体图标字库,包含了淘宝图标库和阿里妈妈图标库。可以使用 AI制作图标上传生成。 重点是,免费!2.4 字体图标的引入下载完毕之后,注意原先的文件不要删,后面会用。把下载包里面的 fonts 文件夹放入页面根目录下字体文件格式不同浏览器所支持的字体格式是不一样的,字体图标之所以兼容,就是因为包含了主流浏览器支持的字体文件。1).TureType( .ttf )格式.ttf字体是Windows和Mac的最常见的字体,支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+;2).Web Open Font Format( .woff )格式woff字体,支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+;3).Embedded Open Type( .eot )格式.eot字体是IE专用字体,支持这种字体的浏览器有IE4+;4).SVG( .svg )格式.svg字体是基于SVG字体渲染的一种格式,支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+;2.在 CSS 样式中全局声明字体: 简单理解把这些字体文件通过css引入到我们页面中。一定注意字体文件路径的问题 @font-face { font-family: 'icomoon'; src: url('fonts/icomoon.eot?7kkyc2'); src: url('fonts/icomoon.eot?7kkyc2#iefix') format('embedded-opentype'), url('fonts/icomoon.ttf?7kkyc2') format('truetype'), url('fonts/icomoon.woff?7kkyc2') format('woff'), url('fonts/icomoon.svg?7kkyc2#icomoon') format('svg'); font-weight: normal; font-style: normal; } html 标签内添加小图标。给标签定义字体。span { font-family: "icomoon"; }注意:务必保证 这个字体和上面@font-face里面的字体保持一致2.5 字体图标的追加如果工作中,原来的字体图标不够用了,我们需要添加新的字体图标到原来的字体文件中。把压缩包里面的 selection.json 从新上传,然后选中自己想要新的图标,从新下载压缩包,并替换原来的文件即可。2.6 字体图标加载的原理:3. CSS 三角3.1 介绍网页中常见一些三角形,使用 CSS 直接画出来就可以,不必做成图片或者字体图标。一张图, 你就知道 CSS 三角是怎么来的了, 做法如下: div { width: 0; height: 0; border: 50px solid transparent; border-color: red green blue black; line-height:0; font-size: 0; }我们用css 边框可以模拟三角效果宽度高度为0我们4个边框都要写, 只保留需要的边框颜色,其余的不能省略,都改为 transparent 透明就好了为了照顾兼容性 低版本的浏览器,加上 font-size: 0; line-height: 0;3.2 案例:京东三角3.2.1效果图3.2.2 代码参考<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>CSS 三角制作</title> <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 鼠标样式 cursor li { cursor: pointer; }设置或检索在对象上移动的鼠标指针采用何种系统预定义的光标形状。4.2 轮廓线 outline给表单添加 outline: 0; 或者 outline: none; 样式之后,就可以去掉默认的蓝色边框。 input { outline: none; }4.3 防止拖拽文本域 resize实际开发中,我们文本域右下角是不可以拖拽的。 textarea{ resize: none; }vertical-align 属性应用5. vertical-align 属性应用CSS 的 vertical-align 属性使用场景: 经常用于设置图片或者表单(行内块元素)和文字垂直对齐。官方解释: 用于设置一个元素的垂直对齐方式,但是它只针对于行内元素或者行内块元素有效。语法:vertical-align : baseline | top | middle | bottom 5.1 图片、表单和文字对齐图片、表单都属于行内块元素,默认的 vertical-align 是基线对齐。此时可以给图片、表单这些行内块元素的 vertical-align 属性设置为 middle 就可以让文字和图片垂直居中对齐了。5.2 解决图片底部默认空白缝隙问题bug:图片底侧会有一个空白缝隙,原因是行内块元素会和文字的基线对齐。主要解决方法有两种:1.给图片添加 vertical-align:middle | top| bottom 等。 (提倡使用的)2.把图片转换为块级元素 display: block; 6. 溢出的文字省略号显示6.1 单行文本溢出显示省略号单行文本溢出显示省略号--必须满足三个条件: /*1. 先强制一行内显示文本*/ white-space: nowrap; ( 默认 normal 自动换行) /*2. 超出的部分隐藏*/ overflow: hidden; /*3. 文字用省略号替代超出的部分*/ text-overflow: ellipsis;6.2 多行文本溢出显示省略号(了解)多行文本溢出显示省略号,有较大兼容性问题,适合于webKit浏览器或移动端(移动端大部分是webkit内核)/*1. 超出的部分隐藏 */ overflow: hidden; /*2. 文字用省略号替代超出的部分 */ text-overflow: ellipsis; /* 3. 弹性伸缩盒子模型显示 */ display: -webkit-box; /* 4. 限制在一个块元素显示的文本的行数 */ -webkit-line-clamp: 2; /* 5. 设置或检索伸缩盒对象的子元素的排列方式 */ -webkit-box-orient: vertical;更推荐让后台人员来做这个效果,因为后台人员可以设置显示多少个字,操作更简单。7. 常见布局技巧巧妙利用一个技术更快更好的布局:margin负值的运用文字围绕浮动元素行内块的巧妙运用CSS三角强化7.1. margin负值运用1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框2.鼠标经过某个盒子的时候,提高当前盒子的层级即可(如果没有有定位,则加相对定位(保留位置),如果有定位,则加z-index)7.2 文字围绕浮动元素效果布局示意图巧妙运用浮动元素不会压住文字的特性7.3 行内块巧妙运用页码在页面中间显示:把这些链接盒子转换为行内块, 之后给父级指定 text-align:center;利用行内块元素中间有缝隙,并且给父级添加 text-align:center; 行内块元素会水平会居中7.4. CSS 三角强化 案例7.4.1 原理<style> .box1 { width: 0; height: 0; /* 把上边框宽度调大 */ /* border-top: 100px solid transparent; border-right: 50px solid skyblue; */ /* 左边和下边的边框宽度设置为0 */ /* border-bottom: 0 solid blue; border-left: 0 solid green; */ /* 1.只保留右边的边框有颜色 */ border-color: transparent red transparent transparent; /* 2. 样式都是solid */ border-style: solid; /* 3. 上边框宽度要大, 右边框 宽度稍小, 其余的边框该为 0 */ border-width: 100px 50px 0 0 ; } </style> </head> <body> <div class="box1"></div> </body>7.4.2 案例效果7.4.3 代码参考<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>CSS三角强化的巧妙运用</title> <style> .price { width: 160px; height: 24px; line-height: 24px; border: 1px solid red; margin: 0 auto; } .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="price"> <span class="miaosha"> ¥1650 <i></i> </span> <span class="origin">¥5650</span> </div> </body> </html>8. CSS 初始化不同浏览器对有些标签的默认值是不同的,为了消除不同浏览器对HTML文本呈现的差异,照顾浏览器的兼容,我们需要对CSS 初始化简单理解: CSS初始化是指重设浏览器的样式。 (也称为CSS reset)每个网页都必须首先进行 CSS初始化。这里我们以 京东CSS初始化代码为例。Unicode编码字体:把中文字体的名称用相应的Unicode编码来代替,这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。比如:黑体 \9ED1\4F53宋体 \5B8B\4F53微软雅黑 \5FAE\8F6F\96C5\9ED1
2021年09月04日
6 阅读
0 评论
0 点赞
2021-09-04
CSS(三)定位 显示和隐藏
1. 定位(position) 介绍1.1 为什么使用定位我们先来看一个效果,同时思考一下用标准流或浮动能否实现类似的效果?场景1: 某个元素可以自由的在一个盒子内移动位置,并且压住其他盒子.场景2:当我们滚动窗口的时候,盒子是固定屏幕某个位置的。结论:要实现以上效果,标准流 或 浮动都无法快速实现所以:1.浮动可以让多个块级盒子一行没有缝隙排列显示, 经常用于横向排列盒子。2.定位则是可以让盒子自由的在某个盒子内移动位置或者固定屏幕中某个位置,并且可以压住其他盒子。1.2 定位组成定位:将盒子定在某一个位置,所以定位也是在摆放盒子, 按照定位的方式移动盒子定位也是用来布局的,它有两部分组成:定位 = 定位模式 + 边偏移定位模式 用于指定一个元素在文档中的定位方式。边偏移则决定了该元素的最终位置。1.2.1 边偏移(方位名词)边偏移 就是定位的盒子移动到最终位置。有 top、bottom、left 和 right 4 个属性。边偏移属性示例描述toptop: 80px顶端偏移量,定义元素相对于其父元素上边线的距离。bottombottom: 80px底部偏移量,定义元素相对于其父元素下边线的距离。leftleft: 80px左侧偏移量,定义元素相对于其父元素左边线的距离。rightright: 80px右侧偏移量,定义元素相对于其父元素右边线的距离定位的盒子有了边偏移才有价值。 一般情况下,凡是有定位地方必定有边偏移。1.2.2 定位模式 (position)在 CSS 中,通过 position 属性定义元素的定位模式,语法如下:选择器 { position: 属性值; }定位模式是有不同分类的,在不同情况下,我们用到不同的定位模式。定位模式决定元素的定位方式 ,它通过 CSS 的 position 属性来设置,其值可以分为四个:值语义static静态定位relative相对定位absolute绝对定位fixed固定定位1.3 定位模式介绍1.3.1. 静态定位(static) - 了解静态定位是元素的默认定位方式,无定位的意思。它相当于 border 里面的none,静态定位static,不要定位的时候用。语法:选择器 { position: static; }静态定位 按照标准流特性摆放位置,它没有边偏移。静态定位在布局时我们几乎不用的1.3.2. 相对定位(relative) - 重要相对定位是元素在移动位置的时候,是相对于它自己原来的位置来说的(自恋型)。语法:选择器 { position: relative; }相对定位的特点:(务必记住)1.它是相对于自己原来的位置来移动的(移动位置的时候参照点是自己原来的位置)。2.原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它。因此,相对定位并没有脱标。它最典型的应用是给绝对定位当爹的。。。效果图:1.3.3. 绝对定位(absolute) - 重要1.3.3.1 绝对定位的介绍绝对定位是元素在移动位置的时候,是相对于它祖先元素来说的(拼爹型)。语法: 选择器 { position: absolute; }完全脱标 —— 完全不占位置;父元素没有定位,则以浏览器为准定位(Document 文档)。父元素要有定位元素将依据最近的已经定位(绝对、固定或相对定位)的父元素(祖先)进行定位。绝对定位的特点总结:(务必记住)1.如果没有祖先元素或者祖先元素没有定位,则以浏览器为基准定位(Document 文档)。2.如果祖先元素有定位(相对、绝对、固定定位),则以最近一级的有定位祖先元素为参考点移动位置。3.绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。(脱标)1.3.3.2 定位口诀 —— 子绝父相弄清楚这个口诀,就明白了绝对定位和相对定位的使用场景。这个“子绝父相”太重要了,是我们学习定位的口诀,是定位中最常用的一种方式这句话的意思是:子级是绝对定位的话,父级要用相对定位。因为绝对定位的盒子是拼爹的,所以要和父级搭配一起来使用。①子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子。②父盒子需要加定位限制子盒子在父盒子内显示。③父盒子布局时,需要占有位置,因此父亲只能是相对定位。这就是子绝父相的由来,所以相对定位经常用来作为绝对定位的父级。总结: 因为父级需要占有位置,因此是相对定位, 子盒子不需要占有位置,则是绝对定位当然,子绝父相不是永远不变的,如果父元素不需要占有位置,子绝父绝也会遇到。疑问:为什么在布局时,子级元素使用绝对定位时,父级元素就要用相对定位呢?观察下图,思考一下在布局时,左右两个方向的箭头图片以及父级盒子的定位方式。分析:方向箭头叠加在其他图片上方,应该使用绝对定位,因为绝对定位完全脱标,完全不占位置。父级盒子应该使用相对定位,因为相对定位不脱标,后续盒子仍然以标准流的方式对待它。如果父级盒子也使用绝对定位,会完全脱标,那么下方的广告盒子会上移,这显然不是我们想要的。结论:父级要占有位置,子级要任意摆放,这就是子绝父相的由来。1.3.4. 固定定位(fixed) - 重要固定定位是元素固定于浏览器可视区的位置。(认死理型) 主要使用场景: 可以在浏览器页面滚动时元素的位置不会改变。语法: 选择器 { position: fixed; }固定定位的特点:(务必记住):1.以浏览器的可视窗口为参照点移动元素。跟父元素没有任何关系不随滚动条滚动。2.固定定位不在占有原先的位置。固定定位也是脱标的,其实固定定位也可以看做是一种特殊的绝对定位。(认死理型)完全脱标—— 完全不占位置;只认浏览器的可视窗口 —— 浏览器可视窗口 + 边偏移属性 来设置元素的位置;跟父元素没有任何关系;单独使用的不随滚动条滚动。固定定位举例:提示:IE 6 等低版本浏览器不支持固定定位。1.3.5 粘性定位(sticky) - 了解粘性定位可以被认为是相对定位和固定定位的混合。 Sticky 粘性的语法: 选择器 { position: sticky; top: 10px; } 粘性定位的特点:1.以浏览器的可视窗口为参照点移动元素(固定定位特点)2.粘性定位占有原先的位置(相对定位特点)3.必须添加 top 、left、right、bottom 其中一个才有效跟页面滚动搭配使用。 兼容性较差,IE 不支持。1.3.6 定位总结定位模式是否脱标移动位置是否常用static 静态定位否不能使用边偏移很少relative 相对定位否 (占有位置)相对于自身位置移动基本单独使用absolute绝对定位是(不占有位置)带有定位的父级要和定位父级元素搭配使用fixed 固定定位是(不占有位置)浏览器可视区单独使用,不需要父级sticky 粘性定位否 (占有位置)浏览器可视区当前阶段少一定记住 相对定位、固定定位、绝对定位 两个大的特点: 1. 是否占有位置(脱标否) 2. 以谁为基准点移动位置。学习定位重点学会子绝父相。注意:边偏移需要和定位模式联合使用,单独使用无效;top 和 bottom 不要同时使用;left 和 right 不要同时使用。2. 综合案例:学成在线-hot 模块添加2. 1 案例截图:2.2 案例分析一个大的 li 中包含 一个课程图片,课程介绍文字信息,还有hot的小图标;hot图片重叠在课程图片上面—— 脱标,不占位置,需要使用绝对定位;hot图片重叠在li的右上方 —— 需要使用边偏移确定准确位置。2.3 案例小结子绝父相 —— 子元素使用绝对定位,父元素使用相对定位;与浮动的对比:绝对定位:脱标,利用边偏移指定准确位置;浮动:脱标,不能指定准确位置,让多个块级元素在一行显示。结构修改:<!-- 修改.box-bd里面的li标签内容,添加一个hot图标 --> <li> <!-- 添加hot小图片 --> <em> <img src="images/hot.png" alt=""> </em> <img src="images/pic.png" alt=""> <h4> Think PHP 5.0 博客系统实战项目演练 </h4> <div class="info"> <span>高级</span> • 1125人在学习 </div> </li>样式修改:.box-bd ul li { /* 子绝父相 */ /* 父元素相对定位 */ position: relative; float: left; width: 228px; height: 270px; background-color: #fff; margin-right: 15px; margin-bottom: 15px; } .box-bd ul li > img { width: 100%; } .box-bd ul li h4 { margin: 20px 20px 20px 25px; font-size: 14px; color: #050505; font-weight: 400; } .box-bd ul li em { /* 子元素绝对定位 */ position: absolute; top: 4px; right: -4px; }3. 定位(position)的应用3.1. 固定定位小技巧: 固定在版心左侧位置。小算法:1.让固定定位的盒子 left: 50%. 走到浏览器可视区(也可以看做版心) 的一半位置。2.让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走 版心宽度的一半位置就可以让固定定位的盒子贴着版心右侧对齐了。案例效果:<style> .w { width: 800px; height: 1400px; background-color: pink; margin: 0 auto; } .fixed { position: fixed; /* 1. 走浏览器宽度的一半 */ left: 50%; /* 2. 利用margin 走版心盒子宽度的一半距离 */ margin-left: 405px; width: 50px; height: 150px; background-color: skyblue; } </style> </head> <body> <div class="fixed"></div> <div class="w">版心盒子 800像素</div> </body>3.2. 堆叠顺序(z-index)在使用定位布局时,可能会出现盒子重叠的情况。此时,可以使用 z-index 来控制盒子的前后次序 (z轴)语法:选择器 { z-index: 1; }z-index 的特性如下:属性值:正整数、负整数或 0,默认值是 0,数值越大,盒子越靠上;如果属性值相同,则按照书写顺序,后来居上;数字后面不能加单位。注意:z-index 只能应用于相对定位、绝对定位和固定定位的元素,其他标准流、浮动和静态定位无效。应用 z-index 层叠等级属性可以调整盒子的堆叠顺序。如下图所示:案例演示:堆叠顺序。4. 定位(position)的拓展4.1 绝对定位的盒子居中注意:加了绝对定位/固定定位的盒子不能通过设置 margin: auto 设置水平居中。但是可以通过以下计算方法实现水平和垂直居中,可以按照下图的方法:left: 50%;:让盒子的左侧移动到父级元素的水平中心位置;margin-left: -100px;:让盒子向左移动自身宽度的一半。盒子居中定位示意图4.2 定位特殊特性绝对定位和固定定位也和浮动类似。1.行内元素添加绝对或者固定定位,可以直接设置高度和宽度。2.块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小。前面我们讲过, display 是 显示模式, 可以改变显示模式有以下方式:可以用inline-block 转换为行内块可以用浮动 float 默认转换为行内块(类似,并不完全一样,因为浮动是脱标的)绝对定位和固定定位也和浮动类似, 默认转换的特性 转换为行内块。所以说, 一个行内的盒子,如果加了浮动、固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等。4.3 脱标的盒子不会触发外边距塌陷浮动元素、绝对定位(固定定位)元素的都不会触发外边距合并的问题。 (我们以前是用padding border overflow解决的)也就是说,我们给盒子改为了浮动或者定位,就不会有垂直外边距合并的问题了。4.4 绝对定位(固定定位)会完全压住盒子浮动元素不同,只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字(图片)但是绝对定位(固定定位) 会压住下面标准流所有的内容。浮动之所以不会压住文字,因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素5. 综合案例 - 淘宝轮播图(重点)5.1 效果图5.2 布局分析5.3 步骤大盒子我们类名为: tb-promo 淘宝广告里面先放一张图片。左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next 左按钮样式(border-radius:左上,右上,右下,左下), 右按钮定位,提取左右按钮共同的样式代码(并集选择器)底侧小圆点ul 继续做。 类名为 promo-nav 中间长方形椭圆 ul的定位(水平居中,离底部15px) 长方形需要五个小圆点,ul无序列表,li浮动,椭圆中小圆点的样式5.4 知识点:圆角矩形设置4个角圆角矩形可以为4个角分别设置圆度, 但是是有顺序的border-top-left-radius:20px; border-top-right-radius:20px; border-bottom-right-radius:20px; border-bottom-left-radius:20px;如果4个角,数值相同 border-radius: 15px;里面数值不同,我们也可以按照简写的形式,具体格式如下:border-radius: 左上角 右上角 右下角 左下角;还是遵循的顺时针。5.5 代码参考<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>淘宝轮播图做法</title> <style> * { margin: 0; padding: 0; } li { list-style: none; } .tb-promo { position: relative; width: 520px; height: 280px; background-color: pink; margin: 100px auto; } .tb-promo img { width: 520px; height: 280px; } /* 并集选择器可以集体声明相同的样式 */ .prev, .next { position: absolute; /* 绝对定位的盒子垂直居中 */ top: 50%; margin-top: -15px; /* 加了绝对定位的盒子可以直接设置高度和宽度 */ width: 20px; height: 30px; background: rgba(0, 0, 0, .3); text-align: center; line-height: 30px; color: #fff; text-decoration: none; } .prev { left: 0; /* border-radius: 15px; */ border-top-right-radius: 15px; border-bottom-right-radius: 15px; } .next { /* 如果一个盒子既有left属性也有right属性,则默认会执行 left属性 同理 top bottom 会执行 top */ right: 0; /* border-radius: 15px; */ border-top-left-radius: 15px; border-bottom-left-radius: 15px; } .promo-nav { position: absolute; bottom: 15px; left: 50%; margin-left: -35px; width: 70px; height: 13px; /* background-color: pink; */ background: rgba(255,255,255, .3); border-radius: 7px; } .promo-nav li { float: left; width: 8px; height: 8px; background-color: #fff; border-radius: 50%; margin: 3px; } /* 不要忘记选择器权重的问题 */ .promo-nav .selected { background-color: #ff5000; } </style> </head> <body> <div class="tb-promo"> <img src="images/tb.jpg" alt=""> <!-- 左侧按钮箭头 --> <a href="#" class="prev"> < </a> <!-- 右侧按钮箭头 --> <a href="#" class="next"> > </a> <!-- 小圆点 --> <ul class="promo-nav"> <li class="selected"></li> <li></li> <li></li> <li></li> <li></li> </ul> </div> </body> </html>6. 网页布局总结通过盒子模型,清楚知道大部分html标签是一个盒子。通过CSS浮动、定位 可以让每个盒子排列成为网页。一个完整的网页,是标准流、浮动、定位一起完成布局的,每个都有自己的专门用法。6.1. 标准流可以让盒子上下排列或者左右排列,垂直的块级盒子显示就用标准流布局。6.2. 浮动可以让多个块级元素一行显示或者左右对齐盒子,多个块级盒子水平显示就用浮动布局6.3. 定位定位最大的特点是有层叠的概念,就是可以让多个盒子前后叠压来显示。如果元素自由在某个盒子内移动就用定位布局。7. 元素的显示与隐藏目的(本质) 让一个元素在页面中消失或者显示出来场景 类似网站广告,当我们点击关闭就不见了,但是我们重新刷新页面,会重新出现!7.1. display 显示(重点)display 设置或检索对象是否及如何显示。display: none 隐藏对象 display:block 除了转换为块级元素之外,同时还有显示元素的意思。特点: display 隐藏元素后,不再占有原来的位置。后面应用及其广泛,搭配 JS 可以做很多的网页特效。实际开发场景:配合后面js做特效,比如下拉菜单,原先没有,鼠标经过,显示下拉菜单, 应用极为广泛7.2. visibility 可见性 (了解)visibility 属性用于指定一个元素应可见还是隐藏。visibility:visible ; 元素可视 visibility:hidden; 元素隐藏特点:visibility 隐藏元素后,继续占有原来的位置。(停职留薪)如果隐藏元素想要原来位置, 就用 visibility:hidden如果隐藏元素不想要原来位置, 就用 display:none (用处更多 重点)7.3. overflow 溢出(重点)overflow 属性指定了如果内容溢出一个元素的框(超过其指定高度及宽度) 时,会发生什么。属性值描述visible不剪切内容也不添加滚动条hidden不显示超过对象尺寸的内容,超出的部分隐藏掉scroll不管超出内容否,总是显示滚动条auto超出自动显示滚动条,不超出不显示滚动条一般情况下,我们都不想让溢出的内容显示出来,因为溢出的部分会影响布局。但是如果有定位的盒子, 请慎用overflow:hidden 因为它会隐藏多余的部分。实际开发场景:清除浮动隐藏超出内容,隐藏掉, 不允许内容超过父盒子。7.4. 显示与隐藏总结属性区别用途display 显示 (重点)隐藏对象,不保留位置配合后面js做特效,比如下拉菜单,原先没有,鼠标经过,显示下拉菜单, 应用极为广泛visibility 可见性 (了解)隐藏对象,保留位置使用较少overflow 溢出(重点)只是隐藏超出大小的部分1. 可以清除浮动 2. 保证盒子里面的内容不会超出该盒子范围8 综合案例:土豆网鼠标经过显示遮罩8.1. 效果图8.2. 案例目标1.练习元素的显示与隐藏2.练习元素的定位8.3. 核心原理原先半透明的黑色遮罩看不见, 鼠标经过 大盒子,就显示出来。遮罩的盒子不占有位置, 就需要用绝对定位 和 display 配合使用。8.4. 代码参考<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>仿土豆网显示隐藏遮罩案例</title> <style> .tudou { position: relative; width: 444px; height: 320px; background-color: pink; margin: 30px auto; } .tudou img { width: 100%; height: 100%; } .mask { /* 隐藏遮罩层 */ display: none; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, .4) url(images/arr.png) no-repeat center; } /* 当我们鼠标经过了 土豆这个盒子,就让里面遮罩层显示出来 */ .tudou:hover .mask { /* 而是显示元素 */ display: block; } </style> </head> <body> <div class="tudou"> <div class="mask"></div> <img src="images/tudou.jpg" alt=""> </div> <div class="tudou"> <div class="mask"></div> <img src="images/tudou.jpg" alt=""> </div> <div class="tudou"> <div class="mask"></div> <img src="images/tudou.jpg" alt=""> </div> <div class="tudou"> <div class="mask"></div> <img src="images/tudou.jpg" alt=""> </div> </body> </html>
2021年09月04日
7 阅读
0 评论
0 点赞
2021-09-03
CSS(二)三大特性 盒模型和浮动
一、css三大特性1、层叠性 相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式。层叠性主要解决样式冲突的问题 层叠性原则:样式冲突,遵循的原则是就近原则,哪个样式离结构近,就执行哪个样式样式不冲突,不会层叠2、继承性 CSS中的继承: 子标签会继承父标签的某些样式,如文本颜色和字号。恰当地使用继承可以简化代码,降低 CSS 样式的复杂性。子元素可以继承父元素的样式: (text-,font-,line-这些元素开头的可以继承,以及color属性)继承性口诀:龙生龙,凤生凤,老鼠生的孩子会打洞行高的继承性: body { font:12px/1.5 Microsoft YaHei; }行高可以跟单位也可以不跟单位如果子元素没有设置行高,则会继承父元素的行高为 1.5此时子元素的行高是:当前子元素的文字大小 * 1.5body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高3、优先级当同一个元素指定多个选择器,就会有优先级的产生。选择器相同,则执行层叠性选择器不同,则根据选择器权重执行选择器优先级计算表格:优先级注意点:权重是有4组数字组成,但是不会有进位。可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..等级判断从左向右,如果某一位数值相同,则判断下一位数值。可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.继承的权重是0, 如果该元素没有直接选中,不管父元素权重多高,子元素得到的权重都是 0。权重叠加:如果是复合选择器,则会有权重叠加,需要计算权重。div ul li ------> 0,0,0,3.nav ul li ------> 0,0,1,2a:hover -----—> 0,0,1,1.nav a ------> 0,0,1,1二、盒子模型1、网页布局的本质网页布局的核心本质: 就是利用 CSS 摆盒子。网页布局过程:先准备好相关的网页元素,网页元素基本都是盒子 Box 。利用 CSS 设置好盒子样式,然后摆放到相应位置。往盒子里面装内容2、盒子模型(Box Model)组成 盒子模型:把 HTML 页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器。 CSS 盒子模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边框、外边距、内边距、和 实际内容3、边框(border)3.1、边框的使用1、border可以设置元素的边框。边框有三部分组成:边框宽度(粗细) 边框样式 边框颜色;2、语法: border : border-width || border-style || border-color; 边框样式 border-style 可以设置如下值:none:没有边框即忽略所有边框的宽度(默认值)solid:边框为单实线(最为常用的)dashed:边框为虚线dotted:边框为点线3、边框的合写分写边框简写: border: 1px solid red; 边框分开写法: border-top: 1px solid red; /* 只设定上边框, 其余同理 */ 3.2、表格的细线边框1、border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框。2、语法: border-collapse:collapse; collapse 单词是合并的意思border-collapse: collapse; 表示相邻边框合并在一起3.3、边框会影响盒子实际大小边框会额外增加盒子的实际大小。因此我们有两种方案解决:测量盒子大小的时候,不量边框。如果测量的时候包含了边框,则需要 width/height 减去边框宽度4、内边距(padding)4.1、内边距的使用方式1、padding 属性用于设置内边距,即边框与内容之间的距离。2、语法:合写属性:分写属性:4.2、内边距会影响盒子实际大小1、当我们给盒子指定 padding 值之后,发生了 2 件事情:内容和边框有了距离,添加了内边距。padding影响了盒子实际大小。2、内边距对盒子大小的影响:如果盒子已经有了宽度和高度,此时再指定内边框,会撑大盒子。如何盒子本身没有指定width/height属性, 则此时padding不会撑开盒子大小。3、解决方案: 如果保证盒子跟效果图大小保持一致,则让 width/height 减去多出来的内边距大小即可。5、外边距(margin)5.1、外边距的使用方式margin 属性用于设置外边距,即控制盒子和盒子之间的距离。5.2、外边距典型应用外边距可以让块级盒子水平居中的两个条件:盒子必须指定了宽度(width)。盒子左右的外边距都设置为 auto 。常见的写法,以下三种都可以:margin-left: auto; margin-right: auto; margin: auto; margin: 0 auto;注意:以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中给其父元素添加 text-align:center 即可。5.3、外边距合并使用 margin 定义块元素的垂直外边距时,可能会出现外边距的合并。主要有两种情况:1、相邻块元素垂直外边距的合并 当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距 margin-bottom,下面的元素有上外边距 margin-top ,则他们之间的垂直间距不是 margin-bottom 与 margin-top 之和。取两个值中的较大者这种现象被称为相邻块元素垂直外边距的合并。解决方案: 尽量只给一个盒子添加 margin 值。 2、嵌套块元素垂直外边距的塌陷 对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。解决方案:可以为父元素定义上边框。可以为父元素定义上内边距。可以为父元素添加 overflow:hidden。5.4、清除内外边距 网页元素很多都带有默认的内外边距,而且不同浏览器默认的也不一致。因此我们在布局前,首先要清除下网页元素的内外边距。 * { padding:0; /* 清除内边距 */ margin:0; /* 清除外边距 */ } 注意:行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距。但是转换为块级和行内块元素就可以了一、其他样式1、圆角边框在 CSS3 中,新增了圆角边框样式,这样我们的盒子就可以变圆角了。border-radius 属性用于设置元素的外边框圆角。语法: border-radius:length; 参数值可以为数值或百分比的形式如果是正方形,想要设置为一个圆,把数值修改为高度或者宽度的一半即可,或者直接写为 50%该属性是一个简写属性,可以跟四个值,分别代表左上角、右上角、右下角、左下角分开写:border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用2、盒子阴影CSS3 中新增了盒子阴影,我们可以使用 box-shadow 属性为盒子添加阴影。语法: box-shadow: h-shadow v-shadow blur spread color inset; 3、文字阴影在 CSS3 中,我们可以使用 text-shadow 属性将阴影应用于文本。语法: text-shadow: h-shadow v-shadow blur color;二、浮动1、传统网页布局的三种方式 CSS 提供了三种传统布局方式(简单说,就是盒子如何进行排列顺序):普通流(标准流)浮动定位这三种布局方式都是用来摆放盒子的,盒子摆放到合适位置,布局自然就完成了。注意:实际开发中,一个页面基本都包含了这三种布局方式(后面移动端学习新的布局方式) 。2、标准流(普通流/文档流)所谓的标准流: 就是标签按照规定好默认方式排列块级元素会独占一行,从上向下顺序排列。常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行。常用元素:span、a、i、em 等以上都是标准流布局,我们前面学习的就是标准流,标准流是最基本的布局方式。3、为什么需要浮动? 总结: 有很多的布局效果,标准流没有办法完成,此时就可以利用浮动完成布局。 因为浮动可以改变元素标签默认的排列方式. 浮动最典型的应用:可以让多个块级元素一行内排列显示。 网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动。4、什么是浮动? float 属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。语法: 选择器 { float: 属性值; }5、浮动特性加了浮动之后的元素,会具有很多特性,需要我们掌握的.1、浮动元素会脱离标准流(脱标:浮动的盒子不再保留原先的位置)2、浮动的元素会一行内显示并且元素顶部对齐注意: 浮动的元素是互相贴靠在一起的(不会有缝隙),如果父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐。3、浮动的元素会具有行内块元素的特性 浮动元素的大小根据内容来决定 浮动的盒子中间是没有缝隙的6、浮动元素经常和标准流父级搭配使用为了约束浮动元素位置, 我们网页布局一般采取的策略是: 先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧三、常见网页布局浮动布局注意点1、浮动和标准流的父盒子搭配。先用标准流的父元素排列上下位置, 之后内部子元素采取浮动排列左右位置2、一个元素浮动了,理论上其余的兄弟元素也要浮动。一个盒子里面有多个子盒子,如果其中一个盒子浮动了,其他兄弟也应该浮动,以防止引起问题。浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流.四、清除浮动1、为什么需要清除浮动? 由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为 0 时,就会影响下面的标准流盒子。2、清除浮动本质清除浮动的本质是清除浮动元素造成的影响:浮动的子标签无法撑开父盒子的高度注意:如果父盒子本身有高度,则不需要清除浮动清除浮动之后,父级就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了3、清除浮动样式语法: 选择器{clear:属性值;} 我们实际工作中, 几乎只用 clear: both;清除浮动的策略是: 闭合浮动.4、清除浮动的多种方式4.1、额外标签法额外标签法也称为隔墙法,是 W3C 推荐的做法。使用方式: 额外标签法会在浮动元素末尾添加一个空的标签。例如 <div style="clear:both"></div>,或者其他标签(如<br />等)。 优点: 通俗易懂,书写方便 缺点: 添加许多无意义的标签,结构化较差 注意: 要求这个新的空标签必须是块级元素。总结: 1、清除浮动本质是? 清除浮动的本质是清除浮动元素脱离标准流造成的影响 2、清除浮动策略是? 闭合浮动. 只让浮动在父盒子内部影响,不影响父盒子外面的其他盒子. 3、额外标签法? 隔墙法, 就是在最后一个浮动的子元素后面添 4、加一个额外标签, 添加 清除浮动样式. 实际工作可能会遇到,但是不常用4.2、父级添加 overflow 属性可以给父级添加 overflow 属性,将其属性值设置为 hidden、 auto 或 scroll 。例如:overflow:hidden | auto | scroll;优点:代码简洁缺点:无法显示溢出的部分注意:是给父元素添加代码4.3、父级添加after伪元素:after 方式是额外标签法的升级版。给父元素添加: .clearfix:after { content: ""; display: block; height: 0; clear: both; visibility: hidden; } .clearfix { /* IE6、7 专有 */ *zoom: 1; } 优点:没有增加标签,结构更简单缺点:照顾低版本浏览器代表网站: 百度、淘宝网、网易等4.4、父级添加双伪元素给父元素添加 .clearfix:before,.clearfix:after { content:""; display:table; } .clearfix:after { clear:both; } .clearfix { *zoom:1; } 优点:代码更简洁缺点:照顾低版本浏览器代表网站:小米、腾讯等总结为什么需要清除浮动?父级没高度。子盒子浮动了。影响下面布局了,我们就应该清除浮动了。CSS属性书写顺序(重点)生活中衡量一个人有气质: 穿着打扮 举止言行 等等 编程中如何衡量一个人的代码能力: 规范标准 优雅高质量 等等 一个词形容 专业 从代码中看出是否有经验..建议遵循以下顺序:布局定位属性:display / position / float / clear / visibility / overflow(建议 display 第一个写,毕竟关系到模式)自身属性:width / height / margin / padding / border / background文本属性:color / font / text-decoration / text-align / vertical-align / white- space / break-word其他属性(CSS3):content / cursor / border-radius / box-shadow / text-shadow / background:linear-gradient …举例: .jdc { display: block; position: relative; float: left; width: 100px; height: 100px; margin: 0 10px; padding: 20px 0; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; color: #333; background: rgba(0,0,0,.5); border-radius: 10px; }
2021年09月03日
6 阅读
0 评论
0 点赞
1
2