本篇文章为 CSS 基础系列笔记第五篇,参考 黑马程序员pink老师前端入门教程

其他CSS基础相关文章:

CSS基础「一」基础选择器 / 字体属性 / 文本属性 / 三种样式表

CSS基础「二」复合选择器 / 元素显示模式 / 背景 / 三大特性

CSS基础「三」盒子模型/产品模块案例/圆角边框/盒子阴影/文字阴影

CSS基础「四」浮动 \ 常见网页布局

CSS基础「六」元素的显示与隐藏

CSS基础「七」精灵图 \ 字体图标 \ 三角 \ 用户界面样式 \ 页面初始化

1. 定位


1.1 为什么需要定位

提问: 以下情况使用标准流或者浮动能实现吗?

  1. NEW标签可以固定在盒子右上方,并且压住其他盒子

  2. 当我们滚动窗口的时候,盒子是固定屏幕某个位置的

以上效果,标准流或浮动都无法快速实现,此时需要定位来实现,可见

  • 浮动可以让多个块级盒子一行没有缝隙排列显示, 经常用于横向排列盒
  • 定位则是可以让盒子自由的在某个盒子内移动位置或者固定屏幕中某个位置,并且可以压住其他盒子

1.2 定位的组成

定位:将盒子定在某一个位置,所以定位也是在摆放盒子, 按照定位的方式移动盒子

定位 = 定位模式 + 边偏移

  • 定位模式用于指定一个元素在文档中的定位方式
  • 边偏移则决定了该元素的最终位置

1、定位模式

定位模式决定元素的定位方式 ,它通过 CSS 的 position 属性来设置,其值可以分为四个

属性值 说明
static 静态定位
relative 相对定位
absolute 绝对定位
fixed 固定定位

2、边偏移

边偏移就是定位的盒子移动到最终位置。有 top、bottom、left 和 right 四个属性

边偏移属性 示例 说明
top top: 60px 顶端偏移量,定义元素相对于其父元素上边线的距离
bottom bottom: 60px 底部偏移量,定义元素相对于其父元素下边线的距离
left left: 60px 左侧偏移量,定义元素相对于其父元素左边线的距离
right right: 60px 右侧偏移量,定义元素相对于其父元素右边线的距离

下面分别讲述一下上面四种定位模式

1.3 静态定位 static(了解)

静态定位是元素的默认定位方式,无定位的意思

语法格式

选择器 { position: static; }
  • 静态定位按照标准流特性摆放位置,没有边偏移
  • 静态定位在布局时很少使用

1.4 相对定位 relative ☆☆

相对定位是元素在移动位置的时候,是相对于它原来的位置来说的(以自我为中心)

语法格式

