CSS布局

2023-11-02

CSS布局

div标签

概念

<div> </div>本身是HTML4的标签,因其特殊性而一直作为CSS布局的核心标签。

特点
  • <div> </div>本身默认样式极少(只有默认块级元素这一项)
  • 没有太多默认属性
  • 默认宽度为100%
总结

本身不具有太多默认的样式或属性,对CSS来说,可塑性极强,可以实现任何想要的效果。比如布局的一部分,或者模块之类的。

标准盒模型

概念

CSS会把所有标签都当成一个个的“盒子”,通过CSS所提供的相关属性能够实现任意标签的尺寸设置以及定位,由这些属性构成的体系就是盒模型。

属性
  • width:设置盒子的内容宽度
  • height:设置盒子的内容高度
  • border:设置盒子的边框
  • padding:设置内边距,即内容和border的距离。四个内边距可统一设置也可分别设置。
  • margin:设置外边距,即设置盒子和另一个挨着的盒子之间的距离。同样,四个外边距可统一设置也可分别设置。
    • 给父标签设置overflow:hidden即可防止给紧挨块级父元素的子标签设置margin-top时带跑其父标签。

需要注意的是,盒子的总宽高不只是widthheight,还包括paddingbordermargin。这些属性也不仅可以作用于盒子,也可以作用于盒子中的元素。

在这里插入图片描述

IE盒模型(怪异盒模型)

概念

和标准盒模型一样,使用一样的5个css属性来设置盒子的尺寸以及位置。

与标准盒模型的区别

IE盒模型的paddingborder是计 算在widthheight中的,盒子的总宽高是widthheightmargin

标准盒模型和IE盒模型的切换

在现代浏览器中,大多数标签都是默认用的标准盒模型,但仍可以用box-sizing 属性来切换,content-box为标准盒模型,border-box为IE盒模型。

需要注意的是,大部分元素都默认是content-box,但inputbutton元素默认border-box ,会导致尺寸问题。

CSS定位

概念

传统的盒模型不能处理固定的标签或者带有层叠效果的标签布局,借助CSS中的position属性能够实现标签处于任意的位置,并且可以实现标签的层叠效果,在div+CSS布局中,CSS定位起到一个辅助作用。

position属性
  • static:默认定位,表示标签按照页面默认的布局方式进行定位。

  • fixed:固定定位

    • 设置固定定位的标签会固定在屏幕上,不会随滚动条而滚动。
    • 固定定位标签会被视为“不占空间”,即类似播放器固定在最上层。
    • 固定定位的标签以body作为位置参考,分别以topleftrightbottom设置距离body标签上下左右的距离。
  • absolute:绝对定位

    • 与固定定位相比,绝对定位会随着页面滚动而滚动。

    • 与固定定位相同,绝对定位标签会被视为“不占空间”,即类似播放器固定在最上层。

    • 绝对定位的标签以已定位父标签作为位置参考,分别以topleftrightbottom设置距离已定位父标签上下左右的距离(已定位父标签postion为非static的父级标签或祖先标签。如果没有已定位父标签则会直接参考body标签进行定位)。

      • 特殊用法

        margin:auto;
        position:absolute;
        top:0;
        left:0;
        right:0;
        bottom:0;
        
        • 对已设置宽高的标签可实现相对已定位的父标签垂直水平居中(相当于上下左右都在顶)。
        • 对于未设置宽高的标签可实现平铺整个相对已定位父标签(相当于拉伸以实现四周距离为0)。
  • relative:相对定位

    • 与固定定位和绝对定位相比,相对定位标签仍会占据原来的空间,不会被视为“不占空间”,即设置了相对定位之后原页面布局不受影响。
    • 移动后仍可以类似播放器固定在最上层一样覆盖其他元素。
    • 分别以topleftrightbottom设置距离原来位置上下左右的距离。
改变定位标签的显示层级

