html css项目积累汇总

1、关于ul的padding-left:40px的问题;

首先,我们来看一段代码:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>ul的padding-left:40px的问题</title>
 6     <style type="text/css">
 7     ul.imglist{
 8         width: 536px;
 9         height: 20px;
10         border: 1px solid #000;
11     }
12 </style>
13 </head>
14 <body>
15     <ul class="imglist"></ul>
16 </body>
17 </html>
View Code

以上代码中,我们给ul元素设置了一个类属性,命名为imglist。

并在样式中,给ul设置宽度为:536px,高度:20px,边框为1像素的黑色实线。

显示的效果:

由上图,我们可以看出ul.imglist的宽度居然变成了578px,除去边框的2px,576px减去536px,整整多出了40px。

究其根本原因,是因为浏览器对HTML元素默认样式设置不同所产生的

Firefox浏览器中的默认样式里面关于ul和ol的定义:

我们可以根据-moz-padding-start:40px,可以得出浏览器对ul和ol元素,默认会自动加上40px的填充。
那我们应该怎么样处理掉这浏览器默认的40px填充的像素?我们需要将常用的元素的内外边界初始化。
有以下两种解决办法:
1、在css的开头加上:
*{
margin: 0px;
padding: 0px;
}
但是这一种方式比较占资源
2、第二种方式,指它特定的标签设置:
body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, table, th, td {
margin:0;
padding:0;
}

下面我们修改一下代码:对ul进行初始化设置。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>ul的padding-left:40px的问题</title>
 6     <style type="text/css">
 7     ul{
 8         margin: 0px;
 9         padding: 0px;
10     }
11     ul.imglist{
12         width: 536px;
13         height: 20px;
14         border: 1px solid #000;
15     }
16 </style>
17 </head>
18 <body>
19     <ul class="imglist"></ul>
20 </body>
21 </html>
View Code

显示效果:

 

2、在代码中,中文字体为什么要用Unicode编码?

在代码中,我们常常把“宋体”写成“\5b8b\4f53”。当网页的编码是 utf-8时,某些情况下直接写:宋体、微软雅黑之类的中文字体名字时,会出现不能识别导致字体设置失效的问题,如果把字体名字转成对应编码如:‘\5b8b\4f53’,就不会出现这个问题。

3、font:14px/22px "\9ED1\4F53";是什么意思呢?

font:14px/22px "\9ED1\4F53";
14px是指字体大小,font-size。
22px是指行距,line-height。
"\9ED1\4F53"是指黑体。

4、margin:0 auto;的作用?

(1)语法格式

margin:0 auto;设置对象的上下间距为0,左右自动。

margin:0 auto可拆分为:margin: 0 auto 0 auto

margin-top: 0; margin-right: auto;margin-bottom: 0;margin-left: auto;(上、右、下、左)

下面,让我们看一段代码:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>margin:0 auto;的作用</title>
 6     <style type="text/css">
 7     .aa,.bb{
 8         width: 300px;
 9         height: 50px;
10     }
11     .aa{
12         border: 1px solid #F00;
13         margin-bottom: 30px;
14     }
15     .bb{
16         border: 1px solid #00F;
17     }
18 </style>
19 </head>
20 <body>
21     <div class="aa"></div>
22     <div class="bb"></div>
23 </body>
24 </html>
View Code

显示效果:

小结:我们在类名为aa的div中设置属性:margin-bottom: 30px;,效果如上图所示。

(2)作用

在div标签上设置margin:0 auto样式,是为了让div在浏览器中水平居中。

布局居中,水平居中,均可加入:margin:0 auto样式即可。

(3)关键点

关键点是:auto(自动,自适应)

将上面的代码进行修改,如下所示:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>margin:0 auto;的作用</title>
 6     <style type="text/css">
 7     .aa,.bb{
 8         width: 300px;
 9         height: 50px;
10         margin: 0 auto;
11     }
12     .aa{
13         border: 1px solid #F00;
14         margin-bottom: 30px;
15     }
16     .bb{
17         border: 1px solid #00F;
18     }
19 </style>
20 </head>
21 <body>
22     <div class="aa"></div>
23     <div class="bb"></div>
24 </body>
25 </html>
View Code

显示效果:

小结:以上例子中,我们统一设置div(aa)和div(bb)的宽度为:300px,边框1px。

可以测量出,浏览器的body长度为:1366px,因为设置了margin:0 auto,左右的边距自动,浏览会自动去解析div,左右边距自动设置值为(body长度-

(div长度+2*边框))/2,即为(1366px-(300+2))/2等于532px。

具体距离显示如下:

(4)为什么要设置margin:0 auto?

