常见的布局方式

文章目录


弹性布局(rem/em)
栅格化布局
百分比布局
浮动布局

  1. flex布局 / 弹性布局
原理:通过给父元素添加flex,来控制子盒子的位置和排列方式。弹性布局,任何一个容器都可以指定为flex布局,为盒模型提供最大的灵活性,父元素设为flex后,子元素的float、clear、vertical-align都会失效。

父元素可以设置的元素:(主轴为x轴,侧轴就是y轴;主轴为y轴,侧轴就是x轴)
		flex-direction:设置主轴方向(主轴为x轴时:【row:从左到右,默认;row-reverse:从右到左;】主轴为y轴时:【column:从上到下;column-reverse:从下到上】)
		justify-content:设置    主轴   上的子元素的排列方式(flex-start:从头开始,默认;flex-end:从尾部开始;center:主轴居中对齐;space-around:平分剩余空间,每个盒子的margin-left和margin-right想等,相邻边取加和,不取消;space-between:先两边贴边,再平分剩下的空间(重要!!!))
		flex-wrap:设置子元素是否换行(nowrap:默认不换行,硬塞;wrap:换行)
		align-content:设置     侧轴    上的子元素的排列方式(多行,出现换行的时候用到;flex-start:默认值,在头部开始排列;flex-end:从侧轴的尾部开始排列;center:在侧轴中间显示;space-around:子项在侧轴平分剩余空间;space-between:子项在侧轴先分布在两头,再平分剩余空间;stretch:子项元素高度平分父元素高度)
		align-items:设置侧轴上的子元素排列方式(单 行,所有元素只能在一行中。flex-start:从上到下;flex-end:从下到上;center:挤在一起居中;stretch:拉伸,侧轴方向拉长)
		flex-flow:复合属性,相当于设置了flex-direction和flex-wrap(row wrap ;将值列在这)

子项属性:
		flex:子项目占的份数,1:占据父亲所有空间;父元素中相同元素占据整个空间并且平分空间,父元素 子元素{flex:1;};2:占均分之后的两份空间
		flex-grow:放大(0:不放大,1:等比例放大)
		flex-shrink:缩小(0:不缩小,1:等比例缩小)
		flex-basis:
		align-self:控制某一个子项在侧轴的排列方式
		order:定义子项排列顺序(前后顺序),数值小排列靠前,-1为0前面,默认为0

//子元素在父元素中均匀分布,
父元素:display:flex;(容器)
子元素:(flex项目)
	//占据父元素所有宽度
	flex:1;
	//占据父元素指定宽度
	width:npx;
  1. 栅格布局 grid click
flex布局是轴线布局,只能指定项目针对轴线的位置,一维布局;grid布局划分为行和列,产生单元格,只想项目在单元格中,是二位布局。
采用网格布局元素为容器,内部直接子元素称为项目。float、display:inline-block;display:table-cell、certical-align失效
网页布局使用栅格布局,自适应性特别好
UI	属性:列宽、间距、左右大边距
断点:经过断点增加或减少列、增加或减小列宽(列宽有的是固定的,有的是可以被拉伸的)
容器属性:grid-template-columns:定义每一列的宽,可以决定每行几个元素
						100px 100px 300px  
						或  33.33% 33.33% 33.33% 
						或 repeat(3,33.33%)  <重复次数,重复值>
						或repeat(2,100px 200px);<重复次数,重复模式>模式多于一个不能加逗号
						或auto-fill:自动填充,使用:repeat(auto-fill,100px)
						或1fr 2fr 1fr;fr:fraction(部分、片段)占一个栅格 ,若左边固定宽度:100px 1fr 2fr;
						或1fr 2rf minmax(100px 200px);minmax(最小值,最大值)产生一个长度范围
						或auto,浏览器决定长度,好用!
						网格线可以起名称,在大小前面加[name]
				gitd-template-rows:定义每一列的高
				
				row-grp(grid-row-gap):行间距
				column-gap(grid-column-gap):列间距
				grid-gap:10px 20px;(行间距 列间距)
				grid-template-areas:区域,定义多个栅格为一个区域
						‘header header  header ’
						‘left content right’
						‘footer footer footer’
						名字不同区域不同,若第一行为‘a a a’则表示一个区域;用不到的区域用点: . 
				grid-auto-flow:row/column:排序,先按行或列
				
				justify-items:单元格内容的水平位置 start | end | center | stretch(默认值)
				align-items:设置单元格内容的垂直位置 start | end | center | stretch(默认值)
				place-items:上面两属性的简写
				
				justify-content:整个内容区域在容器中的水平位置  start | end | center | stretch(默认值)|space-between | space-around | space-evenly
				align-content
				place-content:简写
	
				定义列宽和行高,超出指定位置
				grid-auto-columns: 超出网格之后的操作,同grid-template-columns
				grid-auto-rows:

				grid-template:简写
				grid-template-columns、grid-template-rows、grid-template-areas
				grid:简写
				grid-template-columns、grid-template-rows、grid-template-areas
				grid-auto-columns、grid-auto-rows、grid-auto-flow