z-index:用于控制定位标签的显示顺序,以数字为单位。默认级别为0,数字越大,层级越高,层级高的优先显示,可以设置为负数,但只对非static 的定位标签有效果,且子元素的显示层级受限于父元素的显示层级。

总结
  • 固定定位:需要固定在页面的标签,代码建议放在</body>之前。
  • 绝对定位:位置比较特殊并且不固定的标签。
    • 特殊位置:有层叠效果的标签,是参考父标签,本身不占空间
    • 一般情况,绝对定位会搭配相对定位使用。子绝父相
  • 相对定位:有层叠效果的标签,同时自己需要占空间的。

文档流

概念

指HTML页面中标签的默认排列方式(从上往下、从左往右,行内和行内块级会同行显示,块级元素会独行显示),默认情况下所有标签都处于文档流。

脱离文档流

当我们给标签设置固定定位或绝对定位或浮动时,该标签会脱离文档流,不受文档流的限制,也不属于文档流。文档流的标签会忽略脱离文档流的标签,当成不存在。在页面中脱离文档流的标签会表现为浮在文档流上面,就可能会挡住文档流中的标签。

需要注意的是,相对定位没有脱离文档流,只不过可以借助top等四个位置属性改变自己的位置,也可以有层叠的效果。

浮动

概念

90年代设计了CSS属性float来实现文字围绕图片的效果,译为浮动。目前在页面中表现为设置勒浮动的标签具有很多额外的特性,配合div可以实现页面布局,20年在国内普及的布局方式就是盒模型+浮动。

语法
float: left | right  |none(默认);
特性
  • 浮动标签会和其他浮动标签同行显示,如果父标签宽度不够,浮动标签会自动换行显示。
  • 浮动标签会尽量向左对齐(左浮动 )或向右对齐(右浮动)。
  • 会脱离文档流(会覆盖)。
  • 当上一个标签浮动后,下一个紧挨标签的空间已经顶上去了,但是该标签的内容会认为浮动元素还在,所以才会有标签空间移动但内容不动的情况。
清除浮动标签带来的影响
  • 给受影响的非浮动标签设置CSS属性:clear。clear专门用于清除浮动标签带来的影响。

    clear:left | right |both;
    
  • 通过空白div添加clear属性将浮动元素和非浮动元素给分隔开。

  • 通过< br clear="all" >将浮动元素和非浮动元素分隔开。

  • 父元素添加伪元素可以动态添加一个子元素,完成清除浮动的操作。

浮动子标签带来的父标签的的高度塌陷问题

当父标签高度自适应,子标签浮动时,因子标签脱离文档流,父标签认为没有该子标签,高度会塌陷。给父标签设置overflow:hidden;

dispaly:inline-blockfloat的异同
  • 相同点:

    • 都可以让块级元素同行显示,根据父标签的宽度自动换行
  • 不同点:

    • dispaly:inline-block需要考虑行内块级元素之间的空隙、垂直对齐。

    • display:inline-block标签会留在文档流,float标签会脱离文档流(因脱离文档流,float需注意父标签高度塌陷问题)。

    • float标签需考虑对其他非浮动标签的影响问题。

    • float标签换行需注意float标签高度要一致,不然有换行问题。

      在这里插入图片描述
      在这里插入图片描述

    • float可以直接实现右对齐或左对齐。

div+CSS布局

概念

以CSS盒模型为核心,以div来设计和实现页面的一种布局技术。把页面所有内容都换分到不同的盒子中借助CSS盒模型完成页面布局。

流程
  1. 对psd原稿进行切片

  2. 进行框架分析,确定页面大致有几个模块

  3. 实现框架

    • 宽高

    • 边框或背景

    • 间距

  4. 从上往下依次填充模块内容以及对应的样式

    • 建议每个模块都有一个id,对其子标签设置样式尽量用组合选择器
  5. 细微调节

    • 盒子间的距离
    • 文字字体大小
    • 文字和边框间的距离

