Html定位基础

Html的布局是文档流模型,块元素独占一行,内联元素并列一行。

相对定位

  • position: relative
  • 相对于自己定位
  • 不脱离文档流,元素原有位置被保留

绝对定位

  • position: absolute
  • 相对于第一个有positionposition不为static的祖先元素定位
  • 脱离文档流,元素原有位置被放弃
  • 宽高可设值,不撑大父元素空间
  • 可视属性只影响自身空间与文档流空间的交集(详见抗拒opacity属性)
  • 高手常用margin替代absolute,详见css-相对绝对relativeabsolute定位系列(二) 要点如下
    • 将待定位元素inline-block
    • 待定位元素外面套一个div
    • 利用外套divmargin负值侵占其他元素
  • 轮播也可用margin实现
    • 轮播的原理就是通过marginabsolute的负值脱离本该显示的区域
    • margin的改变会产生更强的回流(reflow),性能劣于absolute
  • 抗拒opacity属性
    • 背景:opacity属性或IE的filter都会让子元素跟着透明,但我们不希望子元素文本也跟着透明
    • absolute的元素充当半透明背景层
    • 不希望透明的元素作为absolute元素的兄弟
    • 上述效果可换用CSS3的如下代码实现
        background-color: rgba(0, 0, 0, .25);
    filter: progid:DXImageTransform.Microsoft.Gradient(startColorStr=#40000000,endColorStr=#40000000);
  • 下拉导航
    • 一种是将abosolute的下拉列表作为relative的触发元素的子元素
    • 推荐的一种是abosolute元素置于body底部或不加载,通过触发元素的偏移值设定位置

浮动

  • 任何元素都能浮动
  • 浮动元素必会生成一个块级元素
  • 浮动元素脱离文档流,元素原有位置被放弃
  • 元素设置float属性后不再独占一行
  • 浮动块可以向左或向右移动,直到块边缘碰到包含它的框或另一个浮动块的边框

float属性

  • left向左浮动、right向右浮动、none不浮动、inherit继承父元素的float

与margin的联动

  • 假如A、B两元素想置于同一行,只需将A元素float,B元素在与A元素float同方向上,将margin设置为A元素的width,即B元素远离A元素占据的空间。即可使B元素假象浮动,且B元素不会因窗口收缩坍塌至下一行。

清除浮动

clear属性

  • none默认允许两边浮动,left不允许左边有浮动,right不允许右边有浮动,both两边不允许有浮动

详解

  • 清除浮动只影响使用清除的元素本身,不能影响其他元素

其他

  • 父级元素套overflow可以达到清除浮动的效果

    • overflow除了visible都会给子元素建立块级格式化(block formatting context)
    • auto, hiddenscroll都可以达到清除浮动效果
    • 不推荐用overflow替代clear

页面元素坐标和偏移 参考

clientX/clientY

  • 通过event事件对象的clientX/clientY属性获得事件发生时鼠标指针在客户区中的水平和垂直坐标

screenX/screenY

  • 通过event事件对象的screenX/screenY属性,可以获取鼠标事件发生时鼠标光标相对于整个电脑屏幕的坐标信息

pageX/pageY

  • 通过事件对象的pageX/pageY属性可以获得鼠标事件发生时鼠标光标相对于整个文档元素的坐标位置(包含滚动)
  • 在页面没有滚动的情况下,通常pageX/pageY的值与clientX/clientY的值相等
  • 页面有滚动的情况下,pageX/pageY大于clientX/clientY

layerX/layerY

  • 对于绝对定位(position:absolute)元素来说,layerX/layerY就将鼠标光标位置相对于元素本身的左上角定位
  • 对于相对定位(position:relative)元素来说,通常pageX/pageYlayerX/layerY的值是相同的

offsetLeft/offsetTop

  • 元素的偏移量(offsetLeft/offsetTop)是相对于它的直接父元素
  • 如果要想知道某个元素在页面上的偏移量,将这个元素的offsetLeft和offsetTop与其父元素的相同属性相加,如此循环至根元素,就可以得到一个基本准确的值
  • 如果有些div他的父元素是的话,那么也可以尝试getElementLeft()和getElementTop()方法,不出意外地话会返回跟offsetLeftoffsetTop相同的值
  • 所有这些偏移量都是只读的,而且每次访问的时候都需要重新计算,要注意性能问题

clientWidth/clientHeight

  • 元素的客户区大小就是指元素内容及其内边距所占空间的大小(滚动条占用空间及被滚动条隐藏的空间不计算在内)
  • clientWidth=width+padding(left、right)
  • clientHeight=height+padding(top、bottom)
  • offsetWidthoffsetHeight包含滚动条占用空间
    • 有些另类,`document.documentElement`元素上的`offsetWidth`与`clientWidth`一样,`offsetHeight`与`scrollHeight`一样

scrollWidth/scrollHeight/scrollLeft/scrollTop

  • 有些元素会自动添加滚动条,如,但是另外一些元素,则需要通过css的overflow属性进行设置才能滚动
  • 带有垂直滚动条的页面总高度是document.documentElement.scrollHeight,包含被滚动条隐藏的空间
  • 带有水平滚动条的页面总宽度是document.documentElement.scrollWidth,包含被滚动条隐藏的空间
  • scrollLeftscrollTop代表被滚动条隐藏的空间大小
  • 在确定文档的总高度时,必须取得scrollWidth、clientWidth和scrollHeight、clientHeight中的最大值,这样才能保证在跨浏览器的情况下取得较为准确的结果

window.scrollX/window.scrollY与window.pageXOffset/window.pageYOffset

  • window.scrollX/window.scrollY返回的是整个文档document在水平和竖直方向滚动了的距离
  • window.pageXOffset/window.pageYOffset相当于window.scrollX/window.scrollY的别名
  • 跨浏览器的情况下,尽量使用window.pageXOffset/window.pageYOffset比较好,代码示例如下:
    var x = (window.pageXOffset !== undefined) ? window.pageXOffset : (document.documentElement || document.body.parentNode || document.body).scrollLeft;
var y = (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;

window.innerHeight/window.innerWidth

  • window.innerHeight/window.innerWidth记录了视窗内文档元素的实际高度和宽度,包含滚动条

    • 页面滚动了不影响window.innerHeight/window.innerWidth
  • window.outerHeight/window.outerWidth记录了整个浏览器的实际高度和宽度
  • 如果页面中有frameset见如下代码:
    var intFrameHeight = window.innerHeight; // or

    var intFrameHeight = self.innerHeight; // will return the height of the frame viewport within the frameset

    var intFramesetHeight = parent.innerHeight; // will return the height of the viewport of the closest frameset

    var intOuterFramesetHeight = top.innerHeight; // will return the height of the viewport of the outermost frameset

getBoundingClientRect()

  • getBoundingClientRect用于获得页面中某个元素的左,上,右和下分别相对浏览器视窗的位置
  • 特别注意right,bottom和css中的理解有点不一样。right是指元素右边界距窗口最左边的距离,bottom是指元素下边界距窗口最上面的距离
  • 获取页面元素位置的代码示例
    var X= this.getBoundingClientRect().left+document.documentElement.scrollLeft;
var Y =this.getBoundingClientRect().top+document.documentElement.scrollTop;

Html定位精要的更多相关文章

  1. 一步到位带你入门Selenium

    其实,关于这篇文章发布前还是有很多思考的,我是不想发布的,因为关于selenium的文章博客园里面有很多的介绍,写的详细的,也有写的不详细的,那么我的这篇文章的定位是基于selnium从开始到最后的框 ...

  2. Python之selenium自动化PART1

    本文适合有经验的测试童鞋 一.Selenium自动化测试环境搭建 1.cmd --- pip install selenium==2.53.0 (如果selenium后面不跟==,表示默认安装最新版本 ...

  3. CSS.05 -- 规避脱标 定位的盒子居中、CSS标签规范、溢出隐藏、内容移除(网页优化)、CSS精灵图

    规避脱标   定位的盒子居中显示 Margin:0 auto : 只能让标准流的盒子居中对齐 当A是B的父系,B可以使用 margin-left:auto: 来获得相当于定位right:0:的效果 M ...

  4. Uint 7.文本和字体属性,background,精灵图和3种定位

    一. 文本属性 CSS 文本属性可定义文本的外观. 通过文本属性,您可以改变文本的颜色.字符间距,对齐文本,装饰文本,对文本进行缩进,等等. <!DOCTYPE html> <htm ...

  5. 语义slam用于高精地图和高精定位的一些想法

    最近一直在考虑语义slam在自动驾驶和辅助驾驶中的用法,研究了一下视觉为主的高精度地图+高精定位的模式,特别是mobileye的REM. 秉承先建图再定位的思路,在服务器端(云端)建图,在车端定位. ...

  6. zz高精地图和定位在自动驾驶的应用

    本次分享聚焦于高精地图在自动驾驶中的应用,主要分为以下两部分: 1. 高精地图 High Definition Map 拓扑地图 Topological Map / Road Graph 3D栅格地图 ...

  7. EasyPR--开发详解(8)文字定位

    今天我们来介绍车牌定位中的一种新方法--文字定位方法(MSER),包括其主要设计思想与实现.接着我们会介绍一下EasyPR v1.5-beta版本中带来的几项改动. 一. 文字定位法 在EasyPR前 ...

  8. AEAI DP开发平台精要

    1 背景概述 相信很多了解数通畅联软件的人对AEAI DP应用开发平台并不陌生,笔者在入职第一天就开始接触AEAI DP,使用AEAI DP开发过AEAI WM.AEAI CRM以及中国XXXX管理系 ...

  9. sed实例精解--例说sed完整版

    原文地址:sed实例精解--例说sed完整版 作者:xiaozhenggang 最近在学习shell,怕学了后面忘了前面的就把学习和实验的过程记录下来了.这里是关于sed的,前面有三四篇分开的,现在都 ...

随机推荐

  1. 进新公司用cornerstone-checkout后遇到的奇葩bug,及解决方法

    从cornerstone中checkout下新的工程,运行报错. 1.开始错误原因是找不到相对应的某个.m文件的路径 解决方案:将缺少的.m文件重新从项目文件夹中导入 2.后来显示 造成的原因是在下面 ...

  2. MS SQL 错误 :17883,严重度: 1,状态: 0

    公司一台老旧的SQL SERVER 2000 数据库,一周内会出现若干次(一次或多次)CPU 持续100%,导致应用程序没有反应的情况,如下图所示: 错误信息如下所示: 日期 2013/7/12 2: ...

  3. android Bundle savedInstanceState用途

    经常会出现用户按到home键,退出了界面,或者安卓系统意外回收了应用的进程,这种情况下,使用Bundle savedInstanceState就可以用户再次打开应用的时候恢复的原来的状态 (以下转自: ...

  4. 每天一个linux命令(2):cd命令

    1. 命令格式: cd [目录名] 2. 命令功能: 切换当前目录至dirName 3. 常用范例 3.1 例一:进入系统根目录 命令: cd / 输出: [root@localhost ~]# cd ...

  5. 理解 OpenStack 高可用(HA)(3):Neutron 分布式虚拟路由(Neutron Distributed Virtual Routing)

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...

  6. MMORPG大型游戏设计与开发(服务器 AI 概述)

    游戏世界中我们拥有许多对象,常见的就是角色自身以及怪物和NPC,我们可以见到怪物和NPC拥有许多的行为,比如说怪物常常见到敌对的玩家就会攻击一样,又如一些NPC来游戏世界中走来走去,又有些怪物和NPC ...

  7. 怎样用ZBrush对模型进行渲染(二)

    继上节课Fisker老师对ZBrush中对渲染和灯光起到重要作用的Light和LightCap进行了具体讲解之后,本节课继续研究Render(渲染)和Light及LightCap相结合会产生什么样的效 ...

  8. AC日记——最大数 洛谷 P1198 [JSOI2008]

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作 ...

  9. Spring事务管理----声明式:利用TransactionProxyFactoryBean生成事务代理

    通常建议采用声明式事务管理.声明式事务管理的优势非常明显:代码中无需关于关注事务逻辑,让spring声明式事务管理负责事务逻辑,声明式事务管理无需与具体的事务逻辑耦合,可以方便地在不同事务逻辑之间切换 ...

  10. jdbc java数据库连接 3)Statement接口之执行DDL和DML语句的简化

    上一章的代码中,可以发现,jdbc执行DDL和DML有几个步骤都是一样的: 1)执行语句开始时,创建驱动注册对象.获取连接的数据库对象.创建Statement对象 // 创建驱动注册对象 Class. ...