css 基础2
一.margin相关技巧
1、设置元素水平居中: margin:x auto;
2、margin负值让元素位移及边框合并
盒子重合现象:两个盒子margin垂直边距的高度等于两个发生合并的边距的高度中的较大者。
解决方案如下:
1、使用这种特性(特殊布局用到)
2、设置一边的外边距,一般设置margin-top(布局常用)
3、将元素浮动或者定位
代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>margin相关技巧</title> <style type="text/css"> body{margin: 0} .box{ width: 202px; height: 156px; background-color: gold; /* 设置元素水平居中: margin:x auto; */ margin: 50px auto 0; } .box div{ width: 202px; height: 30px; border: 1px solid green; background: pink; margin: -1px; } </style> </head> <body> <div class="box"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> </div> </body> </html>
二,margin-top 塌陷
在两个盒子嵌套时候,内部的盒子设置的margin-top会加到外边的盒子上,导致内部的盒子margin-top设置失败(外部盒子没有设置边框和内部盒子用到margin属性)
解决方案如下:
1、外部盒子设置一个边框(不常用)
2、外部盒子设置 overflow:hidden(不推荐)
3、使用伪元素类:(比较常用)
.clearfix:before{ content: ''; display:table; }
代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>margin-top塌陷</title> <!-- margin-top 塌陷 在两个盒子嵌套时候,内部的盒子设置的margin-top会加到外边的盒子上,导致内部的盒子margin-top设置失败,解决方法如下: 1、外部盒子设置一个边框 2、外部盒子设置 overflow:hidden 3、使用伪元素类: .clearfix:before{ content: ''; display:table; } --> <style type="text/css"> .box{ width: 200px; height: 200px; background-color: gold; /* 1、外部盒子设置一个边框 */ /* border: 2px solid #000; */ /* 2、外部盒子设置 overflow:hidden */ /* overflow: hidden; */ margin: 50px; } .box div{ width: 120px; height: 50px; background-color: green; margin:50px 40px; } /* 3、使用伪元素类: */ .clearfix:before{ content: ''; display:table; } </style> </head> <body> <div class="box clearfix"> <div></div> </div> </body> </html>
三,css元素溢出
当子元素的尺寸超过父元素的尺寸时,需要设置父元素显示溢出的子元素的方式,设置的方法是通过overflow属性来设置。(外部盒子设置height属性)
解决方案如下:
overflow的设置项:
1、visible 默认值。内容不会被修剪,会呈现在元素框之外。
2、hidden 内容会被修剪,并且其余内容是不可见的,此属性还有清除浮动、清除margin-top塌陷的功能。
3、scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。
4、auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
5、inherit 规定应该从父元素继承 overflow 属性的值。
代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>css元素溢出</title> <style type="text/css"> .box{ width: 200px; height: 200px; background-color: gold; /* 1、visible 默认值。内容不会被修剪,会呈现在元素框之外。 */ /* overflow: visible; */ /* 2、hidden 内容会被修剪,并且其余内容是不可见的,此属性还有清除浮动、清除margin-top塌陷的功能。 */ /* overflow: hidden; */ /* 3、scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。 */ /* overflow: scroll; */ /* 4、auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。 */ /* overflow: auto; */ } </style> </head> <body> <div class="box"> 当子元素的尺寸超过父元素的尺寸时,需要设置父元素显示溢出的子元素的方式,设置的方法是通过overflow属性来设置。 overflow的设置项: 1、visible 默认值。内容不会被修剪,会呈现在元素框之外。 2、hidden 内容会被修剪,并且其余内容是不可见的,此属性还有清除浮动、清除margin-top塌陷的功能。 </div> </body> </html>
四,快元素
块元素,也可以称为行元素,布局中常用的标签如:div、p、ul、li、h1~h6、dl、dt、dd等等都是块元素。
在布局中的行为:
- 支持全部的样式
- 如果没有设置宽度,默认的宽度为父级宽度100%
- 盒子占据一行、即使设置了宽度
代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>快元素</title> <!-- 块元素,也可以称为行元素,布局中常用的标签如:div、p、ul、li、h1~h6、dl、dt、dd等等都是块元素,它在布局中的行为: 支持全部的样式 如果没有设置宽度,默认的宽度为父级宽度100% 盒子占据一行、即使设置了宽度 --> <style type="text/css"> .box{ background: gold; margin: 20px; border: 10px dashed #000; padding: 5px; } </style> </head> <body> <div class="box">div标签</div> <p class="box">p标签</p> <ul class="box"> <li>列表标签1</li> <li>列表标签2</li> </ul> </body> </html>
五,内联元素
内联元素,也可以称为行内元素,布局中常用的标签如:a、span、em、b、strong、i等等都是内联元素。
在布局中的行为:
- 支持部分样式(不支持宽、高、margin上下、padding上下)
- 宽高由内容决定
- 盒子并在一行
- 代码换行,盒子之间会产生间距
- 子元素是内联元素,父元素可以用text-align属性设置子元素水平对齐方式
代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>内联元素</title> <!-- 内联元素,也可以称为行内元素,布局中常用的标签如:a、span、em、b、strong、i等等都是内联元素,它们在布局中的行为: 支持部分样式(不支持宽、高、margin上下、padding上下) 宽高由内容决定 盒子并在一行 代码换行,盒子之间会产生间距 子元素是内联元素,父元素可以用text-align属性设置子元素水平对齐方式 --> <style type="text/css"> .cn{ width: 400px; height: 100px; background-color: blue; font-size: 0px; } .box{ /* 支持部分样式(不支持宽、高、margin上下、padding上下)宽高由内容决定 */ /* height: 200px; height: 100px; */ /* margin: 20px; padding: 10px; */ background: gold; text-align: center; font-size: 20px; } </style> </head> <body> <div class="cn"> <a href="#" class="box">a标签</a> <span class="box">span标签</span> <em class="box">em标签</em> <b class="box">b标签</b> <strong class="box">strong标签</strong> </div> <div class="box"> <a href="">连接啊</a> </div> </body> </html>
解决内联元素间隙的方法
1、去掉内联元素之间的换行
2、将内联元素的父级设置font-size为0,内联元素自身再设置font-size
六,内联快元素
内联块元素,也叫行内块元素,是新增的元素类型,现有元素没有归于此类别的,img和input元素的行为类似这种元素,但是也归类于内联元素,我们可以用display属性将块元素或者内联元素转化成这种元素。
在布局中表现的行为:
- 支持全部样式
- 如果没有设置宽高,宽高由内容决定
- 盒子并在一行
- 代码换行,盒子会产生间距
- 子元素是内联块元素,父元素可以用text-align属性设置子元素水平对齐方式。
display属性(这三种元素,可以通过display属性来相互转化)
display属性是用来设置元素的类型及隐藏的,常用的属性有:
1、none 元素隐藏且不占位置
2、block 元素以块元素显示
3、inline 元素以内联元素显示
4、inline-block 元素以内联块元素显示
代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>内联快元素</title> <!-- 内联块元素,也叫行内块元素,是新增的元素类型,现有元素没有归于此类别的,img和input元素的行为类似这种元素,但是也归类于内联元素,我们可以用display属性将块元素或者内联元素转化成这种元素。它们在布局中表现的行为: 支持全部样式 如果没有设置宽高,宽高由内容决定 盒子并在一行 代码换行,盒子会产生间距 子元素是内联块元素,父元素可以用text-align属性设置子元素水平对齐方式。 这三种元素,可以通过display属性来相互转化,不过实际开发中,块元素用得比较多,所以我们经常把内联元素转化为块元素,少量转化为内联块,而要使用内联元素时,直接使用内联元素,而不用块元素转化了。 --> <style type="text/css"> .box{ width: 400px; height: 400px; margin: 50px auto; border: 2px dotted #000; } .box a{ width: 100px; height: 100px; background-color: gold; margin: 20px; font-size: 20px; text-align: center; line-height: 80px; text-decoration: none; /* display属性是用来设置元素的类型及隐藏的,常用的属性有: 1、none 元素隐藏且不占位置 2、block 元素以块元素显示 3、inline 元素以内联元素显示 4、inline-block 元素以内联块元素显示 */ display:inline-block; } </style> </head> <body> <div class="box"> <a href="#">a标签1</a> <a href="#">a标签2</a> <a href="#">a标签3</a> <a href="#">a标签4</a> </div> </body> </html>