侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

CSS中的元素定位方法详解

前端  /  管理员 发布于 7年前   222

1.盒模型

盒模型,就是 浏览器为页面中的每个 HTML 元素生成的矩形盒子。

这些盒子们都要按照 可见版式模型(visual formatting model)在页面上排布。可见的页面版式主要由三个属性控制: position 属性、 display 属性和 float 属性。其中,position 属性控制页面上元素间的位置关系, display 属性控制元素是堆叠、并排,还是根本不在页面上出现, float 属性提供控制的方式,以便把元素组成成多栏布局。

盒子属性分三组:

    边框(border)。可以设置边框的宽窄、样式和颜色。
    内边距(padding)。可以设置盒子内容区与边框的间距。
    外边距(margin)。可以设置盒子与相邻元素的间距。

    可以这么理解盒子属性:外边距是边框向 外推 其他元素,而内边距是从边框向 内推 元素的内容。

CSS 为边框、内边距和外边距分别规定了简写属性。在每个简写声明中,属性值的顺序都是上、右、下、左(顺时针旋转)。
示例:margin:5px 10px 12px 8px;

    注意:4 个值之间有空格,但不能是其他分隔符(比如逗号之类的)。甚至,你都不用把 4 值
    全都写出来——如果哪个值没有写,那就使用对边的值。

示例:margin:12px 10px 6px;
说明:缺少最后一个值(左边),使用对边(右边)的值(10px),即:margin:12px 10px 6px 10px。

示例:margin:12px 10px;
说明:缺少最后两个值(下边和左边),使用上边(12px)和右边(10px),即:margin:12px 10px 12px 10px;

示例:margin:12px;
说明:只写一个值,那么4个边都去这个值。即:margin:12px 12px 12px 12px;
1.1 盒子边框

边框(border)有3个相关属性:

    宽度
    可以使用 thin、medium 和 thick 等文本值,也可以使用
    除百分比和负值之外的任何绝对值。

    样式
    有 none、hidden、 dotted、 dashed、 solid、 double、 groove、
    ridge、 inset 和 outset 等文本值。

    颜色
    可以使用任意颜色值,包括 RGB、 HSL、十六进制颜色 值和颜色关键字。

1.2 盒子内边距

内边距(padding)用来设置盒子内容区与边框的间距。在没有设定内边距的情况下,内容会紧挨着边框。
1.3 盒子外边距

外边距(margin)用来设置盒子与相邻元素的间距。

    推荐使用这条规则作为样式表的第一条规则:* {margin:0; padding:0;}

说明:这条规则把所有元素默认的外边距和内边距都设定为零。把这条规则放到样式表里后,所有默认的外边距和内边距都会消失。然后,你可以为那些真正需要外边距的元素再添加外边距。不同浏览器默认的内边距和外边距也不一样,特别是对表单和列表等复合元素。在这种情况下,用这条规则 中和 默认值,然后再根据需要添加,则会在各浏览器上获得一致的效果。
1.4 叠加外边距

垂直方向上的外边距会叠加,这可是你必须得知道的一件事。

    In CSS, the adjoining margins of two or more boxes (which might or might not be siblings) can combine to form a single margin. Margins that combine this way are said to collapse, and the resulting combined margin is called a collapsed margin.

在CSS中,两个或多个毗邻(父子元素或兄弟元素)的普通流中的块元素垂直方向上的 margin 会发生叠加。这种方式形成的外边距即可称为外边距叠加(collapsed margin)。
1.5 外边距的单位

根据经验,为文本元素设置外边距时通常需要混合使用不同的单位。比如说,一个段落的左、右外边距可以使用像素,以便该段文本始终与包含元素边界保持固定间距,不受字号变大或变小的影响。而对于上、下外边距,以 em 为单位则可以让段间距随字号变化而相应增大或缩小。

示例:

CSS Code复制内容到剪贴板
  1. p {font-size:1em; margin:.75em 30px;}  

2.浮动与清除

    浮动和清除是用来组织页面布局的一柄利剑,这柄剑的剑刃就是 float 和 clear 属性。

2.1 浮动

浮动,可以想象把元素从常规文档流中拿出来。浮动元素脱离了常规文档流之后,原来紧跟其后的元素就会在空间允许的情况下,向上提升到与浮动元素平起平坐。

