CSS的布局模式

news2024/12/23 23:28:38

前言:

我们可以看到京东的官网上的一些例子(如下图),在同一排中能够存在多个div,这是通过布局方式(例如浮动)来实现的。

CSS传统的布局模式:

 <1>普通流(又称之为标准流)

解释:

普通流布局又被称之为标准流布局,顾名思义,按照标准的布局规则进行布局

标准布局规则:

<1>  块元素,独占一行,按照自上而下的顺序

<2>  行内元素,先按照自左向右的顺序排列,如果碰到父级元素的边缘则自动换行

举例:
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
   <style>
      .div1{
         height: 200px;
         width: 200px;
         background-color: aqua;
      }
      .div2{
         height: 200px;
         width: 200px;
         background-color: brown;
      }
      .div3{
         height: 200px;
         width: 200px;
         background-color: chartreuse;
      }
   </style>
</head>
<body>
   <div class="div1">div1</div>
   <div class="div2">div2</div>
   <div class="div3">div3</div>
</body>
</html>

普通流实现一行多个div:
举例:
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
   <style>
      .div1{
         height: 200px;
         width: 200px;
         background-color: aqua;
         display: inline-block;
      }
      .div2{
         height: 200px;
         width: 200px;
         background-color: brown;
         display: inline-block;
      }
      .div3{
         height: 200px;
         width: 200px;
         background-color: chartreuse;
         display: inline-block;
      }
   </style>
</head>
<body>
   <div class="div1">div1</div>
   <div class="div2">div2</div>
   <div class="div3">div3</div>
</body>
</html>

总结:

虽然我们可以通过普通流来实现一行多个div,但是过于麻烦而且行块内存在缝隙,并且有很多的布局无法通过标准流来实现。

<2>浮动 float

基础:

解释:

float属性用于创建浮动框,将其移动到一边,直至 左/右边缘 触及包含块或者另一个浮动框的边缘。

浮动特性:

所有使用floa属性的元素的display属性都会改变,不论它是一个什么样的元素,都会变成一个块级框,而不论它本生是何种元素

用法:

选择器{float:属性值;}

属性值:
属性值说明
none默认值,不进行浮动
left

向左移动

right向右移动

inline-end

在最右侧

inline-start

在最左侧
举例:
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
   <style>
      .div1{
         float: left;
         height: 200px;
         width: 200px;
         background-color: aqua;
      }
      .div2{
         float: right;
         height: 200px;
         width: 200px;
         background-color: brown;
      }
   </style>
</head>
<body>
   <div class="div1">div1</div>
   <div class="div2">div2</div>
</body>
</html>

浮动的脱标:

文字解释:

设置了浮动是元素会漂浮在标准流之上,不占用位置,浮动在上面,也称之为脱标。

图解:

举例:
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
   <style>
      .div1{
         float: left;
         height: 200px;
         width: 200px;
         background-color: aqua;
      }
      .div2{
         height: 800px;
         width: 800px;
         background-color: brown;
      }
   </style>
</head>
<body>
       <div class="div1">div1</div>
       <div class="div2">div2</div>
  
</body>
</html>

浮动的清除:

原因:

父级盒子在很多时候的高度不方便给出,则有可能造成 浮动的盒子影响到下方的标准流盒子。

清除的方法:
<1>隔墙法(额外标签)
方法:

在浮动标签后添加 空标签()或者其他标签(如br)

总结:

优点:书写简单

缺点:无意义标签较多导致结构化较差

举例:
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
   <style>
      .div1{
         float: left;
         height: 200px;
         width: 200px;
         background-color: aqua;
      }
   </style>
</head>
<body>
   <div style="background-color: brown;">
      <div class="div1">
         div1
      </div>
      <div style="clear: both"></div>
      <br>
   </div>
</body>
</html>
<2>父级添加overflow属性
方法:

在父级的style内添加overflow,来解决

属性值:
属性值解释
visible不裁剪溢出的内容。浏览器把溢出来的内容呈现在其内容元素的显示区域以外的地方,全部内容在浏览器的窗口是可见的。
hidden裁剪溢出的内容。内容只显示在其容器元素区域里面,这意味着只有一部分内容在浏览器窗口里面是可见的。
scroll类似于hidden,浏览器将对溢出的内容进行裁切,但会显示滚动条以便让用户能够看到内容部分。
auto类似于scroll,但是浏览器只在真的发生内容溢出的时候才会显示滚动条,如果内容没有溢出则不显示滚动条
总结:

优点:简洁,方便

缺点:溢出的内容无法显示出来

举例:
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
   <style>
      .div1{
         float: left;
         height: 200px;
         width: 200px;
         background-color: aqua;
      }
   </style>
