【攻破css系列——第九天】常规流

news2024/10/6 16:29:51

文章目录

  • 1. 常规流
  • 2. 常规流布局
    • 2.1 定义
    • 2.2 包含块
    • 2.3 块盒
      • 2.3.1 每个块盒的总宽度,必须等于包含块的宽度
      • 2.3.2 每个块盒垂直方向上的auto值
      • 2.3.3 百分比取值
      • 2.3.4 上下外边距合并(margin塌陷)
    • 2.4 行盒
      • 2.4.1 盒子沿着内容延伸
      • 2.4.2 宽高不可调整
      • 2.4.3 内边距(填充区)、边框、外边距
    • 2.5 行块盒
      • 2.5.1 特点
      • 2.5.2 空白折叠

在这里插入图片描述


我们上章学习了盒子模型,理解了元素们在网页中的存在形式,也就是说盒模型规定了单个盒子(元素)的规则。而他们的布局,默认以常规流的形式呈现。

1. 常规流

盒模型:规定了单个盒子的规则,包括:margin、border、padding、content。但多个盒子他们之间的分布我们没办法,所以就出现了视觉格式化模型定义布局的规则。它大体上将页面中盒子的排列分为三种方式:常规流、浮动、定位


2. 常规流布局

2.1 定义

常规流,又叫文档流 、普通文档流、常规文档流。

所有元素,默认情况下,都属于常规流布局。总体规则:块盒独占一行,行盒水平依次排列。

接下来,介绍一个❗️重要的概念:包含块。

2.2 包含块

包含块(containing block): 每个盒子都有它的包含块,包含块决定了盒子自己的排列区域(活动区域)。这里就像是妈妈🤰和她肚子里的宝宝👶,宝宝还没生出来的时候的活动区域只在妈妈的肚子里。绝大部分情况下,盒子的包含块为其父元素的内容盒。

红色部分🔴为其子元素的包含块:

在这里插入图片描述


2.3 块盒

2.3.1 每个块盒的总宽度,必须等于包含块的宽度

  • html(这里设置两个盒子,为父子关系,并设置高度、宽度、背景颜色。内边距、外边距等参数,但子盒不设置宽度)

    <body>
        <div class="father">
            <div class="son"></div>
        </div>
    </body>
    
  • css

    <style>
        .father {
            height: 200px;
            width: 200px;
            padding: 100px;
            background-color: red;
    
        }
    
        .son {
            height: 50px;
            padding: 50px;
            background-color: blue;
        }
    </style>
    
  • 效果

    其中子盒结构为:

    在这里插入图片描述

    而父盒结构为:

    在这里插入图片描述

    子盒的包含块的宽度可以从父盒的内容区来看,父盒内容区宽度为 200px。而子盒的整体宽度为:80 + 10*2 + 50*2 = 200。也就是说:块盒的包含块宽度就是块盒的整体宽度,这里还有要注意的点,我们并没有给子盒的 width 设置值,那它的值时怎么来的?

    ❗️ 注意:width 属性在 css 中设置的是内容的宽度

  • width: auto

    块盒没有设置 width 时(这里与行盒无关,盒子模型说过:行盒无法设置宽高),该属性默认值是 auto,而 auto 会吸收剩余空间

    什么意思呢?由于 块盒的宽度 = margin 宽度 + padding 宽度 + border 宽度 + content 宽度(其中 margin、padding、border 的默认值为 0,content 默认值为 auto)。

    在这里插入图片描述

    因为块盒宽度 == 包含块宽度 == 父元素内容宽度,所以块盒的宽度是已知的。

    如果我们有设置 margin、padding、border 等元素,就可以知道其宽度,没有设置就默认为 0 。这时候 auto 会自动计算剩余的空间,即:content 宽度 = 块盒的总宽度 - margin 宽度 - padding 宽度 - border 宽度 ,这样就可以得到 content 的宽度了,也就是 width 的值。如果出现计算后,content 宽度 < 0 的情况:那么这时候可能出现很多种情况(有可能看不见,有可能不在包含块内等),这里不考虑这种,因为感觉不太可控。

  • margin: auto

    而 margin 也有 auto 值可以设置,若内容、边框、内边距的宽度计算后,仍然有剩余空间,该剩余空间由 margin-left 和 margin-right 平分(居中小能手💪)。

    • html

      <body>
          <div class="father">
              <div class="son"></div>
          </div>
      </body>
      
    • css

      <style>
          .father {
              width: 1000px;
              background-color: red;
          }
      
          .son {
              height: 100px;
              width: 100px;
              padding: 50px;
              background-color: blue;
              margin:auto;
          }
      </style>
      
    • 效果(整体效果图和子盒结构图)

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

      所以说,在常规流中,块盒在其包含块的水平居中,可以这么设置。

      margin: 0;
      或者
      margin: 0 auto;
      
  • width吸引能力强于margin
    当同时出现 width:automargin:auto 时,或者 width 没设置(没设置时,width 默认值为auto),只设置 margin:auto 。都优先执行 width:auto此时 margin 视为 0。这里不多加演示,知道即可。


