zoukankan      html  css  js  c++  java
  • 重新认识布局:你真的懂flex吗

    本文首发于知乎:https://www.zhihu.com/people/xiao-chong-10-60

    1.flex布局,里面的flex项目会脱标吗?
    flex布局经常被拿来和浮动比较。但这里要明确:2者都能使得盒子横向排列之外,他们之间几无关联。
    浮动的元素会脱标,父元素要有高度,我们得清除浮动。flex布局并不会脱标。这个所有的资料里并没仔细对比,但又很重要。
    比如:做一个九宫格,同样的结构,浮动和flex布局的写法不一样,浮动是脱标的,左右,上下的边框加粗的问题,可以用margin负值搞定。看下面的例子,怎么解决边框加粗的问题?水平方向上:margin-left:-1px;竖直方向上:margin-top:-1px;

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
    	<meta charset="UTF-8">
    	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>Document</title>
    	<style>
    		/* 任务:做一个九宫格,3*3的样式,每个格子大小为60px*60px */
    		* {
    			padding: 0;
    			margin: 0;
    			box-sizing: border-box;
    		}
    
    		li {
    			list-style: none;
    		}
    
    		ul {
    			 180px;
    			height: 180px;
    			margin: 10px auto;
    		}
    
    		ul li {
    			float: left;
    			 60px;
    			height: 60px;
    			background-color: pink;
    			text-align: center;
    			line-height: 60px;
    			border: 1px solid #000;
    			margin-left: -1px;
    			margin-top: -1px;
    		}
    	</style>
    </head>
    
    <body>
    	<ul>
    		<li>1</li>
    		<li>2</li>
    		<li>3</li>
    		<li>4</li>
    		<li>5</li>
    		<li>6</li>
    		<li>7</li>
    		<li>8</li>
    		<li>9</li>
    	</ul>
    </body>
    
    </html>
    

      


    假设我们用flex做呢,边框加粗的问题还能用浮动一样的做法吗?答案是不行。浮动是脱标的,flex并不是,浏览器绘制盒子的过程有区别。水平方向上的边框加粗用margin-left:-1px可以解决,竖直方向上用margin-top:-1px:不行。
    怎么办呢,让第二行的上下边框都去掉。

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
    	<meta charset="UTF-8">
    	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>Document</title>
    	<style>
    		/* 任务:做一个九宫格,3*3的样式,每个格子大小为60px*60px */
    		* {
    			padding: 0;
    			margin: 0;
    			box-sizing: border-box;
    		}
    
    		li {
    			list-style: none;
    		}
    
    		ul {
    			display: flex;
    			flex-wrap: wrap;
    			 180px;
    			height: 180px;
    			margin: 10px auto;
    		}
    
    		ul li {
    			 60px;
    			height: 60px;
    			background-color: pink;
    			text-align: center;
    			line-height: 60px;
    			border: 1px solid #000;
    			margin-left: -1px;
    		}
    
    		.second-row {
    			border-top: 0;
    			border-bottom: 0;
    		}
    	</style>
    </head>
    
    <body>
    	<ul>
    		<li>1</li>
    		<li>2</li>
    		<li>3</li>
    		<li class="second-row">4</li>
    		<li class="second-row">5</li>
    		<li class="second-row">6</li>
    		<li class="third-row">7</li>
    		<li class="third-row">8</li>
    		<li class="third-row">9</li>
    	</ul>
    </body>
    
    </html>
    

      


    2.flex布局,剩余的空间会占满吗?
    并不会,剩余的空间分配,主轴上,由子项目的flex属性指定。侧轴会占满父盒子。请看下面的例子:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
    	<meta charset="UTF-8">
    	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>Document</title>
    	<style>
    		.box {
    			display: flex;
    			 1000px;
    			height: 200px;
    			background-color: pink;
    		}
    
    		.box .left {
    			 200px;
    			height: 100px;
    			background-color: purple;
    		}
    
    		.box .right {
    			background-color: skyblue;
    		}
    	</style>
    </head>
    
    <body>
    	<div class="box">
    		<div class="left">我设置了宽高</div>
    		<div class="right">我宽高都没设置</div>
    	</div>
    </body>
    
    </html>
    

      

  • 相关阅读:
    1.Python进阶 词典dict
    10.Python基础 反过头来看看
    test
    地图添加标记物 并添加点击弹出框
    百度地图里面添加覆盖物的事件显示最后一个?
    css3之animation制作闪烁文字效果 转
    ajax beforeSend中无效果
    jquery 中 $('div','li')是什么意思?
    SQL 单引号转义
    jQuery 遍历
  • 原文地址:https://www.cnblogs.com/xiaochongchong/p/14930886.html
Copyright © 2011-2022 走看看