</head>
<body>
   <div style="background-color: brown; overflow: scroll;">
      <div class="div1">
         div1
      </div>
   </div>
</body>
</html>
<3>使用after伪类:
方法:

使用after来代替<1>

总结:

优点:结构语义化

缺点:IE6-7不支持,需要使用zoom:1

举例:
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
   <style>
      .div1{
         float: left;
         height: 200px;
         width: 200px;
         background-color: aqua;
      }
      .div2:after{
         content: "";
         display: block;
         height: 0;
         clear: both;
         visibility: hidden;
      }
   </style>
</head>
<body>
   <div class="div2" style="background-color: brown;">
      <div class="div1">
         div1
      </div>
   </div>
</body>
</html>
<4>使用双伪类
方法:

使用before和after

总结:

优点:结构语义化

缺点:IE6-7不支持,需要使用zoom:1

举例:
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
   <style>
      .div1{
         float: left;
         height: 200px;
         width: 200px;
         background-color: aqua;
      }
      .div2:before,
      .div2:after{
         content: "";
         display: table;
      }
      .div2:after{
         clear: both;
      }
   </style>
</head>
<body>
   <div class="div2" style="background-color: brown;">
      <div class="div1">
         div1
      </div>
   </div>
</body>
</html>

补充:

clear的解释:

clear属性指定一个元素是否必须移动(清除浮动后)到在它之前的浮动元素下面。clear 属性适用于浮动和非浮动元素。

属性值:
属性值说明

none

元素不会向下移动清除之前的浮动。

left

元素被向下移动用于清除之前的左浮动。

right

元素被向下移动用于清除之前的右浮动。

both

元素被向下移动用于清除之前的左右浮动。

inline-start

表示该元素向下移动以清除其包含块的起始侧上的浮动。即在某个区域的左侧浮动或右侧浮动。

inline-end

 表示该元素向下移动以清除其包含块的末端的浮点,即在某个区域的右侧浮动或左侧浮动。

after和before伪类的补充:

见此文章:点击查看

<3>定位 position

属性值略解:
属性值解释
static正常定位
relative相对定位
absolute绝对定位
fixed固定定位
sticky粘性定位
属性值详解:
static(正常定位):
解释:

static其意思是正常定位,是position的默认值,包含此属性值的元素遵循常规流,此时的top,right,bottom,left,z-index属性都会失效。

举例:
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
   <style>
      .c{
         position: static;
         background-color: pink;
      }
   </style>
</head>
<body>
   <div class="c">div1</div>
   <br>
   <div class="c">div2</div>
   <br>
   <span class="c">span1</span> <span class="c">span2</span>
</body>
</html>
relative(相对定位):
解释:

relative意为相对定位,在不设置top,left,right,bottom等元素时与static并无区别,但设置后,会根据相对于自身再常规流中的位置进行定位。

【意思是说虽然是移动了,但其原有的位置任然存在、占有,只是移动了】

图解:

例如下图,我们利用relative将黑框向下移动到绿色部分处,那么移动后其所占据的空间任然是黑框的部分,但显示时显示的是绿色部分。

举例:
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
   <style>
      .c{
         position: relative;
         top: 100px;
         background-color: pink;
      }
   </style>
</head>
<body>
   <div class="c">div1</div>
   <br>
   <br>
   <br>
   <div style="background-color: aqua;">div2</div>
</body>
</html>
absolute(绝对定位):
解释:

(1)absolute与relate之间的区别在于是否脱离了标准流,relate在移动时并没有脱离,而absolute却脱离了。【absolute不占据原有位置,而是转移后的位置】

(2)absolute与relate之间的区别在于脱离对向是谁,,relative的脱离对象是自身在标准流的位置,而absolute的脱离对象是其最近的定位祖先元素

图解:

例如下图,我们利用absolve将黑框向下移动到绿色部分处,那么移动后其所占据的空间、显示时显示的是绿色部分。

举例:
fixed(固定定位):
解释:

fixed和absolute十分类似,,两者的不同点在于偏移对象和定位对象。

(1)偏移对象:fixed相对于窗口,而absolute是心昂对于定位祖先元素

(2)定位对象:fixed的定位祖先只能是窗口,而absolute可以是相对定位的元素

举例:
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
   <style>
body {
                border: 1px solid black;
                padding: 12px;
                height: 1000px;
            }

            .c {
                position: fixed;
                width: 100px;
                height: 100px;
                background-color: #f00;
                top: 50%;
                left: 50%;
                transform: translate(-50%, -50%);
            }
   </style>
</head>
<body>
   <div class="c">div1</div>
   <div style="background-color: aqua;">div2</div>
</body>
</html>
sticky(粘性定位):
解释:

sticky像是fixed和relative的结合体,如果不给其设置top,left,right,bottom具体值,则效果与static一致。当在top、right、bottom、left四个属性中至少设置一个具体值时,元素具备两种状态 【类似relative(相对定位状态)和类似fixed(固定定位状态)】

举例:

以top:10px为例 :当元素相对于窗口顶部的距离大于10px时,元素处于类似relative,一旦元素相对于窗口顶部的距离小于或等于10px时,元素立马切换到fixed。

<!DOCTYPE html>
<html lang="en">

<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
   <style>
      body {
         border: 1px solid black;
         padding: 32px;
         margin: 32px;
         height: 1000px;
      }

      div {
         width: 100px;
         height: 100px;
         position: relative;
      }

      #div1 {
         background-color: red;
      }

      #div2 {
         background-color: black;
         position: sticky;
         top: 100px;
         left: 100px;
         padding: 0;
         margin: 0;
      }

      #div3 {
         background-color: gray;
      }
   </style>
</head>

<body>
   <div id="div1"></div>
   <div id="div2"></div>
   <div id="div3"></div>
</body>

</html>

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

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

相关文章

mysql UNION 联合查询

mysql UNION 联合查询 业务需要拉数据&#xff0c;这里需要对查询不同格式的数据进行组装&#xff0c;此处采用联合查询 注意1&#xff1a;null as 设备关爱 &#xff0c;结果为null&#xff0c;表头为设备关爱 注意2&#xff1a; UNION 或者 UNION ALL 联合查询自行选用 注意3…

OpenTK:安装和说明

OpenTK介绍 OpenTK是一个开源、跨平台的游戏开发库&#xff0c;由MonoGame团队创建。它为C#开发者提供了一个简单易用的接口&#xff0c;以便使用OpenGL、OpenAL和OpenCL进行3D渲染、音频处理和并行计算。OpenTK的目标是提供一个一致且高效的框架&#xff0c;让开发者能够专注于…

经典文献阅读之--SurroundOcc(自动驾驶的环视三维占据栅格预测)

0. 简介 环视BEV已经是很多场景中需要的功能&#xff0c;也是视觉代替激光雷达的有效解决方案&#xff0c;而《SurroundOcc: Multi-camera 3D Occupancy Prediction for Autonomous Driving》一吻则代表了这个领域的SOTA算法&#xff0c;文中通过多帧点云构建了稠密占据栅格数据…

windows下安装onlyoffice

文章目录 1、 安装ErLang2、 安装rabbitmq3、 安装postgresql4、 安装onlyoffice(社区版) 1、 安装ErLang 下载地址&#xff1a;https://erlang.org/download/otp_win64_24.2.exe opt_wind64_24.2.exe 直接运行&#xff0c;一步一步安装 2、 安装rabbitmq 下载地址&#xf…

若依:Linux Centos 7.9 安装部署RuoYi前后端集成版

目录 1.虚拟机操作系统版本 2.删除旧的jdk 3.下载JDK 17 &#xff1a; 4.下载 mvn 3.9.6&#xff1a; 5.下载mysql:5.7.44版本 6.git下载若依&#xff1a; 7.修改数据库连接&#xff1a; 8.mvn 清理和打包 9.启动若依&#xff1a; 1.虚拟机操作系统版本 2.删除旧的jd…

Qt QThreadPool线程池

1.简介 QThreadPool类管理一个QThread集合。 QThreadPool管理和重新设计单个QThread对象&#xff0c;以帮助降低使用线程的程序中的线程创建成本。每个Qt应用程序都有一个全局QThreadPool对象&#xff0c;可以通过调用globalInstance来访问该对象。 要使用其中一个QThreadPool…

XY_RE复现(四)舔狗四部曲

一&#xff0c;我的白月光 BOOK框还叉不掉&#xff0c;主函数很长 int __cdecl main(int argc, const char **argv, const char **envp) {__m128 si128; // xmm6__int128 *v4; // raxint v5; // r13dunsigned int v6; // ecx__m128 v7; // xmm0_DWORD *v8; // raxHMODULE Modu…

ROS 2边学边练(37)-- 使用时间参数(C++)

前言 在前几篇内容中&#xff0c;我们已经了解过了tf2广播、tf2监听&#xff0c;并且还了解了如何添加一个坐标系到tf2树图中&#xff0c;以及如何查看坐标系间的转换情况。实际上&#xff0c;是通过lookupTransform函数来查找的&#xff0c;这个函数允许我们查找所有的转换数据…

数据结构中的栈(C语言版)

一.栈的概念 栈是一种常见的数据结构&#xff0c;它遵循后进先出的原则。栈可以看作是一种容器&#xff0c;其中的元素按照一种特定的顺序进行插入和删除操作。 压栈&#xff1a;栈的插入操作叫做进栈/压栈/入栈&#xff0c;入数据在栈顶。 出栈&#xff1a;栈的删除操作叫做…