弹性布局

概念

div+CSS布局没有自适应、大量时间花在水平或垂直居中、需要清理浮动。弹性布局是CSS第三代布局技术,具有自适应特点,用于替代div+CSS布局或起到辅助作用。弹性布局能够使元素适应不同的容器宽度,比如浏览器宽度,且可以实现内容快速的居中。

弹性布局的标准使用模式
  • 将富余空间作为弹性子项目的空隙进行对齐处理,弹性子项目宽高固定,间隙自适应。
  • 将富余空间按比例分配给弹性子项目作为其尺寸的一部分,尺寸自适应,间隙可使用margin
语法

给容器标签设置display:flex |inline-flex都可以将该容器变为弹性容器,通过设置弹性布局提供的CSS属性能够对弹性容器的直接子标签进行布局的控制。直接子标签也称为弹性子项目。

  • display:flex:其兄弟标签会将该弹性容器视作一个普通的块级元素。
  • display:inline-flex:其兄弟标签会将该弹性容器视作一个普通的行内块级元素。

另外,一般不会对弹性容器设置高度,因为自适应。

主轴和侧轴

默认情况下,水平方向为其主轴,垂直方向为其侧轴。也可通过相关属性进行设置。

弹性布局相关CSS属性
  • flex-direction:设置弹性容器的主轴,默认是row,即水平。

    flex-direction:row | row-reserve | column | column-reserve;
    
    • rowrow-reserve将主轴设置为水平,row-reserve是水平向左,侧轴是主轴的垂直方向。
  • flex-wrap:对弹性容器设置是否允许直接子标签换行。

    flex-wrap:nowrap | wrap;
    
  • justify-content:设置弹性子项目在主轴上的对齐方式(是给弹性容器设置)。

    justify-content:center | flex-start | flex-end | space-between | space-around | space-evenly;
    
    • center:水平居中。
    • flex-start:从主轴开头进行排列。
    • flex-end:从主轴结尾处进行排列。
    • space-between:弹性子项目中间均分主轴上的空余空间。
    • space-around:弹性子项目两边均分主轴上的空余空间。
    • space-evenly:弹性子项目所有空隙均分主轴上的空余空间。
  • align-content:设置弹性子项目在侧轴上的对齐方式(是给弹性容器设置)。

    align-content:center | flex-start | flex-end | space-between | space-around | space-evenly | stretch;
    
    • 必须保证弹性子项目可以换行。
    • 如果设置为stretch,弹性子项目的默认高度就是弹性容器的高度。
  • align-items:设置弹性子项目之间的对齐方式。

    align-items:stretch | baseline | flex-end | flex-start | center;
    
    • stretch:当弹性子项目高度为auto或没设高度时,会自动拉伸高度,高度会刚好容得下内容。
弹性空间

弹性空间指的是一个弹性子项目本身的尺寸与通过分配所得到的富余空间的总和。对主轴或侧轴的富余空间的处理不再是对齐,而是直接分配给弹性子项目作为其空间的一部分,间隙可使用margin

相关CSS属性

  • flex-grow:弹性子项目的成长因子,简称弹性因子,指的是分配到赋予空间的 比例。弹性因子越大,分配的空间越多。给弹性子项目设置。如果因子都为1,那么富余空间平均分配。 如果因子不一样,那么直接按比例进行分配。
弹性布局细节处理
  • order:能够改变某个弹性子项目的显示顺序。数字越小,显示越靠前。
  • flex-shrink:控制弹性子项目的收缩比例,如果弹性子项目所需要的宽度超过了弹性容器的宽度,那么默认情况下,弹性子项目会收缩同样的尺寸来匹配弹性容器的宽度。如果某个子项目收缩比例大,那么被分摊的尺寸也更多,即会让出更多的空间(是给弹性子项目设置)。
  • flex-basis:弹性子项目的默认宽度。