1、让div布局,水平居中于浏览器;

2、兼容各大浏览器让布局居中;

注意点:加入div居中布局中,如果果入了margin::0 auto就不能加入float浮动样式,避免逻辑错误,造成布局居中不兼容。

 5、理解overflow: hidden的作用

我们先来看一段代码:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>margin:0 auto;的作用</title>
 6     <style type="text/css">
 7 .container{
 8     background-color: black;
 9 }
10 .div1{
11     background-color: aqua;
12     width: 100px;
13     height: 100px;
14 }
15 .div2{
16     background-color: red;
17     width: 100px;
18     height: 100px;
19 }
20 </style>
21 </head>
22 <body>
23     <div class="container">
24         <div class="div1"></div>
25         <div class="div2"></div>
26     </div>
27 </body>
28 </html>
View Code

显示效果如下:父级div(container)的高度是auto,可以被子div无限的撑大,如下图的所示。

1、隐藏溢出;

现在我们给上段代码中的div(container),设置高度:height: 150px;

代码如下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>margin:0 auto;的作用</title>
 6     <style type="text/css">
 7 .container{
 8     background-color: black;
 9     height: 150px;
10 }
11 .div1{
12     background-color: aqua;
13     width: 100px;
14     height: 100px;
15 }
16 .div2{
17     background-color: red;
18     width: 100px;
19     height: 100px;
20 }
21 </style>
22 </head>
23 <body>
24     <div class="container">
25         <div class="div1"></div>
26         <div class="div2"></div>
27     </div>
28 </body>
29 </html>
View Code

显示效果:

现在我们给上段代码中的父div(container),设置高度:height: 150px的同时,加入overflow: hidden;代码如下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>margin:0 auto;的作用</title>
 6     <style type="text/css">
 7 .container{
 8     background-color: black;
 9     height: 150px;
10     overflow: hidden;
11 }
12 .div1{
13     background-color: aqua;
14     width: 100px;
15     height: 100px;
16 }
17 .div2{
18     background-color: red;
19     width: 100px;
20     height: 100px;
21 }
22 </style>
23 </head>
24 <body>
25     <div class="container">
26         <div class="div1"></div>
27         <div class="div2"></div>
28     </div>
29 </body>
30 </html>
View Code

显示效果:

小结:在默认情况下,当我们设置了父div(container)的高度为150px,子级div(div1, div2)的高度和为:200px,大于父级div(container)的高度,所以

此时子级div就会溢出父级div,如上图所示。

当我们在父div(container)上设置了:overflow: hidden;的时候,情况就发生变化了。overflow对子div(div1, div2)进行控制,设置overflow: hidden;

属性可以将超出父级div的子div进行溢出隐藏。

2、清除浮动

我们来看下面一段代码:

当父元素的高height:auto时,子元素分别设置:float:left时,使用overflow: hidden;来清除浮动。

①不清除浮动的时候

代码如下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>margin:0 auto;的作用</title>
 6     <style type="text/css">
 7 .container{
 8     background-color: black;
 9 }
10 .div1{
11     float: left;
12     background-color: aqua;
13     width: 100px;
14     height: 100px;
15 }
16 .div2{
17     float: left;
18     background-color: red;
19     width: 100px;
20     height: 100px;
21 }
22 </style>
23 </head>
24 <body>
25     <div class="container">
26         <div class="div1"></div>
27         <div class="div2"></div>
28     </div>
29 </body>
30 </html>
View Code

显示效果:

小结:我们很容易发现一个问题,就是为黑色背景的父元素div(container)消失了?

为什么会出现这样的情况呢?

原因是:子元素是浮动的,浮动的元素脱离文档元素,不占据空间。

不浮动的父级元素会直接无视这些浮动的子元素,又加之父元素div(container)的height:auto,即我们并没有设置,所以父元素div就没有显示出来了。

②清除浮动的时候

(1)方法一:使用overflow: hidden;

代码始下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>margin:0 auto;的作用</title>
 6     <style type="text/css">
 7 .container{
 8     background-color: black;
 9     overflow: hidden;
10 }
11 .div1{
12     float: left;
13     background-color: aqua;
14     width: 100px;
15     height: 100px;
16 }
17 .div2{
18     float: left;
19     background-color: red;
20     width: 100px;
21     height: 100px;
22 }
23 </style>
24 </head>
25 <body>
26     <div class="container">
27         <div class="div1"></div>
28         <div class="div2"></div>
29     </div>
30 </body>
31 </html>
View Code

(2)方法二:给父div(container)设置float

当然,我们还可以有另外一种方法清除浮动,那就是父div(container)本身也设置float;

