提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、盒子布局
盒子布局结构如图:
代码如下(示例):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>盒子布局</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
.box
{
width: 100px;
height: 100px;
border: 1px solid black;
background-color: red;
}
</style>
</head>
<body>
<div class="box">
这是一个div
</div>
</body>
</html>
结果:
通过上例简单了解盒子布局上图,你可以通过增改style里的设置改变形状。
二、css元素的分类
1.display 属性
在运用块级元素与内联元素之前要了解display属性
display 属性是用于控制布局的最重要的 CSS 属性
display 属性:
display 属性规定是否/如何显示元素。
每个 HTML 元素都有一个默认的 display 值,具体取决于它的元素类型。大多数元素的默认 display 值为 block 或 inline。
详细见网站:display属性
1.1 Display: none;
display: none; 通常与 JavaScript 一起使用,以隐藏和显示元素,而无需删除和重新创建它们。
默认情况下,<script>
元素使用 display: none;
。
1.2 覆盖默认的 Display 值
每个元素都有一个默认 display 值。但是,您可以覆盖它。
将行内元素更改为块元素,反之亦然,对于使页面以特定方式显示同时仍遵循 Web 标准很有用。
2.css元素中的块级元素与内联元素
块级元素(display:block)
div p hn 等 属于块级元素
可以设置宽和高,独占一行
块级元素的一些例子:
<div> <hn> <p> <form> <header> <footer> <section>
内联元素(display:inline)
设置宽和高的时候是不起作用的,不影响换行
span a
行内元素的一些例子:
<span> <a> <img>
代码如下(示例):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>块级元素,内联元素</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
.box
{
width: 100px;
height: 100px;
border: 1px solid black;
background-color: red;
/* display: inline; 转化为内联元素*/
}
.box1
{
width: 100px;
height: 100px;
border: 1px solid black;
background-color: green;
/* display: inline; 转化为内联元素*/
padding: 50px;
/* 以高宽100px形成的基础上,四周各加50px */
}
.box2
{
/* width: 0px;
height:0px;
宽高为0可以隐藏元素 */
/* display: none; 可以隐藏元素*/
width: 100px;
height: 100px;
border: 1px solid black;
background-color: blue;
/* display: inline; 转化为内联元素*/
}
a{
width: 100px;
height: 100px;
/* display: block; 转化为块级元素 */
}
</style>
</head>
<!-- 块级元素 独占一行 -->
<!-- 内联元素设置高宽无效 -->
<body>
<div class="box">
这是一个div
</div>
<div class="box1">
这是一个div
</div>
<div class="box2" >
这是一个div
</div>
<a href="#">第一个标签</a>
<a href="#">第一个标签</a>
<a href="#">第一个标签</a>
<!-- 这三个不独占一行,他们不会换行 -->
</body>
</html>
结果:
大家也通过改变代码padding可以体现盒子布局!
3.块级元素和内联元素之间相互转换
通过display的取值
注意:
display:none-------- 隐藏元素
隐藏元素也可以通过width:0 height:0
代码如下(示例):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>块级元素,内联元素</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
.box
{
width: 100px;
height: 100px;
border: 1px solid black;
background-color: red;
display: inline;
}
.box1
{
width: 100px;
height: 100px;
border: 1px solid black;
background-color: green;
display: inline;
}
.box2
{
width: 100px;
height: 100px;
border: 1px solid black;
background-color: blue;
display: inline;
}
a{
width: 100px;
height: 100px;
display: block;
}
</style>
</head>
<!-- 块级元素 独占一行 -->
<!-- 内联元素设置高宽无效 -->
<body>
<div class="box">
这是一个div
</div>
<div class="box1">
这是一个div
</div>
<div class="box2" >
这是一个div
</div>
<a href="#">第一个标签</a>
<a href="#">第一个标签</a>
<a href="#">第一个标签</a>
</body>
</html>
结果:
结果相比上一个程序:块级元素添加了display: inline;转换为内联元素
内联元素添加了display: block; 转化为块级元素
三.浮动布局-
3.1float属性
浮动布局通过flot进行设置
float: left;
float属性:
属性 | 作用 |
---|---|
none | 不浮动 |
left | 左浮动,会对后面的元素产生影响 |
right | 右浮动 |
代码如下(示例):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>浮动布局</title>
<style type="text/css">
.one
{
width: 100px;
height: 100px;
background-color: red;
float: left;
}
.two
{
width: 100px;
height: 100px;
background-color: green;
float: left;
}
.three
{
width: 100px;
height: 100px;
background-color: blue;
float: left;
}
}
</style>
</head>
<body>
<div class="one">
1
</div>
<div class="two">
2
</div>
<div class="three">
3
</div>
</body>
</html>
结果:
加float:left;之前:
加float:left;之后:
3.2 float浮动布局——布局错乱的现象
现象说明
代用上述3.1代码
在使用 float: left; 时
只是1左浮动会覆盖2导致布局错乱,进行选择下一个会是3.
可以理解为1 left 但是2上去了,那么1 就覆盖了2
如果全部左浮动就会排在一起 123
解决方案 使用clear属性
属性 | 作用 |
---|---|
none | 默认值,允许两边有浮动 |
left | 不允许左边有浮动(清除左浮动) |
right | 不允许右边有浮动 |
both | 不允许两边有浮动 |
代码如下(示例):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>浮动布局</title>
<style type="text/css">
.one
{
width: 100px;
height: 100px;
background-color: red;
float: left;
}
.two
{
width: 100px;
height: 100px;
background-color: green;
float: left;
}
.three
{
width: 100px;
height: 100px;
background-color: blue;
clear: left;
}
</style>
</head>
<body>
<div class="one">
1
</div>
<div class="two">
2
</div>
<div class="three">
3
</div>
</body>
</html>
结果:
加clear: left;之前
加clear: left;之后
四.定位布局
1.position 属性
position 属性规定应用于元素的定位方法的类型。
有五个不同的位置值:
static
relative
fixed
absolute
sticky
元素其实是使用 top、bottom、left 和 right 属性定位的。但是,除非首先设置了 position 属性,否则这些属性将不起作用。根据不同的 position 值,它们的工作方式也不同。
2.静态定位——static
HTML 元素默认情况下的定位方式为 static(静态)。
静态定位的元素不受 top、bottom、left 和 right 属性的影响。
position: static; 的元素不会以任何特殊方式定位;它始终根据页面的正常流进行定位:
代码如下(示例):
3.绝对定位——absolute
将对象从文档流分离出来,通过设置top、left、right、bottom这四个
方向的值进行定位(相较于父级的定位),如果没有这样的父级,默认的父级是bod
4.相对定位——relative
对象不从文档流里面分离,通过设置top、left、right、bottom这四个方向
的值进行定位(相较于自身的定位)
5.应用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>定位布局</title>
<!--
总要要点
属性:position
static :(默认)静态定位——根据每个元素的默认值
absolute :绝对定位 —— 元素相对于最近的定位祖先元素进行定位(而不是相对于视口定位,如 fixed)。
然而,如果绝对定位的元素没有祖先,它将使用文档主体(body),并随页面滚动一起移动。
relative:相对定位 -->
<style type="text/css">
.main
{
width: 600px;
height: 600px;
border:1px solid black;
margin: 200px;
/* position: relative; */
/* 相对定位,这样大边框换位置会跟大边框相对位置改变位置 */
}
.box
{
width: 100px;
height: 100px;
border:1px solid black;
background-color: red;
position: absolute;
/* 绝对定位 将对象从文档流分离出来,通过设置top、left、right、bottom这四个
方向的值进行定位(相较于父级的定位),如果没有这样的父级,默认的父级是body*/
top: 100px;
/* top: -50px;负值就往外顶 */
left: 100px;
}
.box1
{
width: 150px;
height: 150px;
border:1px solid black;
background-color: red;
position: absolute;
left: -20px;
}
.box2
{
width: 150px;
height: 150px;
border:1px solid black;
background-color: red;
}
.box3
{
width: 150px;
height: 150px;
border:1px solid black;
background-color: red;
position: relative;
left: 100px;
}
</style>
</head>
<body>
<div class="main">
<div class="box">
这是一个div
</div>
<div class="box1">
这是一个div 1
</div>
<div class="box2">
这是一个div 2
</div>
<div class="box3">
这是一个div 3
</div>
</div>
</body>
</html>
结果:
五.其他属性
5.1 溢出——overflow
属性 | 描述 |
---|---|
visible | 默认。溢出没有被剪裁。内容在元素框外渲染 |
hidden | 溢出被剪裁,其余内容将不可见 |
scroll | 溢出被剪裁,同时添加滚动条以查看其余内容 |
auto | 与 scroll 类似,但仅在必要时添加滚动条(总是显示滚动条) |
代码如下(示例):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>溢出</title>
<style type="text/css">
#box
{
width: 100px;
height: 100px;
border:1px solid black;
/* overflow: hidden;剪切多的 */
overflow: auto;
/* background: url(../image/1.jpg);这个地方给图片为图片背景,不会生成滚动条 */
}
</style>
</head>
<body>
<div id="box">
<img src="../image/1.jpg">
</div>
</body>
</html>
结果:
注意在style里设置图片的时候
background: url(…/image/1.jpg);这个地方给图片为图片背景,不会生成滚动条
5.2缩放—— zoom
对对象进行放大(数值大于1)缩小(数值小于1大于0)
zoom : number 百分比
代码如下(示例):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>zoom</title>
<style type="text/css">
#box
{
width: 100px;
height: 100px;
border:1px solid black;
}
img
{
zoom:2;
/* 放大倍数 */
}
</style>
</head>
<body>
<div id="box">
<img src="../image/1.jpg">
</div>
</body>
</html>
结果:
放大前:
放大后:
六.弹性盒子
1.整体介绍
通过dispaly ------- flex
属性 | 描述 |
---|---|
flex-direction | 指定了弹性盒子(弹性容器)中子元素的排列方式 |
flex-wrap | 指定了弹性盒子(弹性容器)中子元素的换行方式 |
flex-flow | flex-direction和flex-wrap的简写 |
justify-content | 修改了flex-wrap属性的行为,类似align-items,但不是设置子元素的对齐,而是设置行对齐 |
align-items | 设置了弹性盒子子元素在侧轴的(纵轴)的对齐方式 |
align-content | 设置了弹性盒子子元素在主轴的(横轴)的对齐方式 |
2.flex-direction——子元素的排列方式
属性 | 效果 |
---|---|
flex-direction:column | 从上到下 |
flex-direction:column-reverse; | 从下到上 |
row | 默认:从左往右 |
row-reverse | 从右往左 |
代码如下(示例):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>弹性盒子</title>
<!-- 通过display属性取值取flex -->
<!-- flex-direction:从上到下排列 -->
<!-- 弹性布局中必须有一个 display 属性设置为 flex 的父元素。
弹性容器的直接子元素会自动成为弹性项目。 -->
<style type="text/css">
.main
{
display: flex;
/* 可以把块级元素放在一行 */
flex-direction:row-reverse;
/* 如同实现浮动功能
*/
width: 500px;
height: 500px;
border:1px solid black;
}
.one
{
width: 100px;
height: 100px;
background-color: red;
}
.two
{
width: 100px;
height: 100px;
background-color: blue;
}
.three
{
width: 100px;
height: 100px;
background-color: green;
}
</style>
</head>
<body>
<div class="main">
<div class="one">这是第一个div</div>
<div class="two">这是第二个div</div>
<div class="three">这是第三个div</div>
</div>
</body>
</html>
结果:
3.flex-wrap——子元素的换行方式
属性 | 作用 |
---|---|
flex-wrap: wrap; | 必要的时候换行 |
flex-wrap: nowrap; | 默认值,不换行 |
wrap-reverse | 值规定如有必要,弹性项目将以相反的顺序换行: |
代码如下(示例):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>弹性盒子</title>
<!-- 通过display属性取值取flex -->
<!-- flex-direction:从上到下排列 -->
<style type="text/css">
.main
{
display: flex;
/* 可以把块级元素放在一行,不会换行 */
flex-wrap: nowrap;
/* 不换行 */
width: 500px;
height: 500px;
border:1px solid black;
}
.main>div
{
width: 100px;
height: 100px;
background-color: red;
border:1px solid black;
}
</style>
</head>
<body>
<div class="main ">
<div >1</div>
<div >2</div>
<div >3</div>
<div >5</div>
<div >6</div>
<div >7</div>
<div >8</div>
<div >9</div>
<div >10</div>
</div>
</body>
</html>
结果:
上述代码使用flex-wrap: nowrap;:不换行
4.justify-content——设置行对齐
属性 | 作用 |
---|---|
center | 居中对齐 |
flex-start | 默认值,左对齐,弹性容器(弹性盒子)开头对齐 |
flex-end | 弹性容器(弹性盒子)末端对齐 |
space-around | 显示行(子元素)之前、之间和之后带有空格 |
space-between | 显示行(子元素)之间有空格 |
代码如下(示例):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>弹性盒子</title>
<!-- 通过display属性取值取flex -->
<!-- flex-direction:从上到下排列 -->
<style type="text/css">
.main
{
display: flex;
/* 可以把块级元素放在一行,不会换行 */
justify-content:center;
/* justify-content: flex-start; */
/* justify-content:flex-end; */
/* justify-content: space-around; */
/* 中间比两边宽是因为:中那个包含了前一个的后面和后一个的前 */
/* justify-content: space-between; */
width: 500px;
height: 500px;
border:1px solid black;
}
.main>div
{
width: 50px;
height: 50px;
background-color: red;
border:1px solid black;
}
</style>
</head>
<body>
<div class="main ">
<div >1</div>
<div >2</div>
<div >3</div>
</div>
</body>
</html>
结果:
5.align-items——子元素在侧轴的(纵轴)的对齐方式
属性 | 作用 |
---|---|
center | 垂直方向的居中 |
flex-start | 顶部对齐 |
flex-end | 底部对齐 |
stretch | 子元素会拉伸占用剩余的空间(子元素不设置高度) |
代码如下(示例):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>弹性盒子</title>
<!-- 通过display属性取值取flex -->
<!-- flex-direction:从上到下排列 -->
<style type="text/css">
.main
{
display: flex;
/* 可以把块级元素放在一行,不会换行 */
/* align-items: center; */
/* 垂直方向居中 */
/* align-items: flex-start; */
/* 顶部对齐 */
align-items: flex-end;
/* 底部对齐 */
/* align-items: stretch; */
/* 拉伸 ,要拉伸子元素不能设置高度。不然跟设置高度,不会拉伸*/
width: 500px;
height: 500px;
border:1px solid black;
}
.main>div
{
width: 50px;
height: 50px;
background-color: red;
border:1px solid black;
}
</style>
</head>
<body>
<div class="main ">
<div >1</div>
<div >2</div>
<div >3</div>
</div>
</body>
</html>
结果:
6.align-content——子元素在主轴的(横轴)的对齐方式
属性 | 作用 |
---|---|
stretch | 默认(子元素不设置高度的时候会拉伸)。各行将会伸展以占用剩余的空间。 |
flex-start | 各行向弹性盒容器的起始位置堆叠。 |
flex-end | 各行向弹性盒容器的结束位置堆叠。 |
center | 各行向弹性盒容器的中间位置堆叠。 |
space-between | 各行在弹性盒容器中平均分布。 |
space-around | 各行在弹性盒容器中平均分布,两端保留子元素与子元素之间间距大小 的一半 |
代码如下(示例):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>弹性盒子</title>
<!-- 通过display属性取值取flex -->
<!-- flex-direction:从上到下排列 -->
<style type="text/css">
.main
{
display: flex;
/* 可以把块级元素放在一行,不会换行 */
/* flex-wrap:wrap;
align-content: space-between; */
/* 加了flex-wrap:wrap;使上下填满 */
flex-wrap: wrap;
align-content: space-around;
width: 500px;
height: 500px;
border:1px solid black;
}
.main>div
{
width:100px;
height: 50px;
background-color: red;
border:1px solid black;
}
</style>
</head>
<body>
<div class="main ">
<div >1</div>
<div >2</div>
<div >3</div>
<div >5</div>
<div >6</div>
<div >7</div>
<div >8</div>
<div >9</div>
<div >10</div>
</div>
</body>
</html>
结果:
7.扩展
子元素的属性
order ------可以改变子元素的顺序
flex-grow-------规定某个子元素相对于其余子元素将增长多少
flex-shrink-----规定某个子元素相对于其余子元素将缩短多少
flex-basis-----给某个子元素设置初始的长度
flex ------- flex-grow、flex-shrink 和 flex-basis 属性的简写属性
align-self ------- 相对弹性盒子(弹性容器)的对齐方式 center flex-start flex-end
flex-grow-------规定某个 子元素相对于其余子元素将增长多少