品牌百度百科词条需要什么资料?

品牌百度百科词条是一个品牌的数字化名片&#xff0c;更是品牌历史、文化、实力的全面展现。 作为一个相当拿得出手的镀金名片&#xff0c;品牌百度百科词条创建需要什么资料&#xff0c;今天伯乐网络传媒就来给大家讲解一下。 一、品牌基本信息&#xff1a;品牌身份的明确 品…

神之浩劫2下载教程 MOBA新游神之浩劫2在哪下载/怎么下载

《神之浩劫2Smite 2》重新定义了MOBA游戏的征服模式&#xff0c;为玩家带来更多的互动和进展。最近的开发者深度挖掘展示了游戏地图的全新设计&#xff0c;既简化了基本操作&#xff0c;又丰富了游戏选择。游戏中的敌人也有了新的进展方式。例如&#xff0c;击败火巨人和金之怒…

兄弟们,哪一家做智慧校园的公司比较靠谱?

开发技术参数 1、使用springboot框架Javavue2 2、数据库MySQL5.7 3、移动端小程序使用小程序原生语言开发 4、电子班牌固件安卓7.1&#xff1b;使用Java Android原生 5、elmentui &#xff0c;Quartz&#xff0c;jpa&#xff0c;jwt 6、SaaS云平台&#xff0c;私有云部署…

社区新零售:重构邻里生活圈,赋能美好未来

新时代的邻里脉动 在城市的肌理中&#xff0c;社区作为生活的基本单元&#xff0c;正经历一场由新零售引领的深刻变革。社区新零售&#xff0c;以其独特的商业模式、创新的技术手段和以人为本的服务理念&#xff0c;重新定义了社区商业的边界&#xff0c;重构了邻里生活的形态…

hive-row_number() 和 rank() 和 dense_rank()

row_number() 是无脑排序 rank() 是相同的值排名相同&#xff0c;相同值之后的排名会继续加&#xff0c;是我们正常认知的排名&#xff0c;比如学生成绩。 dense_rank()也是相同的值排名相同&#xff0c;接下来的排名不会加。不会占据排名的坑位。

【全开源】Java上门老人护理老人上门服务类型系统小程序APP源码

功能&#xff1a; 服务分类与选择&#xff1a;系统提供详细的老人护理服务分类&#xff0c;包括日常照护、康复训练、医疗护理等&#xff0c;用户可以根据老人的需求选择合适的服务项目。预约与订单管理&#xff1a;用户可以通过系统预约护理服务&#xff0c;并查看订单详情&a…

2024年618哪些数码家电值得入手?热门家电好物抢先看!

618购物狂欢节即将来临&#xff0c;这是一年一度的大促销活动&#xff0c;家电和数码产品在这个时间段内通常都会有优惠和折扣。但随着产品的多样化&#xff0c;很多时候一款产品就有多款品牌&#xff0c;在这不同品牌又各自擅长不同的东西&#xff0c;看着眼花缭乱。今天我就给…

有没有一种可能性,你不投递简历,让HR主动联系你

你是否觉得自己得主动给某个公司投递了简历,他们才会联系你,亦或者是自己得主动在招聘APP上联系那个BOSS,他才会反过来跟你说话,又或者是你千方百计的跟他打招呼了,还是没有回应,这一节有可能让你明白,有时候是可以,你不主动,他也会主动联系你的。 目录 1 简历是如何…

IDEA 编码规约扫描 Code inspection did not find anything to report.

IDEA安装了Alibaba Java Coding Guidelines插件&#xff0c;却看不到规约检查结果。手动进行编码规约扫描&#xff0c;弹窗提示“Code inspection did not find anything to report.”&#xff1a; 这种情况是因为代码文件所在的目录被标记成了测试文件&#xff08;Test Source…

EOCR-SS-05W电子式过电流继电器 0.5-6A 施耐德韩国三和

三和EOCR株式会社是韩国的电动机保护器生产企业&#xff0c;公司由金仁锡博士&#xff08;施耐德电气集团韩国执行官&#xff09;于1981年建立。 2001年&#xff0c;为了把企业发展成性的、战略性企业&#xff0c;随后加入了法国施耐德电气集团公司。 EOCR主要产品有电子式电…

C++复盘(一)

文章目录 常量标识符命名规则数据类型sizeof关键字浮点数字符型转义字符字符串型布尔类型bool 比较运算符switch-case语句rand()随机数种子srand() goto语句一维数组函数函数的声明函数的分文件编写 指针指针所占内存空间空指针野指针const修饰指针1、常量指针2、指针常量3、co…