2.3.2 每个块盒垂直方向上的auto值

height:auto 会适应内容高度,而 margin:auto 垂直方向 = 0。

  • html

    <body>
        <div class="father">
            <div class="son">1</div>
        </div>
    </body>
    
  • css

    <style>
        .father {
            width: 1000px;
            height: 100px;
            background-color: red;
        }
    
        .son {
            height: auto;
            margin: auto;
            background-color: blue;
        }
    </style>
    
  • 效果(整体效果图和子盒结构图)

    在这里插入图片描述
    在这里插入图片描述
    我们同时给 height 和 margin 设置了 auto。水平方向上,由于子盒并未设置 width,width 默认为 auto,所以其内容宽度经计算后为父元素的宽度 1000px。而垂直方向上,我们发现子盒高度与其内容相关,并且加不加这两个属性盒子都不会变化,说明 height 默认适应内容高度,垂直方向的margin 默认为 0,且他们的auto值和默认值一致


2.3.3 百分比取值

padding、width、margin 可以取值为百分比。

以上所有百分比都是相对于包含块的宽度(也就是父元素内容的宽度)。

而关于高度的百分比:

  1. 包含块的高度取决于子元素的高度,设置百分比无效。(包含块的高度由父元素定义,当父元素高度取决于子元素,在设置百分比时,子元素高度又取决于父元素,这样两者都取决于彼此,相当于无法设置)
  2. 包含块的高度不取决于子元素的高度,百分比相对于父元素高度。

我们举个栗子🌰:

  • html

    <body>
        <div class="father">
            <div class="son">1</div>
        </div>
    </body>
    
  • css

      <style>
          .father {
              width: 200px;
              /* height: 100px; */
              background-color: red;
          }
      
          .son {
              height: 10%;
              margin: 10%;
              padding: 10%;
              width: 10%;
              background-color: blue;
          }
      </style>
    
  • 效果(子盒子结构图)

    在这里插入图片描述

    由于父元素的宽高为 200px * 100px,也就是包含块宽高为 200px * 100px。padding、width、margin 设置 10% 相对的是包含块的宽度,也就是都是 20px。height 设置 10 % 相对的是包含块的高度,所以是 10px。由于父元素设置了高度,所以子元素高度百分比设置有效。

当父元素没设置高度,height 属性设置百分比失效。(注释掉父元素原有的高度)

在这里插入图片描述


2.3.4 上下外边距合并(margin塌陷)

两个常规流块盒,上下外边距相邻,会进行合并,也就是会产生 margin 塌陷问题。


2.4 行盒

2.4.1 盒子沿着内容延伸

行内元素你里面写什么,它的宽度就有多宽。

在这里插入图片描述


2.4.2 宽高不可调整

调整行盒的宽高,应该使用字体大小、行高、字体类型间接调整。


2.4.3 内边距(填充区)、边框、外边距

水平方向有效,垂直方向仅会影响背景,不占据实际空间。

  • html

    <body>
        <div class="box1">helloworld</div>
        <span class="span">我是行内元素span</span>
        <div class="box2"></div>
    </body>
    
  • css

    <style type="text/css">
        body {
            margin: 0;
            padding: 0;
        }
    
        .box1 {
            width: 200px;
            height: 200px;
            font-size: 30px;
            background-color: #aaa;
            border: 4px solid red;
            text-align: center;
            line-height: 350px;
        }
    
        .box2 {
            width: 200px;
            height: 200px;
            background-color: #ccc;
            border: 4px dashed blue;
        }
    
        .span {
            border: 4px dotted green;
            background-color: greenyellow;
            padding: 20px;
            margin: 20px;
        }
    </style>
    
  • 效果

    在这里插入图片描述