如果浮动元素后面有两个段落,而你只想让第一段与浮动元素并列(就算旁边还能放第二段,也不想让它上来),可以使用 clear 属性来 清除 第二段,然后它就会乖乖地呆在浮动元素下面了。

浮动 最常见的作用:

    实现传统出版物上那种文字绕排图片的效果
    让原来上下堆叠的块级元素,变成左右并列,从而实现布局中的分栏。

2.2 围住浮动元素的三种方法

    注意:三种方法各有利弊,看情况使用。

    方法一:为父元素添加 overflow:hidden

    方法二:同时浮动元素

    方法三:添加非浮动的清除元素

3.定位

CSS 布局的核心是 position 属性,对元素盒子应用这个属性,可以相对于它在常规文档流中的位置重新定位。 position 属性有 4 个值: static、 relative、 absolute、fixed,默认值为 static。
3.1 静态定位

static

在静态定位的情况下,每个元素都处于常规文档流中。要突破这种布局元素的方式,就必须把盒子的 position 属性改为其它三个值。
3.2 相对定位

relative

相对定位,相对的是它原来在文档流中的位置(或者默认位置)。设置之后,可以使用 top、right、bottom 和 left 属性来改变它的位置。多数情况下,只用 top 和 left 就可以实现我们想要的效果。

    使用相对定位的关键就是要考虑到元素原来的空间。因为使用了相对定位的元素只是相对于原始位置挪动了一下,页面没有任何变化,即元素原来占据的空间没有动,其他元素也没动。

3.3 绝对定位

absolute

绝对定位会把元素彻底从文档流中拿出来,然后相对于其他元素(默认是定位上下文 body)定位。同样可以通过 top 和 left 设定偏移值来决定位置。
3.4 固定定位

fixed

从完全移出文档流的角度说,固定定位与绝对定位类似。但不同之处在于,固定定位元素的定位上下文是视口(浏览器窗口或手持设备的屏幕),因此它不会随页面滚动而移动。

    提示:固定定位并不常用,最常见的情况是用它创建不随页面滚动而移动的导航元素。

3.5 定位上下文

定位上下文,指的是定位元素所相对偏移的元素。

    事实上,只要把元素的外边距和内边距设定好,多数情况下只用静态定位就足以实现页面布局了。很多刚开始接触 CSS 的初学者都会错误地设定 position 属性,最终才发现从文档流中挪出来的这些元素一点也不好控制。因此,除非真需要那么做,否则 不要轻易修改元素默认的 position 属性。

4.显示属性

所有元素都有 position 属性,也有 display 属性。

display属性有三个值:block、inline 和 none。

    块级元素,比如段落,标题,列表等,在浏览器上下堆叠显示。
    行内元素,比如a、span、img,在浏览器中左右并排显示,只有前一行没有空间时才会显示到下一行。

把块级元素变成行内元素(或者相反):

CSS Code复制内容到剪贴板
  1. /*默认为 block*/  
  2. p {display:inline;}   
  3.   
  4. /*默认为 inline*/  
  5. a {display:block;}  

把元素的 display 设置为 none,则该元素及所有包含在其中的元素,都不会在页面显示,它们原先占据的空间也不会被回收,就好像相关标记根本不存在一样。

与此相对的元素是 visibility 属性,属性值为:visible(默认值)和 hidden。如果设置为 hidden,元素会被隐藏,但其占据的页面空间会被保留。


  • 上一条:
    举例详解CSS中的字体尺寸设置
    下一条:
    CSS3的media query学习攻略
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 使用 Alpine.js 排序插件对元素进行排序(0个评论)
    • 在js中使用jszip + file-saver实现批量下载OSS文件功能示例(0个评论)
    • 在vue中实现父页面按钮显示子组件中的el-dialog效果(0个评论)
    • 使用mock-server实现模拟接口对接流程步骤(0个评论)
    • vue项目打包程序实现把项目打包成一个exe可执行程序(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-03
    • 2018-04
    • 2018-05
    • 2018-06
    • 2018-09
    • 2018-11
    • 2018-12
    • 2019-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2021-04
    • 2021-05
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客