弹性布局的应用场景
  • 水平导航
  • 带有重复标签的列表,比如商品列表、课程列表
  • 标签的快速水平垂直居中
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSS布局 的相关文章

  • 如何使用 tablesorter Stickyheaders 小部件 - 不起作用?

    我在尝试将 StickyHeaders 小部件实现为 tablesorter 插件的一部分时遇到问题 我已按照通过 Stackoverflow 和其他网站找到的教程中的说明进行操作 但似乎没有任何效果 这是我的header code
  • 防止页面跳转到iframe

    我正在尝试通过 iframe 将 wetransfer 集成到网站中 但是当页面加载时遇到问题 它会跳转到页面的一半 因此它专注于 iframe 而不是在页面顶部打开 据我所知 wetransfer 网站上有一个脚本告诉它跳转到该部分 而不
  • phonegap 中的 HTML 按钮没有反应

    我有三个 HTML 按钮 当我单击它们时 没有外部发光 并且它们不执行任何操作 我也尝试过对它们进行样式设计 但它们仍保留默认设计 我刚刚使用了普通代码 我只是不知道它们出了什么问题
  • 在使用 jQuery 拖动时向元素添加 CSS 类

    是否可以在元素被拖动到特定区域时向其添加 CSS 类 并在元素被删除后替换该类 我并不是到处寻找这个功能 而是只在特定区域寻找这个功能 是的 这当然有可能 jQuery UI 提供了一些方便的选项和事件来执行此操作 对于初学者来说 可拖动元
  • 编写XSL对xml数据执行一些操作

    如何在 products xsl 正文中编写 xsl 以获取数量 gt 10 的产品名称和状况 产品 xml
  • 禁用 CSS 规则

    有什么办法可以禁用 CSS 规则吗 我问是因为我使用的是 Kendo UI 他们的规则非常全面 例如 k grid td styles 然而 如果我把我的桌子放在他们的桌子里面 它的风格也会类似 所以它的影响太大 需要删除 更换 我不想手动
  • 方向改变后的javascript最大视口高度Android和iOS

    目标 查找设备的最大视口高度 包括设备的空间address bar这样我们就可以动态调整 min body 的大小并将内容向上推 问题 移动浏览器处理方向状态的方式不同 方向变化时更新 DOM 属性的方式也不同 使用 JavaScript
  • 如何根据另一个动态下拉列表的值创建动态下拉列表?

    我有一个下拉菜单 当我选择一个选项时 它会创建一个动态下拉菜单 到目前为止 一切都很好 但我想创建另一个动态下拉列表 现在基于另一个动态下拉列表的值 我该怎么做 第一个动态下拉列表有效 我猜第二个无效 因为动态变量 div 没有静态 ID
  • 光标:属性值无效

    我已经找这个很久了 可悲的是 我发现的所有内容都不适合我 我的自定义光标在 Firefox 上不起作用 我有一个漂亮的 无效属性值 同样在 Firefox 开发版中我也遇到了同样的错误 但显示了光标 Chrome 没问题 显示没有任何错误
  • html 抓取和 CSS 查询

    以下库的优点和缺点是什么 PHP 简单 HTML DOM 解析器 http simplehtmldom sourceforge net QP http querypath org phpQuery http code google com
  • 如何检测浏览器中操作系统是否处于深色模式?

    如同 如何检测 OS X 是否处于深色模式 https stackoverflow com questions 25207077 how to detect if os x is in dark mode 仅适用于浏览器 有没有人发现是否有
  • 提交表单时显示警告框

    所以我有这两页 pageOne php and pageTwo php 表格在pageOne php
  • 上传前如何检查图片的宽度和高度

    对于图片上传 我编写了以下 html 代码
  • 元素在主体内找不到足够的空间 - JavaScript 样式

    相关信息 该页面包含两个元素 An
  • CSS 属性名称中的“font-”与“text-”

    CSS 属性名称中使用的术语 文本 和 字体 有什么区别 它们的含义是否相同 或者以以下开头的 CSS 属性名称之间是否存在语义差异font 和一个开头text 例如 为什么我们有这些 CSS 属性 font size 34px text
  • 'DOMException:使用'option:selected'选择器时无法在'Element'上执行'querySelectorAll'

    我正在运行一个页面 该页面在以下行中引发错误 var label select find option selected html select find option first html 为了完整起见 这里是完整的 jQuery 函数
  • 如何使用 Angular CLI 添加应用程序范围的 CSS 文件?

    我想向我的 Angular 2 应用程序添加一些分片样式 例如字体和配色方案等将在任何地方使用的东西 过去 我总是通过在索引页面添加这样的标签来完成此操作 这不适用于 CLI 用于为应用程序提供服务的任何内容 我尝试在构建后手动将 css
  • onClick 事件适用于触摸屏设备上的触摸吗?

    我用过onclick我的网站上的活动 但是 当我在谷歌浏览器的开发人员模式移动视图中打开它时 触摸使用鼠标单击的元素没有任何反应 所以我的问题是 我还必须添加吗ontouch事件连同onclick事件或 onClick 事件适用于所有触摸屏
  • 隔离必需的字段验证器?

    我在页面上有两个搜索按钮 一个链接到下拉列表 另一个链接到带有文本框的下拉列表以获取更多搜索条件 我在所有上述控件上都需要现场验证器 当我从第一个下拉列表中选择某些内容并单击相应的搜索按钮时 文本框的字段验证器会触发 从而禁用第一个搜索按钮
  • 具有相等宽度和高度 TD 的响应式表格

    如何创建每个单元格 TD 具有相同宽度和高度的响应式 HTML 表格 因此 当我调整浏览器窗口的大小或调整表格容器的大小时 表格将调整大小 但每个单元格将具有相同的高度和宽度 基金会不关心这个 当我用固定宽度和高度 以像素为单位 初始化 T