2.5 行块盒

2.5.1 特点

  1. 不独占一行

  2. 宽高有效

2.5.2 空白折叠

空白折叠,只发生在行盒内部(行块盒) 或者 行盒(行块盒)之间。

本文主要学习【渡一教育】袁进老师的html+css基础课程

参考过dreamer_zhou

如有错误,敬请指正,欢迎交流🤝,谢谢♪(・ω・)ノ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis基础入门教程 - 概览

Redis基础教程 欢迎加好友一起讨论问题 知识地图&#xff1a;Redis概述与安装https://blog.csdn.net/lili40342/article/details/127852124Redis的5大数据类型https://blog.csdn.net/lili40342/article/details/127897689Redis的发布和订阅https://blog.csdn.net/lili40342/art…

C++模拟OpenGL库——图片处理及纹理系统(四):UV纹理坐标

目录 引入UV纹理坐标及三角形绘制设置 纹理过滤 引入UV纹理坐标及三角形绘制设置 上图其实不是很直观。 UV坐标要解决的问题就是&#xff1a; 假设我有一张500500的纹理图片&#xff1b; 我要把它映射到一张200200的图片中&#xff1b; 这个问题要怎么去解决。 这里提出…

【附源码】Python计算机毕业设计网络考试系统设计

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

百度第三季度财报前瞻:财务业绩预计将超预期

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 百度&#xff08;BIDU&#xff09;此前于2022年11月8日发布了一份媒体新闻稿&#xff0c;强调其将在2022年11月22日公布其第三季度财报。 分析师预计百度第三季度的财务业绩将有所改善 根据卖方分析师对百度的一致财务预测&…

基于GPU的kokkos加速安装

基于GPU的kokkos加速安装基于GPU的kokkos加速安装1. 安装lammps2. 安装cmake3. cmake相关文件修改4. cmake编译5. 测试安装lammps及相关库的步骤网上很多&#xff0c;这里介绍在前期步骤准备好的情况下&#xff0c;如果in文件中包含反应力 场以及需要通过voronoi库计算应力&…

【文本分类】《融合知识感知与双重注意力的短文本分类模型》

阅读摘要&#xff1a;   本文主要提出基于TextRCNN模型使用知识图谱、双重注意力感知来改进短文本分类&#xff0c;最终提高了精度。 参考文献&#xff1a;   [1] 融合知识感知与双重注意力的短文本分类模型 参考论文信息 &#xff08;很牛&#xff09; 论文名称&#xff1…

算法课实验报告解析(4班供参考)

有两个题1.第一题2.第二题1.第一题 &#x1f60b;题目描述&#xff1a; 给定一个整数数组A(ao&#xff0c;a1&#xff0c;…,an-1),若岗且ai>aj&#xff0c;则<ai.aj>就为一个逆序对。例如数组&#xff08;3,1,4,5,2,&#xff09;的逆序对有<3,1>、< 3,2>…

C++STL-string类的实现(上)

在上一篇中&#xff0c;我们知道了string类的一些基本使用&#xff0c;这一篇我们就说一下string类的具体的底层实现。 文章目录1.预前准备1.1 初步的构造和析构1.2 下标的运算符重载2. 深浅拷贝2.1 拷贝构造函数2.2 运算符重载3. 完善前面写的函数3.1 完善构造函数和析构函数…

【自用】Linux服务器部署Oracle并使用数据库管理工具Navicat远程连接(包含远程Navicat配置)

一、服务器端 配置 0.传输oracle安装包和依赖 1.更新依赖 yum update2.检测oracle依赖 rpm -ivh oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm # 请根据版本选择3.yum安装oracle-database-preinstall yum install oracle-database-preinstall-19c-1.0-1.el7.x86_6…

Azide-PEG-Cholesterol,N3-PEG-Cholesterol,叠氮-PEG-胆固醇PEG试剂供应

化学试剂胆固醇-聚乙二醇-叠氮,其英文名为Cholesterol-PEG-Azide&#xff08;Cholesterol-PEG-N3&#xff09;&#xff0c;它所属分类为DSPE PEG Azide PEG。 试剂胆固醇PEG叠氮的分子量均可定制&#xff0c;有&#xff1a;Cholesterol-PEG 2k-Azide、胆固醇-聚乙二醇 3.4k-叠…