项目属性: 
				指定项目位置:根据网格线指定,可以使用数字、网格名称、span定义跨过多少网格(span 2 跨两列)
				grid-column-start:列开始,左边框所在的垂直网格线 ;1 2代表同一块,3 4 代表同一块,2*快数 为最大边数
				grid-column-end:列结束,右边框所在的垂直网格线
				grid-row-start:上边框所在的垂直网格线
				grid-row-end:下边框所在的网格线位置
				二级属性:简写
				gird-column:1/2; 列网格开始/结束(gird-column-start + gird-column-end)
				grid-row:2/3; 行网格开始和结束(gird-row-start + gird-row-end)
				gird-area:指定项目放在哪一个区域(gird-row-start + gird-column-start + gird-row-end + gird-column-end)
				
				项目对齐方式
				justify-self:单元格水平位置,当前项目,单个项目 start | end | center | stretch(默认值)
				align-self:单元格垂直位置,start | end | center | stretch(默认值)
				place-self,简写,先水平,再垂直		

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>grid</title>
    <style type="text/css">
        .container{
            width:90%;
            height:500px;
            display: grid;
            /* display: -ms-inline-grid; 针对行内元素*/
            background-color:rebeccapurple;
            /* grid-template-columns: repeat(2,200px 100px); */
            /* grid-template-columns: 1fr 2fr auto; */
            /* grid-template-columns: repeat(3,33.3%); */
            grid-template-columns: 150px 1fr 2fr;
            grid-template-rows: 20% 50%;
            grid-gap:10px 10px;
            grid-template-areas: 'a b c'
                                'd e f';
            grid-auto-flow: column;
            
        }
        .module{
            /* width:150px;
            height:150px; */
            /* line-height: 100px; */
            font-size: 20px;
            text-align: center;

        }
        .module1{
            background-color: gold;
            grid-column-start: 1;
            grid-column-end: 4;
        }
        .module2{
            background-color:green;
            grid-row-start: 2;
            grid-row-end: 4;
        }
        .module3{
            background-color:indigo;
        }
        .module4{
            background-color:lightblue;
        }
        .module5{
            background-color:lightsalmon;
        }
        .module6{
            background-color:mediumpurple;
        }
        

    </style>
  </head>
  <body>
    <div class = 'container'>
        <div class='module module1'>1</div>
        <div class=' module module2'>2</div>
        <div class='module module3'>3</div>
        <div class='module module4'>4</div>
        <div class='module module5'>5</div>
        <div class='module module6'>6</div>
    </div>
    
  </body>
</html>

流式布局:默认的块会充满整个页面,前面的块在前面,后面的块在后面,即使把块的宽度调整到只有页面的一半,甚至1/3,即使页面这一行有足够的空间容纳两个快,也会依据这个次序向下排列。

  1. 百分比布局 / 流式布局
    盒子宽度设置为百分数来根据屏幕的宽都进行伸缩,不固定像素的限制,内容向两侧填充
    设置最大宽度:max-width,超出该大小不会再变大
    最小宽度:min-width,小于该宽度不会再变小
  2. 浮动布局
    当元素所在行内可以容纳另外的元素时,下一个元素会浮动上来
    对自身的影响:
    float可以形成快,可以让行内元素拥有宽和高,因为块级元素有行和高
    浮动元素尽量考上
    尽量靠左,或右,如果哪一行满足不了浮动元素的宽度要求,元素会下掉
    对兄弟元素的影响:
    不影响其他块级元素的位置,块级元素该占多少还是占多少
    影响其他块级元素的文本
    上面贴非float元素
    旁边贴float元素或边框(紧跟前一个float,或右float贴右边框)
    对父级元素的影响:
    从布局上消失
    高度坍塌
    在这里插入图片描述添加三个float
    在这里插入图片描述
<style type="text/css">
        .box{
            width: 400px;
            height: 300px;
            background-color: royalblue;
        }
        .app{
            width: 100px;
            height: 100px;
        }
        .app1{
            /* float: left; */     /!!!!!!
            background-color: sandybrown;
        }
        .app2{
            /* float: left; */    /!!!!!!
            background-color:seagreen;
        }
        .app3{
            /* float: left; */    /!!!!!!
            background-color:rgb(69, 223, 107);
        }
    </style>

  <body>
    <div class = 'box'>
      
    <div class="app app1">1</div>
    <div class="app app2">2</div>
    <div class="app app3">3</div>
    </div>
    
  </body>
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值