一、定位
- 定位:将盒子定在某一个位置,所以定位也是在摆放盒子, 按照定位的方式移动盒子
- 浮动可以让多个块级盒子一行没有缝隙排列显示, 经常用于横向排列盒子。
- 定位则是可以让盒子自由的在某个盒子内移动位置或者固定屏幕中某个位置,并且可以压住其他盒子。
1、定位的组成:
定位 = 定位模式 + 边偏移
(1)定位模式:
选择器 {
position: 属性值;
}
值 语义
static 静态定位
relative 相对定位
absolute 绝对定位
fixed 固定定位
(2)边偏移:
边偏移 就是定位的盒子移动到最终位置。有 top、bottom、left 和 right 4 个属性。
边偏移属性 示例 描述
top top: 80px 顶端偏移量,定义元素相对于其父元素上边线的距离。
bottom bottom: 80px 底部偏移量,定义元素相对于其父元素下边线的距离。
left left: 80px 左侧偏移量,定义元素相对于其父元素左边线的距离。
right right: 80px 右侧偏移量,定义元素相对于其父元素右边线的距离
2、定位模式详解:
(1)静态定位:
- 静态定位是元素的默认定位方式,无定位的意思。它相当于 border 里面的none,静态定位static,不要定位的时候用;
- 静态定位 按照标准流特性摆放位置,它没有边偏移。
- 静态定位在布局时我们几乎不用的
- 语法:
选择器 {
position: static;
}
(2)相对定位:
- 相对定位是元素在移动位置的时候,是相对于它自己原来的位置来说的(自恋型)。
- 语法:
选择器 {
position: relative;
}
- 特点:
1.它是相对于自己原来的位置来移动的(移动位置的时候参照点是自己原来的位置)。
2.原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它。
因此,相对定位并没有脱标。它最典型的应用是给绝对定位当爹的。。。
(3)绝对定位:
- 绝对定位是元素在移动位置的时候,是相对于它祖先元素来说的(拼爹型)。
- 语法:
选择器 {
position: absolute;
}
- 特点:
1.如果没有祖先元素或者祖先元素没有定位,则以浏览器为基准定位(Document 文档)。
2.如果祖先元素有定位(相对、绝对、固定定位),则以最近一级的有定位祖先元素为参考点移动位置。
3.绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。(脱标)
(4)子绝父相:
- 子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子。
- 父盒子需要加定位限制子盒子在父盒子内显示。
- 父盒子布局时,需要占有位置,因此父亲只能是相对定位。
(5)固定定位
- 固定定位是元素固定于浏览器可视区的位置。(认死理型) 主要使用场景: 可以在浏览器页面滚动时元素的位置不会改变。
- 语法:
选择器 {
position: fixed;
}
- 特点:
1.以浏览器的可视窗口为参照点移动元素。
跟父元素没有任何关系
不随滚动条滚动。
2.固定定位不在占有原先的位置。
固定定位也是脱标的,其实固定定位也可以看做是一种特殊的绝对定位。
IE 6 等低版本浏览器不支持固定定位
(6)粘性定位
- 粘性定位可以被认为是相对定位和固定定位的混合。 Sticky 粘性的
- 语法:
选择器 {
position: sticky;
top: 10px;
}
- 特点:
1.以浏览器的可视窗口为参照点移动元素(固定定位特点)
2.粘性定位占有原先的位置(相对定位特点)
3.必须添加 top 、left、right、bottom 其中一个才有效
跟页面滚动搭配使用。 兼容性较差,IE 不支持
(7)总结:
3、定位模式的应用:
(1)固定定位小技巧: 固定在版心左侧位置
1.让固定定位的盒子 left: 50%. 走到浏览器可视区(也可以看做版心) 的一半位置。
2.让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走 版心宽度的一半位置
就可以让固定定位的盒子贴着版心右侧对齐了
(2)堆叠显示:
- 在使用定位布局时,可能会出现盒子重叠的情况。此时,可以使用 z-index 来控制盒子的前后次序 (z轴)
- 语法
选择器 {
z-index: 1;
}
- 特点:
属性值:正整数、负整数或 0,默认值是 0,数值越大,盒子越靠上;
如果属性值相同,则按照书写顺序,后来居上;
数字后面不能加单位。
注意:z-index 只能应用于相对定位、绝对定位和固定定位的元素,其他标准流、浮动和静态定位无效。
(3)居中在盒子中间
- 加了绝对定位/固定定位的盒子不能通过设置 margin: auto 设置水平居中
- 语法:
left: 50%;:让盒子的左侧移动到父级元素的水平中心位置;
margin-left: -100px;:让盒子向左移动自身宽度的一半
4、定位的特殊性:
(1)绝对定位和固定定位也和浮动类似
- 行内元素添加绝对或者固定定位,可以直接设置高度和宽度
- 块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小
(2)改变显示模式的方式
- 可以用display的inline-block 转换为行内块;
- 可以用浮动 float 默认转换为行内块(类似,并不完全一样,因为浮动是脱标的)
- 绝对定位和固定定位也和浮动类似, 默认转换的特性 转换为行内块
(3)脱标的盒子不会触发外边距塌陷
- 也就是说,我们给盒子改为了浮动或者定位,就不会有垂直外边距合并的问题了。
(4)绝对定位(固定定位)会完全压住盒子
- 浮动元素不同,只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字(图片);
- 但是绝对定位(固定定位) 会压住下面标准流所有的内容;
- 浮动之所以不会压住文字,因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素。
二、元素的显示与隐藏:
让一个元素在页面中消失或者显示出来
1、display显示
(1)语法:
display: none 隐藏对象
display:block 除了转换为块级元素之外,同时还有显示元素的意思。
(2)特点:
display 隐藏元素后,不再占有原来的位置。
2、visibility 可见性
(1)语法:
visibility:visible ; 元素可视
visibility:hidden; 元素隐藏
(2)特点:
- visibility 隐藏元素后,继续占有原来的位置。(停职留薪)
- 如果隐藏元素想要原来位置, 就用 visibility:hidden
- 如果隐藏元素不想要原来位置, 就用 display:none (用处更多 重点)
3、overflow 溢出
- overflow 属性指定了如果内容溢出一个元素的框(超过其指定高度及宽度) 时,会发生什么。
属性值 描述
visible 不剪切内容也不添加滚动条
hidden 不显示超过对象尺寸的内容,超出的部分隐藏掉
scroll 不管超出内容否,总是显示滚动条
auto 超出自动显示滚动条,不超出不显示滚动条
4、总结:
三、精灵图:
- 为了有效地减少服务器接收和发送请求的次数,提高页面的加载速度,出现了 CSS 精灵技术(也称 CSS Sprites、CSS 雪碧)
- 将网页中的一些小背景图像整合到一张大图中 ,这样服务器只需要一次请求就可以了。
特点: - 精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中。
- 这个大图片也称为 sprites 精灵图 或者 雪碧图
- 移动背景图片位置, 此时可以使用 background-position 。
- 移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同
- 因为一般情况下都是往上往左移动,所以数值是负值。
- 使用精灵图的时候需要精确测量,每个小背景图片的大小和位置。
四、字体图标:
1、精灵图缺点:
- 图片文件还是比较大的。
- 图片本身放大和缩小会失真。
- 一旦图片制作完毕想要更换非常复杂
2、字体图标本质:
- 字体图标可以为前端工程师提供一种方便高效的图标使用方式,展示的是图标,本质属于字体
- 如果遇到一些结构和样式比较简单的小图标,就用字体图标
- 如果遇到一些结构和样式复杂一点的小图片,就用精灵图。
3、字体图标的优点:
- 灵活性:本质其实是文字,可以很随意的改变颜色、产生阴影、透明效果、旋转等
- 兼容性:几乎支持所有的浏览器,请放心使用
- 注意: 字体图标不能替代精灵技术,只是对工作中图标部分技术的提升和优化
4、字体图标下载:
5、字体图标的引入
下载完毕之后,注意原先的文件不要删,后面会用
(1)把下载包里面的 fonts 文件夹放入页面根目录下
(2)在 CSS 样式中全局声明字体: 简单理解把这些字体文件通过css引入到我们页面中。
- 字体格式说明:
不同浏览器所支持的字体格式是不一样的,字体图标之所以兼容,就是因为包含了主流浏览器支持的字体文件。
TureType( .ttf )格式.ttf字体是Windows和Mac的最常见的字体,支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+;
Web Open Font Format( .woff )格式woff字体,支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+;
Embedded Open Type( .eot )格式.eot字体是IE专用字体,支持这种字体的浏览器有IE4+;
SVG( .svg )格式.svg字体是基于SVG字体渲染的一种格式,支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+;
- 语法:
@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;
}
(3)html 标签内添加小图标
(4)给标签定义字体
span {
font-family: "icomoon";
}
-
注意:务必保证 这个字体和上面@font-face里面的字体保持一致
6、文字的追加: -
如果工作中,原来的字体图标不够用了,我们需要添加新的字体图标到原来的字体文件中
-
把压缩包里面的 selection.json 从新上传,然后选中自己想要新的图标,从新下载压缩包,并替换原来的文件即可
五、CSS用户界面样式:
所谓的界面样式,就是更改一些用户操作样式,以便提高更好的用户体验。
- 更改用户的鼠标样式
- 表单轮廓
- 防止表单域拖拽
1、鼠标样式:
li {
cursor: pointer;
}
2、轮廓线:
- 给表单添加 outline: 0; 或者 outline: none; 样式之后,就可以去掉默认的蓝色边框。
input {
outline: none;
}
3、防止拖拽文本域 resize
textarea{
resize: none;
}
4、vertical-align 属性应用
- 用于设置一个元素的垂直对齐方式,但是它只针对于行内元素或者行内块元素有效
- 语法:
vertical-align : baseline | top | middle | bottom
(1)图片、表单和文字对齐
- 图片、表单都属于行内块元素,默认的 vertical-align 是基线对齐。
- 此时可以给图片、表单这些行内块元素的 vertical-align 属性设置为 middle 就可以让文字和图片垂直居中对齐了
(2)解决图片底部默认空白缝隙问题
-
图片底侧会有一个空白缝隙,原因是行内块元素会和文字的基线对齐
-
解决方案
1.给图片添加 vertical-align:middle | top| bottom 等。 (提倡使用的)
2.把图片转换为块级元素 display: block;
5、溢出文字用省略号表示
(1)单行文本溢出显示省略号
单行文本溢出显示省略号--必须满足三个条件:
/*1. 先强制一行内显示文本*/
white-space: nowrap; ( 默认 normal 自动换行)
/*2. 超出的部分隐藏*/
overflow: hidden;
/*3. 文字用省略号替代超出的部分*/
text-overflow: ellipsis;
(2)多行文本溢出显示省略号
- 多行文本溢出显示省略号,有较大兼容性问题,适合于webKit浏览器或移动端(移动端大部分是webkit内核)
/*1. 超出的部分隐藏 */
overflow: hidden;
/*2. 文字用省略号替代超出的部分 */
text-overflow: ellipsis;
/* 3. 弹性伸缩盒子模型显示 */
display: -webkit-box;
/* 4. 限制在一个块元素显示的文本的行数 */
-webkit-line-clamp: 2;
/* 5. 设置或检索伸缩盒对象的子元素的排列方式 */
-webkit-box-orient: vertical;
六、常见的布局技巧:
1、margin负值的运用
- 让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框
- 鼠标经过某个盒子的时候,提高当前盒子的层级即可(如果没有有定位,则加相对定位(保留位置),如果有定位,则加z-index)
2、文字围绕浮动元素
巧妙运用浮动元素不会压住文字的特性
3、行内块巧妙运用:
(1)页码显示在中间:
- 把这些链接盒子转换为行内块, 之后给父级指定 text-align:center
- 利用行内块元素中间有缝隙,并且给父级添加 text-align:center; 行内块元素会水平会居中
非原创,网络上知识的搬运工。