• 前端(六)之盒模型显隐、定位与流式布局思想


    前端之盒模型显隐、定位与流式布局思想

    盒模型的显隐

    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<title>盒子的显隐</title>
    	<style type="text/css">
    		.box, .wrap {
    			 200px;
    			height: 200px;
    			background: red;
    		}
    		.wrap {
    			background: orange;
    		}
    		
    		/*display: none; 通过控制盒子的显示方式来隐藏盒子*/
    		/*该隐藏方式在页面中不占位*/
    		.box {
    			display: none;
    		}
    		/*opacity: 0; 通过控制盒子的透明度来隐藏盒子*/
    		/*该隐藏方式在页面中占位*/
    		.box {
    			/*opacity: 0*/
    		}
    		/*注: 一般显隐操作的盒子都是采用定位布局*/
    		
    		/*悬浮父级显示子级*/
    		body:hover .box {
    			display: block;
    		}
    
    
    		/*将盒子藏到屏幕外: 不能通过盒模型布局, 也不建议通过浮动布局, 可以采用定位布局*/
    		.box {
    			/*margin-top: -208px*/
    		}
    
    	</style>
    </head>
    <body>
    	<div class="box"></div>
    	<div class="wrap"></div>
    </body>
    </html>
    

    定位

    相对定位

    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<title>相对定位布局</title>
    	<style type="text/css">
    		/*定位布局的导入*/
    		/*需求: */
    		/*1.子级在父级的右下角显示*/
    		/*2.子级完成布局后,父级做content后,子级不需要重新布局*/
    		.sup {
    			 300px;
    			height: 300px;
    			background: pink;
    			border: 10px solid black;
    		}
    		.sub {
    			 50px;
    			height: 50px;
    			background: red;
    			margin-left: auto;
    			margin-top: 150px;
    		}
    		/*能不能有一种定位, 让盒子可以通过上下左右四个方位均操作自身布局 => 定位布局*/
    		/*什么是定位布局: 可以通过上下左右四个方位完成自身布局的布局方式*/
    
    		.sup {
    			display: none;
    		}
    	</style>
    
    	<style type="text/css">
    		/*相对定位布局*/
    		.box {
    			 200px;
    			height: 200px;
    			background: pink;
    		}
    		.b2 { background: orange }
    		.b1 {
    			/*1.设置定位属性,就会打开定位方位*/
    			position: relative;
    			/*2.通过定位方位完成布局*/
    			top: 300px;
    			left: 300px;
    			/*bottom: 100px;*/
    			/*right: 100px;*/
    			/*margin-top: 200px;*/
    			/*结论*/
    			/*1.左右取左,上下取上(eg:left与right共存是,left生效)*/
    			/*2.left=-right, top=-bottom*/
    			/*3.参考系: 自身原有位置(不是某一个点,eg: right参考的就是原有位置的右边界)*/
    			/*4.自身布局后不会影响自身原有位置*/
    			/*5.不脱离文档流(脱离文档流: 不再撑开父级高度)*/
    		}
    
    	</style>
    </head>
    <body>
    
    	<div class="box b1">1</div>
    	<div class="box b2"></div>
    
    
    
    	<div class="sup">
    		<div class="sub"></div>
    	</div>
    
    </body>
    </html>
    

    绝对定位

    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<title>绝对定位布局</title>
    	<style type="text/css">
    
    		.box {
    			 200px;
    			height: 300px;
    			background: orange;
    		}
    
    		.sup {
    			 200px;
    			height: 200px;
    			background: pink;
    			/*position: absolute;*/
    		}
    		
    		.sub {
    			 50px;
    			height: 50px;
    			background: red;
    			/*1.开的定位*/
    			position: absolute;
    			/*2.采用定位方位完成布局*/
    			right: 0;
    			bottom: 0;
    		}
    		body {
    			position: relative;
    		}
    		/*注: 一般父级采用的是相对定位布局, 一般情况下,父级不需要脱离文档流*/
    		/*如果父级需要脱离文档流,用绝对定位父级完成布局,完全可以,不会影响子级相对于自身的布局,但是自身又要需要一个在文档流中的(不脱离文档流中的)定位参考父级 => 父相子绝*/
    		/*相对定位的应用场景大部分都是辅助于子级的绝对定位*/
    		.sup {
    			position: relative;
    		}
    		.sub {
    			/*left: 0;*/
    			right: 0;
    		}
    	</style>
    </head>
    <body>
    	<!-- 绝对定位布局一定存在父子关系 -->
    	<!-- 导入定位布局时,父级设置宽高没?(设置了) 子级呢?(也设置了) => 父级的高度不再依赖于子级 => 子级脱离文档流 -->
    
    	<!-- 参考系: 最近的定位父级 -->
    	<div class="sup">
    		<div class="sub"></div>
    	</div>
    	<!-- <div class="box"></div> -->
    	<!-- 
    	1.top|bottom|left|right都可以完成自身布局, 上下取上,左右取左
    	2.父级必须自己设置宽高
    	3.完全离文档流
    	 -->
    </body>
    </html>
    

    固定定位

    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<title>固定定位</title>
    	<style type="text/css">
    		/*参考系: 页面窗口*/
    		/*1.top|bottom|left|right都可以完成自身布局, 上下取上,左右取左*/
    		/*2.相对于页面窗口是静止的*/
    		/*3.完全脱离文档流*/
    		.box {
    			 200px;
    			height: 300px;
    			background: orange;
    		}
    		.box {
    			position: fixed;
    			top: 200px;
    			right: 50px;
    		}
    	</style>
    </head>
    <body>
    	<div class="box"></div>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    	<br>
    </body>
    </html>
    

    z-index 属性

    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<title>z-index</title>
    	<style type="text/css">
    		.wrap {
    			 200px;
    			height: 200px;
    			background: pink;
    			/*父级做相对定位处理,并不是自己需要用定位完成布局,最主要的原因是辅助于子级完成绝对定位布局*/
    			position: relative;
    		}
    		.box {
    			 75px;
    			height: 75px;
    			font: normal 30px/75px "STSong";
    			text-align: center;
    			background: cyan;
    			/*绝对定位需要大家脱离文档流,相互不会影响布局,每个都是独立相对于父级进行布局的个体*/
    			position: absolute;
    			/*top: 0;*/
    			/*bottom: 0;*/
    			/*left: 0;*/
    		}
    		.b1 {
    			left: 0;
    			top: 0;	
    			background: red;
    		}
    		.b2 {
    			right: 0;
    			top: 0;
    			background: yellow;
    		}
    		.b3 {
    			/*虽然子级脱离了文档流,但是父子关系以及存在,子级获取100%,得到的还是父级对应的值*/
    			left: calc((100% - 75px) / 2);
    			top: calc((100% - 75px) / 2);;	
    			background: green;
    			/*z-index改变显示层级, 显示层级的值为正整数, 值越大,显示层级越高*/
    			z-index: 1;
    		}
    		.b4 {
    			left: 0;
    			bottom: 0;
    			background: blue;
    			/*z-index: 88889;*/
    		}
    		.b5 {
    			right: 0;
    			bottom: 0;	
    			background: white;
    		}
    	</style>
    </head>
    <body>
    	<div class="wrap">
    		<div class="box b1">1</div>
    		<div class="box b2">2</div>
    		<div class="box b3">3</div>
    		<div class="box b4">4</div>
    		<div class="box b5">5</div>
    	</div>`
    </body>
    </html>
    

    流式布局思想

    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<title>流式布局思想</title>
    	<style type="text/css">
    		html, body {
    			margin: 0;
    			 100%;
    			/*辅助body内部的子级有height流式布局的基础*/
    			height: 100%;
    		}
    		/*流式布局思想: 尽可能不去使用固定属性值*/
    		/*通过父级来获取相应的属性值*/
    		.b1 {
    			 100%;
    			height: 100%;
    			background: red;
    		}
    		.b2 {
    			/*view-width view-height*/
    			 80vw;
    			height: 80vh;
    			background: orange;
    			/*流式布局限制条件: 流式布局下宽度最大只能放大到800px,最小只能缩小到600px*/
    			max- 800px;
    			min- 600px;
    		}
    		
    		html {
    			font-size: 200px;
    		}
    		body {
    			font-size: 100px;
    		}
    		span {
    			/*设置自身字体时 em = ?px 父级字体的大小*/
    			font-size: 2em;
    
    			display: block;
    			/*宽高em在自身设置字体大小后,值又会更改为相应大小*/
    			/*eg: body: 100px => 设置自身字体时em=100px, */
    			/*自身设置字体大小为2em,自身字体大小为200px => width=2em的em=200px*/
    			/*结果自身宽度是400pk*/
    			
    			/*自身非设置字体时使用em单位,em值取自身字体大小*/
    			 2em;
    
    			/*rem = html字体的大小*/
    			height: 2rem;
    			background: red;
    		}
    	</style>
    	<style type="text/css">
    		.sup {
    			 200px;
    			height: 200px;
    			padding: 50px;
    			background: red;
    		}
    		.sub {
    			/*父级的content是提供给子级盒子利用的*/
    			margin: 0 5px;
    			border: 5px solid black;
    			padding: 5px;
    			/*auto <= 100%*/
    			 auto;
    			/* 100%;*/
    			height: 50px;
    			background: orange;
    		}
    	</style>
    </head>
    <body>
    	<!-- <div class="b1"></div> -->
    
    	<!-- <div class="b2"></div> -->
    
    	<!-- <span>好的</span> -->
    
    	<div class="sup">
    		<div class="sub"></div>
    	</div>
    </body>
    </html>
    

    hover 父子悬浮

    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<title></title>
    	<style type="text/css">
    		.sup {
    			 120px;
    			height: 40px;
    			background: pink;
    			position: relative;
    		}
    		.sub {
    			 120px;
    			height: 100px;
    			background: black;
    			position: absolute;
    			left: 0;
    			top: 40px;
    			display: none;
    		}
    		.sup:hover .sub {
    			display: block;
    		}
    	</style>
    </head>
    <body>
    	<div class="sup">
    		<div class="sub"></div>
    	</div>
    </body>
    </html>
    

    总结

    一.浮动布局的总结

    1.同一结构下, 如果采用浮动布局,所有的同级别兄弟标签都要采用浮动布局
    2.浮动布局的盒子宽度在没有设定时会自适应内容宽度
    

    二.盒子的显隐

    display: none;
    在页面中不占位, 采用定位布局后, 显示隐藏都不会影响其他标签布局, 不需要用动画处理时
    
    opacity: 0;
    在页面中占位, 采用定位布局后, 显示隐藏都不会影响其他标签布局, 需要采用动画处理时
    

    三.定位布局

    什么是定位布局: 可以通过上下左右四个方位完成自身布局的布局方式
    
    • 相对定位
    参考系: 自身原有位置
    position: relative;  => 打开了四个定位方位
    1.top|bottom|left|right都可以完成自身布局, 上下取上,左右取左
    2.left = -right | top = -bottom
    3.布局后不影响自身原有位置
    4.不脱离文档流
    
    • 绝对定位
    参考系: 最近的定位父级
    position: absolute;  => 打开了四个定位方位
    1.top|bottom|left|right都可以完成自身布局, 上下取上,左右取左
    2.父级必须自己设置宽高
    3.完全离文档流
    
    • 固定定位
    参考系: 页面窗口
    position: fixed;  => 打开了四个定位方位
    1.top|bottom|left|right都可以完成自身布局, 上下取上,左右取左
    2.相对于页面窗口是静止的
    3.完全脱离文档流
    
    • z-index
    修改显示层级(在发生重叠时使用), 值取正整数, 值不需要排序随意规定, 值大的显示层级高
    

    四.流式布局思想

    1. 百分比
    2. vw | vh => max-width(height) | min-width(height)
    3. em | rem
    
  • 相关阅读:
    qt调用simsimi api实现小黄鸡
    [机器学习系列] k-近邻算法(K–nearest neighbors)
    Ubuntu上安装flashplayer
    关于ubuntu下qt编译显示Cannot connect creator comm socket /tmp/qt_temp.xxx/stub-socket的解决办法
    Linux下添加源的几种方法
    Ubuntu字符界面输入密码始终提示错误 login incorrect 解决办法
    boost::algorithm(字符串算法库)
    boost::assign(标准容器填充库)
    boost::format(字符串格式化库)
    C/C++内存对齐 ZZ
  • 原文地址:https://www.cnblogs.com/zuanzuan/p/10104332.html
Copyright © 2020-2023  润新知