选择器 { position: relative; }
  • 它是相对于自己原来的位置来移动的(移动位置的时候参照点是自己原来的位置)
  • 原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它(不脱标,继续保留原来位置

1.5 绝对定位 absolute ☆☆

绝对定位是元素在移动位置的时候,是相对于它祖先元素来说的(拼爹型)

语法格式

选择器 { position: absolute; }
  • 如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位(Document 文档)
  • 如果祖先元素有定位(相对、绝对、固定定位),则以最近一级的有定位祖先元素为参考点移动位置
  • 绝对定位不再占有原先的位置(脱标)

示例一

  • 没有祖先元素或者祖先元素没有定位,以浏览器为准定位

示例二

  • 以最近一级的有定位祖先元素为参考点移动位置

1.6 子绝父相

“ 子绝父相 ” 是我们学习定位的口诀,是定位中最常用的一种方式这句话的意思是:子级是绝
对定位的话,父级要用相对定位

  • 子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子
  • 父盒子需要加定位限制子盒子在父盒子内显示
  • 父盒子布局时,需要占有位置,因此父亲只能是相对定位

总结: 因为父级需要占有位置,因此是相对定位, 子盒子不需要占有位置,则是绝对定位

  • 当然,子绝父相不是永远不变的,如果父元素不需要占有位置,子绝父绝也会遇到

案例

1.7 固定定位 fixed ☆☆

固定定位是元素固定于浏览器可视区的位置。主要使用场景: 可以在浏览器页面滚动时元素的位置不会改变

语法格式

选择器 { position: fixed; }

特点:

1、 以浏览器的可视窗口为参照点移动元素

  • 跟父元素没有任何关系
  • 不随滚动条滚动

2、固定定位不占有原先的位置

  • 固定定位也是脱离标准流的,其实固定定位也可以看作是一种特殊的绝对定位

固定定位小技巧: 固定在版心两侧

  • 例如下面两个红色的广告,无论页面如何缩放,都会固定在距离版心一定距离的位置上

具体算法:

  • 让固定定位的盒子 left: 50%, 走到浏览器可视区(也可以看做版心) 的一半位置

  • 让固定定位的盒子 margin-left: 版心宽度的一半 + 盒子距离 + 与版心间隙

  • 右侧广告固定方法同理

示例代码如下

<!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>新浪网</title><style>* {padding: 0px;margin: 0px;}.box {/* text-align: center; */width: 1002px;margin: 0 auto;}.left {position: fixed;top: 110px;left: 50%;/*1002/2  版心的一半 + 120px 盒子自己的宽度 + 10px的缝隙*/margin-left: -631px;}.right {position: fixed;top: 110px;right: 50%;margin-right: -631px;}</style>
</head>
<body><div class="box"><img src="data:images/sina.png" alt=""></div><div class="left"><img src="data:images/ad-l.png" alt=""></div><div class="right"><img src="data:images/ad-r.png" alt=""></div>
</body>
</html>

1.8 粘性定位 sticky(了解)

粘性定位可以被认为是相对定位和固定定位的混合

语法格式:

选择器 { position: sticky; top: 10px; }

特点:

  • 以浏览器的可视窗口为参照点移动元素(固定定位特点)
  • 粘性定位占有原先的位置(相对定位特点)
  • 必须添加 top 、left、right、bottom 其中一个才有效,否则当相对定位来看
  • 跟页面滚动搭配使用
  • 兼容性差,IE不支持,多用JavaScript实现

定位总结

定位模式 是否脱标 移动位置 是否常用
静态定位:static 不能使用边偏移 很少
相对定位:relative 否(占有位置) 相对于自身位置移动 常用
绝对定位:absolute 是(不占有位置) 带有定位的父级 常用
固定定位:fixed 是(不占有位置) 浏览器可视区 常用
粘性定位:sticky 否(占有位置) 浏览器可视区 当前阶段少
  • 需要牢记:是否占有位置、以什么为基点进行移动位置
  • 重点掌握子绝父相

1.10 定位叠放次序 z-index

在使用定位布局时,可能会出现盒子重叠的情况。此时,可以使用 z-index 来控制盒子的前后次序 (z轴)

语法格式:

选择器 { z-index: 1; }

特点:

  • 数值可以是正整数、负整数、零,默认是 auto
  • 数值越大,盒子越靠上
  • 如果属性值相同,则按照书写顺序,后来者居上

注意:

  • 数字后面不能加单位
  • 只有定位的盒子才有 z-index 属性

示例

1.11 定位的拓展

1、绝对定位的盒子居中

问题:加了绝对定位的盒子不能通过 margin:0 auto 水平居中

可以通过以下计算方法实现水平和垂直居中:

  1. left: 50%;:让盒子的左侧移动到父级元素的水平中心位置
  2. margin-left: -100px;:让盒子向左移动自身宽度的一半

实现代码


2、定位特殊特性

绝对定位和固定定位也和浮动类似

  • 行内元素添加绝对或者固定定位,可以直接设置高度和宽度
  • 块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小

3、脱标的盒子不会触发外边距塌陷

浮动元素、绝对定位(固定定位)元素的都不会触发外边距合并的问题

4、绝对定位(固定定位)会完全压住盒子

浮动元素不同,只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字(图片)

但是绝对定位(固定定位) 会压住下面标准流所有的内容

解释原因:

  • 浮动之所以不会压住文字,因为浮动产生的目的最初是为了做文字环绕效果的
  • 文字会围绕浮动元素

示例


2. 综合案例


案例:淘宝焦点图布局制作

  1. 大盒子我们类名为: tb-promo 淘宝广告
  2. 里面先放一张图片
  3. 左右两个按钮 用链接就好了, 左箭头 prev 右箭头 next
  4. 底侧小圆点 ul 继续做。 类名为 promo-nav
  • 这里不使用 js,而是简单的定位做法来实现。实现代码如下:
<!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>淘宝轮播图</title><style>* {margin: 0;padding: 0;}li {list-style: none;}.tb-promo {position: relative;width: 520px;height: 280px;margin: 100px auto;}.tb-promo img {width: 520px;height: 280px;}/* 并集选择器可以集体声明相同的样式 */.prev,.next {/* a 为行内元素不能直接给宽度、高度,但设置绝对定位后可以 */position: absolute;top: 50%;margin-top: -15px;/* 加了绝对定位的盒子可以直接设置高度和宽度 */width: 20px;height: 30px;background-color: rgba(0, 0, 0, .3);text-align: center;line-height: 30px;color: #fff;text-decoration: none;}.prev {left: 0;border-radius: 0 15px 15px 0;}/* 如果一个盒子既有left又有right属性,默认会执行left属性。同理,top bottom 会执行 top*/.next {right: 0;border-radius: 15px 0 0 15px;}.promo-nav {position: absolute;bottom: 15px;left: 50%;width: 70px;height: 13px;margin-left: -35px;background-color: 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;}/* .promo-nav li:hover {background-color: #ff5000;} */</style>
</head><body><div class="tb-promo"><img src="data:images/tb.jpg" alt=""><!-- 左侧按钮箭头 --><a href="#" class="prev"> &lt; </a><!-- 右侧按钮箭头 --><a href="#" class="next"> &gt; </a><!-- 小圆点 --><ul class="promo-nav"><li></li><li></li><li class="selected"></li><li></li><li></li></ul></div>
</body></html>

3. 网页布局总结


标准流、浮动、定位

  • 通过盒子模型,清楚知道大部分html标签是一个盒子
  • 通过CSS浮动、定位 可以让每个盒子排列成为网页

一个完整的网页,是 标准流、浮动、定位 一起完成布局的,每个都有自己的专门用法

1、标准流

可以让盒子上下排列或者左右排列,垂直的块级盒子显示就用标准流布局

2、浮动

可以让多个块级元素一行显示或者左右对齐盒子,多个块级盒子水平显示就用浮动布局

3、定位

定位最大的特点是有层叠的概念,就是可以让多个盒子前后叠压来显示。如果元素自由在某个盒子内移动就用布局


欢迎阅读下篇文章 CSS基础「六」元素的显示与隐藏

CSS基础「五」定位相关推荐

  1. CSS基础「七」精灵图 \ 字体图标 \ 三角 \ 用户界面样式 \ 页面初始化

    本篇文章为 CSS 基础系列笔记第七篇,参考 黑马程序员pink老师前端入门教程 其他CSS基础相关文章: CSS基础「一」基础选择器 / 字体属性 / 文本属性 / 三种样式表 CSS基础「二」复合 ...

  2. CSS基础「六」元素的显示与隐藏

    本篇文章为 CSS 基础系列笔记第六篇,参考 黑马程序员pink老师前端入门教程 其他CSS基础相关文章: CSS基础「一」基础选择器 / 字体属性 / 文本属性 / 三种样式表 CSS基础「二」复合 ...

  3. CSS基础「四」浮动 \ 常见网页布局

    本篇文章为 CSS 基础系列笔记第四篇,参考 黑马程序员pink老师前端入门教程 其他CSS基础相关文章: CSS基础「一」基础选择器 / 字体属性 / 文本属性 / 三种样式表 CSS基础「二」复合 ...

  4. CSS基础「三」盒子模型/产品模块案例/圆角边框/盒子阴影/文字阴影

    本篇文章为 CSS 基础系列笔记第三篇,参考 黑马程序员pink老师前端入门教程 其他CSS基础相关文章: CSS基础「一」基础选择器 / 字体属性 / 文本属性 / 三种样式表 CSS基础「二」复合 ...

  5. CSS基础「二」复合选择器 / 元素显示模式 / 背景 / 三大特性

    本篇文章为 CSS 基础系列笔记第二篇,参考 黑马程序员pink老师前端入门教程 如有侵权联系删除,如有问题欢迎指出. 其他CSS基础相关文章: CSS基础「一」基础选择器 / 字体属性 / 文本属性 ...

  6. CSS基础「一」基础选择器 / 字体属性 / 文本属性 / 三种样式表

    前言:本篇文章为 CSS 基础系列笔记第一篇,参考 黑马程序员pink老师前端入门教程 如有侵权联系删除,如有问题欢迎指出. 其他CSS基础相关文章: CSS基础「二」复合选择器 / 元素显示模式 / ...

  7. 计算机网络「五」 运输层

    前言:本文为计算机网络系列第五章笔记,陆续会更新余下内容.文章参了:计算机网络微课堂.<王道考研计算机网络考研复习指导>.<计算机网络( 第7版 )>-- 谢希仁 .本文仅供学 ...

  8. CSS基础(12)- 定位

    本系列笔记是基于[渡一教育]袁进老师的html+css基础课程而记录,仅作为个人记录以及阅读使用. 文章目录 定位 position属性 相对定位 绝对定位 固定定位 定位下的居中 多个定位元素重叠时 ...

  9. CSS基础知识---浮动,定位和盒模型

    转载请注明出处! 需要掌握的三个最重要的CSS概念是浮动,定位和盒模型. 盒模型概述: 页面上的每个元素都被看做一个矩形框(元素框or盒模型),这个框由元素内容,内边距,边框和外边距组成. 内边距出现 ...

最新文章

  1. 联邦学习怎样应用在推荐系统中?
  2. 三大运营商借5G消息围攻微信,就问张小龙怕不怕
  3. C++ 中的引用 和指针的区别
  4. 简单说一下elasticsearch安装
  5. python单链表操作_单链表的创建、增删改查等操作(Python实现)
  6. 08函数的参数 进阶
  7. [Microsoft][SQL Server 2000 Driver for JDBC]Error establishing socket
  8. 基于ZYNQ FPGA实现8路ADC数据采集存储(AD7606)
  9. pytorch torch.nn.Embedding
  10. AOAPC I: Beginning Algorithm Contests 题解
  11. SqlMapConfig.xml 的配置
  12. 加速pip下载:更换pip源
  13. 计算机网络胡工程施工税率,弱电项目增值税6%、9%、13%税率怎样区分?项目经理必知内容...
  14. 谷歌浏览器安装JSON格式化插件
  15. 小技巧(7):WPS批量修改图片尺寸
  16. matlab精度高保存图片
  17. [转] iOS 开发者应该知道的 ARM 结构(转自apple4us)
  18. Markdown语法手册完整整理
  19. Faiss:Facebook 开源的相似性搜索类库
  20. Python安装第三方库出现失败并出现”Cannot find existing Pyqt5 plugin directories”的解决方案

热门文章

  1. python datetime to timestamp_python timestamp和datetime之间转换详解
  2. macos big sur u盘安装_老款macbook机型欺骗补丁强制安装macOS11 Big Sur图文详解
  3. php 整行插入mysql_MySQL的多行插入
  4. 华为交换机恢复出厂设置
  5. 2020年软考信息安全工程师考试学习资料包
  6. 软考信息安全工程师学习笔记汇总
  7. 第四届CocoaChina开发者大会官网上线
  8. java baas_调试后台Baas(Java):调试用户自己的java代码
  9. html action能跨域么,ASP.NET MVC 中设置跨域
  10. 在python3中如何加载静态文件详版步骤