SMBMS系统_准备工作

构建项目Maven/jar 初次构建项目时&#xff0c;思考是不是通过maven创建&#xff0c;使用maven的化需要导入那些依赖&#xff1b; 如果不是使用maven创建项目的话&#xff0c;使用哪些些jar包。 检测验证项目 选择使用maven创建项目完成&#xff0c;可以使用模板&#xff0c…

嵌入式分享合集106

一、可控硅控制电路实例 可控硅是可控硅整流器的简称。可控硅有单向、双向、可关断和光控几种类型。它具有体积小、重量轻、效率高、寿命长、控制方便等优点&#xff0c;被广泛用于可控整流、调压、逆变以及无触点开关等各种自动控制和大功率的电能转换的场合。 单向可控硅是一…

【CloudCompare教程】001:CloudCompare中文版下载与安装图文教程

CloudCompare是一款功能强大的点云后处理软件,本文讲解CloudCompare中文版下载与安装方法。 文章目录 一、CloudCompare下载地址二、CloudCompare安装教程三、CloudCompare中文设置一、CloudCompare下载地址 官方下载地址:http://www.danielgm.net/cc/release/ 二、CloudComp…

vue中使用wangeditor富文本编辑器

官方文档 项目中要求实现富文本编辑器取编辑内容 这种编辑器有好多选择了wangeditor富文本编辑器 首先根据文档安装 yarn add wangeditor/editor # 或者 npm install wangeditor/editor --saveyarn add wangeditor/editor-for-vuenext # 或者 npm install wangeditor/edit…

MySQL进阶实战8,分区表详解

目录一、分区表二、分区的作用三、分区的一些限制四、分区表的增删改查1、select2、insert3、delete4、update五、分区表的类型六、如何使用分区表七、分区表会有哪些问题&#xff1f;1、分区列和索引列不匹配2、选择分区的成本可能很高3、打开并锁住所有底层表的成本可能会很高…

统计信号处理基础 习题解答6-9

题目&#xff1a; 在开关键控&#xff08;OOK&#xff09;的通信系统中&#xff0c;我们发射两个信号中的一个&#xff0c;即 表示bit0&#xff0c;而 表示bit1。假定幅度是正的&#xff0c;为了确定发射的是哪个bit&#xff0c;我们对接收机的波形在符号周期内 进行采样&…

深入了解快速排序和归并排序

作者&#xff1a;~小明学编程 文章专栏&#xff1a;Java数据结构 格言&#xff1a;目之所及皆为回忆&#xff0c;心之所想皆为过往 快速排序和归并排序作为排序中的两个重点&#xff0c;也是面试中最常考的两个知识点&#xff0c;这里带大家详解的了解这两个排序。 目录 快速…

DSPE-PEG-TPP;磷脂-聚乙二醇-磷酸三苯酯;(阻燃剂TPP)是种含磷元素的化合物,可用作无卤环保型阻燃剂

中文名称&#xff1a; 二硬脂酰基磷脂酰乙醇胺-聚乙二醇-磷酸三苯酯&#xff1b;三苯基磷聚乙二醇磷脂 英文简称&#xff1a; DSPE-PEG-TPP,TPP-PEG-DSPE 分子量&#xff1a; 2000,3400,5000等 溶剂: 溶于部分有机溶剂 磷酸三苯酯为无味、无臭的白色结…

JDK8 连接Access数据库

JDK8 连接Access数据库1. 安装JDK82. 下载配置文件3. 源码设置前面我们讲了如何使用Java连接ODBC并配置Access数据库&#xff0c; 参考连接&#xff1a;https://jackwei.blog.csdn.net/article/details/86285822 可以知道JDK8之后已经不支持jdbc-odbc桥接了&#xff0c;如果你可…

windows10上运行magic keyboard和magic mouse

windows10上运行magic keyboard和magic mouse并保持你的mac习惯 所有需要的软件和插件都可以在这里寻找到链接&#xff1a;https://pan.baidu.com/s/1Y8vjRnznqKP7f8dFFrHoGw?pwdvpsy 提取码&#xff1a;vpsy 安装蓝牙 你的windows电脑可能自带了蓝牙&#xff0c;那你直接…