随机推荐

  • android 绘图之Path与Paint详解 - 冷冷汤圆

    http www cnblogs com aibuli p efef9d774df97c553a8a0c0c3495ba35 html utm source tuicool utm medium referral
  • 注释转换小项目(c注释->到c++注释)

    首先欢迎阅读本文 注释转换小项目涉及到c语言对文件的操作 另外这个小项目还应该对各种情况都考虑到 将c语言注释转换为c 注释 经过分析思考 我得到证据要的注释转换有以下几类 我将之整理并放入一个文件里 起名input c 1 一般情况 in
  • 【JavaScript高级】函数相关知识:函数、纯函数、柯里化、严格模式

    文章目录 函数 函数对象的属性 arguments arguments转Array 箭头函数不绑定arguments 剩余参数 rest 纯函数 定义 纯函数的案例 作用和优势 柯里化 定义 优势 自动柯里化 组合函数 定义 组合函数的封装
  • QT信号与槽的6种连接方式以及传递参数为自定义参数时

    文章目录 前言 一 信号与槽的连接 二 connect的第五个参数 三 传递参数为自定义参数时 扩展 前言 QT提供了信号与槽机制来实现对象之间的通信 只有QObject及其派生类才能使用信号和槽机制 且在类之中还需要使用Q OBJECT宏
  • CVTE面试总结(全网面经,已收offer)

    CVTE面试总结 文章目录 CVTE面试总结 CVTE一面 CVTE二面 CVTE面试hr面准备工作 1 问工资 2 给前面两轮面试打分 3 家庭关系和谁最好 4 未来5 10年会做什么 怎么规划 5 有没有别的offer 6 如果给off
  • 专家讲解 Hadoop:HBASE松散数据存储设计

    http developer 51cto com art 201006 203833 htm 本节和大家一起学习一下Hadoop HBASE松散数据存储设计方面的内容 希望通过本节介绍大家能够掌握Hadoop HBASE松散数据存储设计的方
  • 设计模式复习(七)-------适配器模式

    1 定义 将一个类的接口转换成客户希望的另一个接口 Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 设计模式 GoF 适配 即在不改变原有实现的基础上 将原先不兼容的接口转换为兼容的接口 Adapter模式很像货
  • C语言之移位操作符、位操作符详解

    目录 1 移位操作符 2 位操作符 1 移位操作符 分为左移操作符 lt lt 和右移操作符 gt gt 左移操作符 移位规则 左边抛弃 右边补0 什么意思呢 现在就让我来仔细讲解一番 比如我们定义一个整型变量a 给它赋初值5 如int a
  • tablayout固定在顶端

    当tablayout上方还有其他布局只需要给其他布局添加 app layout scrollFlags scroll 就可以实现
  • postgresql查找数据库端口

    netstat a grep PGSQL
  • 使用git时出现fatal: Authentication failed for

    出现如下错误 fatal Authentication failed for 这是因为我使用的git账号的密码修改了 但是之前已经保存了原来的密码 所以就是密码错误导致无法登陆 但是又不会弹出来让我重新输入密码的界面 这就尴尬了 后来找到了
  • MSYS2 介绍、下载与安装、Pacman常用命令

    一 MSYS2 介绍 MSYS2 官网 MSYS2 MSYS2 Minimal SYStem 2 是一个集成了大量的GNU工具链 工具和库的开源软件包集合 它提供了一个类似于Linux的shell环境 可以在Windows系统中编译和运行许
  • odoo15设置定时任务

    概念 主要是 ir cron模型 它有以下属性 ir actions server id 服务端动作 cron name 任务名称 user id 调度程序用户 默认是当前环境用户 active 默认True interval number
  • KNN最近邻算法——原理和Python代码

    KNN最近邻算法是一种监督学习算法 基本思想是取距离测试数据最近的K个点 这K个点训练数据属于某一类型的数量多 则将该测试数据点也判断为该类 距离可以取 1 欧氏距离 2 曼哈顿距离 算法 1 计算测试数据与各个训练数据之间的距离 2 按照
  • java基础:Object类和Objects工具类的介绍

    1 Object 1 说明 Object类是所有类 数组 枚举类的父类 java允许把任何类型的对象赋给Object类型的变量 当定义一个类时没有使用extends为它显式指定父类 则该类默认继承Object父类 2 Object类的常用方
  • Servlet的Cookie与Seesion的介绍

    什么是Cookie Cookie是服务器在本地机器上存储的小段文本 它是一个简单的字符串形式的键值对 网络服务器用HTTP头向客户端发送cookie 一般情况下Cookie是由服务端生成的 当然js也能操作cookie 在客户端 浏览器解析
  • Python将numpy(.npy文件)存储为.ply文件

    Python将numpy npy文件 存储为 ply文件 安装Open3D From NumPy to Ply Open3D文档 安装Open3D pip install open3d From NumPy to Ply Pass xyz
  • [561]TensorFlow练习1: 对评论进行分类

    TensorFlow是谷歌2015年开源的一个深度学习库 到现在正好一年 和TensorFlow类似的库还有Caffe Theano MXNet Torch 但是论火爆程度 TensorFlow当之无愧 短短一年就在Github就收获了4万
  • ubuntu安装docker及在docker中使用gpu

    ubuntu安装docker和nvidia docker2 docker19以下版本 安装docker 安装nvidia docker2 docker19以上版本 安装docker 安装nvidia container runtime do
  • CSS布局

    CSS布局 div标签 概念 div div 本身是HTML4的标签 因其特殊性而一直作为CSS布局的核心标签 特点 div div 本身默认样式极少 只有默认块级元素这一项 没有太多默认属性 默认宽度为100 总结 本身不具有太多默认的样