浮动布局
float:left/right
浮动布局会使浮动标签脱离文档流
- 宽度高度默认由内容决定
- 原先所在位置就会被其他块元素抢占
- 浮动元素在一行中依次排列,当一行无法容纳的时候会自动换行
应用
- 全部浮动(超过两列)
1 2 3 4 5 6 7 8 9 10 11
| ul>li{ float:left; width:计算合适的宽度; }
取消浮动(一般加在父元素上) ul::after{ display:block; //设置为块元素 content:""; //将内容设置为空值 clear:both; //清除周边元素 }
|
- 左侧浮动,右侧不浮动(两列)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| .content>.left{ float:left; width:220px; }
将另一个元素向右移230px .content>.right{ margin-left:230px; }
<div class="content"> <div class="left"></div> <div class="right"></div> </div>
|
对于导航类的布局一般浮动li
该布局较难,多试验,多用就知道该如何使用
定位布局
作用
当一个元素悬挂在其他元素之上,优先考虑定位布局
eg: 模态框、下拉菜单、二级菜单、固定宣传栏、网页聊天页面
用法
position:static/relative/absolute/fixed
static: 默认布局,默认文档流中,非定位元素
relative: 定位元素(相对定位)
- 没有脱离文档流
- 参照点为当前元素原本位置
absolute: 定位元素(绝对定位)
- 脱离了文档流
- 参照距离当前元素最近的父定位元素,如果所有的父元素都没有定位元素,参照浏览器视口
fixed: 定位元素(固定定位)
- 脱离了文档流
- 参照浏览器视口
sticky: 定位元素(粘滞定位)
- 不脱离文档流
- relative 和 fixed 的结合
特点
- 可以使用描述当前元素位置的属性: top、right、bottom、left
- 可以使用z-index(向上浮动多少)
- 参照点(参照某个元素使用absolute、fixed、sticky)
- 是否脱离文档流
伸缩盒布局
作用
使得子元素在父元素中分列显示,与float的作用类似。一般用于响应式布局(手机app中)
用法
- 父元素在主轴上一定要有一个固定的宽/高
- 子元素在交叉轴上默认宽/高占满父元素
1 2 3 4 5 6 7 8 9
| <ul> <li></li> <li></li> <li></li> </ul>
ul{ display:flex; }
|
ul伸缩盒
1.设置父元素为伸缩盒(display: flex)
2.主轴(flex-direction)
- 主轴:默认情况下为x轴
- 交叉轴默认情况下为y轴
- 元素沿着伸缩盒的主轴排列的
3.伸缩盒自动换行(flex-wrap)
- nowrap: 默认值,不换行
- wrap: 换行
li伸缩盒的元素
- 基础值: flex-basis(主轴上元素的基础值)
- 对盈余空间的分配: flex-grow
- 对亏损空间的贡献: flex-shrink
速写: flex: grow shrink basis;
例子
布局代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet" href="./test2.css"> </head> <body> <div class="container"> <div class="wrapper"> <div class="nav"> <ul class="ul"> <li> <a href="#">美食</a> <div>美食子元素</div> </li> <li> <a href="#">旅行</a> <div>旅行子元素</div> </li> <li> <a href="#">阅读</a> <div>阅读子元素</div> </li> <li> <a href="#">服饰</a> <div>服饰子元素</div> </li> <li> <a href="#">装饰</a> <div>装饰子元素</div> </li> <li> <a href="#">数码</a> <div>数码子元素</div> </li> <li> <a href="#">家电</a> <div>家电子元素</div> </li> </ul> </div> </div> </div>
<div class="left"> <ul> <li> <a href="#">数码</a> <div>数码子元素</div> </li>
<li> <a href="#">旅行</a> <div>旅行子元素</div> </li>
<li> <a href="#">阅读</a> <div>阅读子元素</div> </li>
<li> <a href="#">装饰</a> <div>装饰子元素</div> </li>
<li> <a href="#">家电</a> <div>家电子元素</div> </li> </ul> </div>
<div class="right"> <ul> <li> <a href="#">数码</a> <div>数码子元素</div> </li>
<li> <a href="#">旅行</a> <div>旅行子元素</div> </li>
<li> <a href="#">阅读</a> <div>阅读子元素</div> </li>
<li> <a href="#">装饰</a> <div>装饰子元素</div> </li>
<li> <a href="#">家电</a> <div>家电子元素</div> </li> </ul> </div>
|
样式代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
*{ padding: 0; margin: 0; list-style: none; }
body{ margin: 0; padding: 0; }
ul{ list-style: none; margin: 0; padding: 0; }
.wrapper{ margin: 0 auto; width: 1200px; }
.container > .wrapper > .nav > ul a{ text-decoration-line: none; color: #333; }
.container{ background-color: lightblue; line-height: 3em; }
.container .nav > ul{ display: flex; position: relative; }
.container .nav > ul > li{ flex-grow: 1; text-align: center; }
.container .ul{ position: relative; }
.container .ul > li > div{ position: absolute; left: 0; top: 100%; width:100%; background-color: teal; height: 200px; line-height: 200px; display: none; }
.container .ul > li:hover > div{ display: block; }
.left > ul > li a{ text-decoration-line: none; color: #333; }
.left{ position: fixed; left: 0; top: 200px; width: 100px; background-color: pink; }
.left > ul > li{ height: 100px; line-height: 100px; border-bottom: 1px solid #fff; position: relative; text-align: center; }
.left > ul > li > div{ display: block; position: absolute; left: 100%; top: 0; width: 300px; background-color: teal; height: 300px; display: none; }
.left > ul > li:hover > div{ display: block; }
.right > ul > li a{ text-decoration-line: none; color: #333; }
.right{ position: sticky; float: right; width: 100px; background-color: pink; top: 200px; }
.right > ul > li{ text-align: center; height: 100px; line-height: 100px; border-bottom: 1px solid #fff; position: relative; }
.right > ul > li > div{ position: absolute; right: 100%; background-color: teal; width: 200px; top: 0; display: none; }
.right > ul > li:hover > div{ display: block; }
|
成型模样