代码如下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>margin:0 auto;的作用</title>
 6     <style type="text/css">
 7 .container{
 8     float: left;
 9     background-color: black;
10 }
11 .div1{
12     float: left;
13     background-color: aqua;
14     width: 100px;
15     height: 100px;
16 }
17 .div2{
18     float: left;
19     background-color: red;
20     width: 100px;
21     height: 100px;
22 }
23 </style>
24 </head>
25 <body>
26     <div class="container">
27         <div class="div1"></div>
28         <div class="div2"></div>
29     </div>
30 </body>
31 </html>
View Code

显示效果:

小结:我们没有看到黑色的父div(container)的身影,但是我们可以借助浏览器,很明显的看到父div(container),包含了两个子div(div1,div2)。这是因为浮动的div已经失去了“独霸一行”的能力,当我们手动为其设置一个宽度,如下代码所示:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>margin:0 auto;的作用</title>
 6     <style type="text/css">
 7 .container{
 8     float: left;
 9     background-color: black;
10     width: 500px;
11 }
12 .div1{
13     float: left;
14     background-color: aqua;
15     width: 100px;
16     height: 100px;
17 }
18 .div2{
19     float: left;
20     background-color: red;
21     width: 100px;
22     height: 100px;
23 }
24 </style>
25 </head>
26 <body>
27     <div class="container">
28         <div class="div1"></div>
29         <div class="div2"></div>
30     </div>
31 </body>
32 </html>
View Code

显示效果如下:

小结(1)方法一:使用overflow: hidden; (2)方法二:给父div(container)设置float

以上两种方法,一种是使用了清除浮动的战略,一种是使用了浮动的战略,使父div接受子div。两者的区别在于如果都浮动的话,需要额外的设置父div的

宽度,因为浮动起来的div失去了独占一行的特征,而清除浮动的div仍然霸道

3、解决坍塌

(1)可以使用overflow:hidden解决margin坍塌;

坍塌是不分父级div的高度是否固定的。

首先,我们要知道什么叫做坍塌?

我们在div1中加入margin-top: 50px;代码如下,我们来看看不坍塌时的效果。

代码如下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>margin:0 auto;的作用</title>
 6     <style type="text/css">
 7 .container{
 8     overflow: hidden;
 9     background-color: black;
10 }
11 .div1{
12     margin-top: 50px;
13     background-color: aqua;
14     width: 100px;
15     height: 100px;
16 }
17 .div2{
18     background-color: red;
19     width: 100px;
20     height: 100px;
21 }
22 </style>
23 </head>
24 <body>
25     <div class="container">
26         <div class="div1"></div>
27         <div class="div2"></div>
28     </div>
29 </body>
30 </html>
View Code

显示效果:

当去掉  overflow: hidden;代码如下:

我们来测量一下:

我们可以发现,div1的上端距离浏览器的顶部距离是50px,而不是对它的父div。这就是坍塌。

这种坍塌指针对父亲的第一个儿子div1,div2设置margin-top: 50px;

则不会有影响。

代码如下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>margin:0 auto;的作用</title>
 6     <style type="text/css">
 7 .container{
 8     background-color: black;
 9 }
10 .div1{
11     background-color: aqua;
12     width: 100px;
13     height: 100px;
14 }
15 .div2{
16     margin-top: 50px;
17     background-color: red;
18     width: 100px;
19     height: 100px;
20 }
21 </style>
22 </head>
23 <body>
24     <div class="container">
25         <div class="div1"></div>
26         <div class="div2"></div>
27     </div>
28 </body>
29 </html>
View Code

显示效果:

(2)考虑用符动来解决坍塌的问题;

我们给父div设置高度height:200px,然后给子div设置float:left;代码如下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>margin:0 auto;的作用</title>
 6     <style type="text/css">
 7 .container{
 8     background-color: black;
 9     height: 200px;
10 }
11 .div1{
12     margin-top: 50px;
13     float: left;
14     background-color: aqua;
15     width: 100px;
16     height: 100px;
17 }
18 .div2{
19     float: left;
20     background-color: red;
21     width: 100px;
22     height: 100px;
23 }
24 </style>
25 </head>
26 <body>
27     <div class="container">
28         <div class="div1"></div>
29         <div class="div2"></div>
30     </div>
31 </body>
32 </html>
View Code

显示效果:

显然易见,只要是符动的div就避免了坍塌的问题了。(无论是父div是否浮动)

总结:可以使用overflow:hidden来解除坍塌,浮动的div根本不用考虑坍塌;overflow:hidden的用法在溢出和清除浮动上主要针对父div是否有固定的高度加以区分。它还额外肩负了解除坍塌的重任。

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/niuwa/p/7597810.html