CSS-2

作者: 昆仑草莽 | 来源:发表于2019-05-21 15:07 被阅读0次

继续上一节的CSS基础后,我们来看CSS的一些高级设置。

CSS盒子模型

盒子模型:可以把页面上的每一个元素看成一个盒子,这是一个抽象的概念。盒子模型由内容,内边距,边框和外边距组成。

1、盒子模型之边框

参数 描述
border 复合样式
border-color 边框颜色
border-width 边框宽度
border-style 边框样式
border-top 上边框
border-left 左边框
border-right 右边框
border-bottom 下边框

注意:复合样式顺序为== >width==>style==>color

<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Title</title>
    <style>
        .box{
            width: 300px;
            height: 400px;
            border:1px solid red;
        }
        #box-1{
            width: 100px;
            height: 100px;
            border-color: red;
            border-width: 5px;
            border-style: solid;
            margin: 20px;
        }
        #box-2{
            width: 100px;
            height: 100px;
            border-color: red;
            border-width: 5px;
            border-top: 3px solid greenyellow;
            border-left:3px dotted blue;
            border-right: 3px double aqua;
            border-bottom: 3px dashed darkred;
            margin: 20px;
        }
    </style>
</head>
<body>
<div class="box">
    <div id="box-1">第一个盒子</div>
    <div id="box-2">第二个盒子</div>
</div>
</body>
</html>

2、盒子模型之内边距:

参数 描述
padding-top 上内边距
padding-left 左内边距
padding-right 右内边距
padding-bottom 下内边距
<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Title</title>
    <style>
        .box{
            width: 300px;
            height: 400px;
            border:1px solid red;
            padding-top: 100px;
            padding-left: 100px;
        }
        #box-1{
            width: 100px;
            height: 100px;
            border-color: red;
            border-width: 5px;
            border-style: solid;
            margin: 20px;
            padding: 30px 30px <!--第一个数字代表y轴方向,第二个数字代表x轴方向 -->
        }
        #box-2{
            width: 100px;
            height: 100px;
            border-color: red;
            border-width: 5px;
            border-top: 3px solid greenyellow; <!--solid 实线 -->
            border-left:3px dotted blue; <!--dotted点线 -->
            border-right: 3px double aqua; <!--double 双线 -->
            border-bottom: 3px dashed darkred; <!--dashed 虚线-->
            margin: 20px;
            padding: 40px 50px 60px 70px <!--第一个数字代表向上方向,第二个数字代表向右方向,第三个数字代表向下方向,第四个数字代表向右 -->
        }
    </style>
</head>
<body>
<div class="box">
    <div id="box-1">第一个盒子</div>
    <div id="box-2">第二个盒子</div>
</div>
</body>
</html>

注意:padding后面跟一个数字,表示四个方向同时扩张相应的距离,两个数字,四个数字含义,在代码注释里有解释。三个数字表示 “上,左右,下”,盒子的内边距增大可以加大父盒子的边距,必须注意。
3、盒子模型之外边距:

参数 描述
margin 复合样式
margin-top 上外边距
margin-left 左外边距
margin-right 右外边距
margin-bottom 下外边距
<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Title</title>
    <style>
        .box{
            width: 300px;
            height: 400px;
            border:1px solid red; 
        }
        #box-1{
            width: 100px;
            height: 100px;
            border:1px solid green;
            background-color: green;
            margin: 20px; 
        }
        #box-2{
            width: 100px;
            height: 100px;
            border:1px solid blue;
            background-color: blue;
            margin-top: 40px;
            margin-left: 50px;
        }
    </style>
</head>
<body>
<div class="box">
    <div id="box-1">第一个盒子</div>
    <div id="box-2">第二个盒子</div>
</div>
</body>
</html>
注意:margin后面的数字与padding相同。

盒子外边距存在的问题:
1、当第一个盒子和第二个盒子外边距不相等时,他们之间的距离以外边距大的一方为主。

2、当子盒子的外边距设置比父盒子的边框大时,子盒子会超出父盒子,
<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Title</title>
    <style>
        .box{
            width: 300px;
            height: 400px;
            border:1px solid red;
        }
        #box-1{
            width: 100px;
            height: 100px;
            border:1px solid green;
            background-color: green;
        }
        #box-2{
            width: 100px;
            height: 100px;
            border:1px solid blue;
            background-color: blue;
            margin-top: 400px;
        }
    </style>
</head>
<body>
<div class="box">
    <div id="box-1">第一个盒子</div>
    <div id="box-2">第二个盒子</div>
</div>
</body>
</html>

盒子内边距存在的问题:
盒子的内边距设置超出父盒子边框时,子盒子会超出父盒子的边界。

<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Title</title>
    <style>
        .box{
            width: 300px;
            height: 400px;
            border:1px solid red;
        }
        #box-1{
            width: 100px;
            height: 100px;
            border:1px solid green;
            background-color: green;
            padding-top: 400px;
        }
        #box-2{
            width: 100px;
            height: 100px;
            border:1px solid blue;
            background-color: blue;
        }
    </style>
</head>
<body>
<div class="box">
    <div id="box-1">第一个盒子</div>
    <div id="box-2">第二个盒子</div>
</div>
</body>
</html>
盒子模型内外边距总结:
注意四点:
A:margin调整内部div外边距;
B:padding调整外部div内边距,它调整的是自身大小,所以如果不希望破坏外观,则尽量使用margin布局(padding有可能撑大外盒子,但如果是margin过大,则盒子内容会被挤出,但不会改变盒子本身大小);
C:border内部div和外部div定位时需要找到边界,外部div如没有设置border,则内部div的margin设置时会一直往上找,直到找到边界位置。
D:内部相邻div间的margin,取值为两个div各自设置margin的最大值,而不是相加值。

CSS的Reset

Reset 翻译过来就是重置,重置CSS,浏览器在解析某些标签的时候,本身就自带了一些样式,导致我们写样式的时候就会效果不一致,公司里会根据每个公司的业务不同,会自己写一套属于自己公司的RESETCSS
https://meyerweb.com/eric/tools/css/reset/ 写了一套通用的ResetCSS,可以根据需要使用:

/* http://meyerweb.com/eric/tools/css/reset/ 
   v2.0 | 20110126
   License: none (public domain)
*/

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed, 
figure, figcaption, footer, header, hgroup, 
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: 100%;
    font: inherit;
    vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure, 
footer, header, hgroup, menu, nav, section {
    display: block;
}
body {
    line-height: 1;
}
ol, ul {
    list-style: none;
}
blockquote, q {
    quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
    content: '';
    content: none;
}
table {
    border-collapse: collapse;
    border-spacing: 0;
}

想要自己写可以使用简单的通配符

<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Title</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            border: 0;
            font-size: 100%;
            font: inherit;
            vertical-align: baseline;
        }
    </style>
</head>
<body>

</body>
</html>

浮动

浮动,其实就是让元素脱离正常的文档流,当正常文档布局不能解决的时候,则需要脱离正常文档流,浮动带来的问题就是高度塌陷
没有浮动之前

<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Title</title>
    <style>
        .box{
            width: 800px;
            height: 400px;
            border:1px solid red;
        }
        .box1{
            width: 100px;
            height: 100px;
            border:1px solid red;
            margin: 20px;
        }
        #box-1{
            background-color: red;
        }
        #box-2{
            background-color: green;
        }
        #box-3{
            background-color: blue;
        }
    </style>
</head>
<body>
<div class="box">
    <div class="box1" id="box-1"><p>第一个盒子</p></div>
    <div class="box1" id="box-2"><p>第二个盒子</p></div>
    <div class="box1" id="box-3"><p>第三个盒子</p></div>
</div>
</body>
</html>
浮动第一个盒子到右边
<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Title</title>
    <style>
        .box{
            width: 800px;
            height: 400px;
            border:1px solid red;
        }
        .box1{
            width: 100px;
            height: 100px;
            border:1px solid red;
            margin: 20px;
        }
        #box-1{
            background-color: red;
            float: right;
        }
        #box-2{
            background-color: green;
        }
        #box-3{
            background-color: blue;
        }
    </style>
</head>
<body>
<div class="box">
    <div class="box1" id="box-1"><p>第一个盒子</p></div>
    <div class="box1" id="box-2"><p>第二个盒子</p></div>
    <div class="box1" id="box-3"><p>第三个盒子</p></div>
</div>
</body>
</html>
浮动第三个盒子到左边
<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Title</title>
    <style>
        .box{
            width: 800px;
            height: 400px;
            border:1px solid red;
        }
        .box1{
            width: 100px;
            height: 100px;
            border:1px solid red;
            margin: 20px;
        }
        #box-1{
            background-color: red;
            float: right;
        }
        #box-2{
            background-color: green;
            float:left;
        }
        #box-3{
            background-color: blue;
        }
    </style>
</head>
<body>
<div class="box">
    <div class="box1" id="box-1"><p>第一个盒子</p></div>
    <div class="box1" id="box-2"><p>第二个盒子</p></div>
    <div class="box1" id="box-3"><p>第三个盒子</p></div>
</div>
</body>
</html>

此时设置第二个盒子为透明

}
        #box-2{
            background-color: blue;
            opacity: 0.2;
        }
QQ截图20190521135657.png

第三个盒子位于第二个盒子下面。也就是说,当浮动盒子的时候,他原本的位置已经不属于他自己,而他的位置变成了原本位置的上一层覆盖,就好比原先在一楼的第一个房间,现在去了二楼的第一个房间,从上向下看,位置没有变,事实上,位置却已经发送了变化。这就是浮动。
浮动带来的问题:
浮动前父盒子状态。

<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Title</title>
    <style>
        .box{
            border:1px solid red;
        }
        .box1{
            width: 100px;
            height: 100px;
            border:1px solid red;
            margin: 20px;
        }
        #box-1{
            background-color: red;
            /*float: right;*/
        }
        #box-2{
            background-color: green;
            /*float: right ;*/

        }
        #box-3{
            background-color: blue;
            /*float: right ;*/

        }
    </style>
</head>
<body>
<div class="box">
    <div class="box1" id="box-1">第一个盒子</div>
    <div class="box1" id="box-2">第二个盒子</div>
    <div class="box1" id="box-3">第三个盒子</div>
</div>
</body>
</html>

浮动后父盒子状态


可以看到父盒子已经包不住子盒子了,也就说,三人全去了二楼,一楼的地方就没有他们的了,那父盒子没有内容就无法撑开了。这就是高度塌陷的问题。下面来解决这个问题。
这个问题,在CSS中有三种解决之道:
1、设置父元素隐藏:父元素设置overflow:hidden:没有使用position时使用,不能和position配合使用,因为超出的尺寸的会被隐藏。
2、添加一个空div:如果页面浮动布局多,就要增加很多空div,不推荐使用。
3、使用伪元素:推荐使用,建议定义公共类,以减少CSS代码(目前:大型网站都有使用,如:腾迅,网易,新浪等等)

<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Title</title>
    <style>
        .clearfix::after{
            display: block;
            clear: both;
            content: "这是伪元素";
        }
        .box{
            border:1px solid red;
        }![QQ截图20190521143522.png](https://img.haomeiwen.com/i16673436/81fbfcd40fe3cd87.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

        .box1{
            width: 100px;
            height: 100px;
            border:1px solid red;
            margin: 20px;
        }
        #box-1{
            background-color: red;
            float: left;
        }
        #box-2{
            background-color: green;
            float: left ;

        }
        #box-3{
            background-color: blue;
            float: left ;

        }
    </style>
</head>
<body>
<div class="box clearfix">
    <div class="box1" id="box-1">第一个盒子</div>
    <div class="box1" id="box-2">第二个盒子</div>
    <div class="box1" id="box-3">第三个盒子</div>
</div>
</body>
</html>

定位

定位就是将元素定在网页中的任意位置,因为有时候需要对某些元素进行定位,想定哪里,定哪里。

定位属性 参数描述 参数说明
static 默认值 静态定位,默认值不会发生任何变化
relative 相对定位 相对定位,不会脱离文档流,以自身元素为参考,可以给 top/right/bottom/left
absolute 绝对定位 绝对定位,脱离文档流,默认以整个文档为参考,有定位父级,则父级参考,可以给top/right/bottom/left
fixed 固定定位 固定定位,脱离文档流,默认以窗口为参考,可以给top/right/bottom/left,窗口滚动,依然不会变

没有定位之前:

<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Title</title>
    <style>
        .box{
            border:1px solid red;
        }
        .box1{
            width: 100px;
            height: 100px;
            border:1px solid red;
            margin: 20px;
        }
        #box-1{
            background-color: red;
            /*position: relative;*/
            /*left: 30px;*/
            /*top: 20px;*/
        }
        #box-2{
            background-color: green;
            /*position: absolute;*/
            /*left: 230px;*/
            /*top: 20px;*/
        }
        #box-3{
            background-color: blue;
            /*position: fixed;*/
            /*left: 430px;*/
            /*top: 20px;*/
        }
    </style>
</head>
<body>
<div class="box">
    <div class="box1" id="box-1">第一个盒子</div>
    <div class="box1" id="box-2">第二个盒子</div>
    <div class="box1" id="box-3">第三个盒子</div>
</div>
</body>
</html>
定位之后:

相对定位,不脱离文档流,偏移前的位置还保留不动,覆盖不了前面div没有偏移前的位置
绝对定位,参照物为浏览器或已定位父元素,脱离文档流
固定定位,脱离文档流,始终固定于浏览器视图某个位置,且不随滚动条滚动而变化(网页上很多的小广告做法)应用重点:元素参照已定位父级绝对定位

定位补充

定位还有很多内容,就不一一赘述,可以自行查询。

相关文章

  • CSS-2

    本文为作者学习时所记自用笔记, 有很多不足,有错的地方烦请指出,图片来自360前端讲师课件,禁止转载。 块级元素与...

  • CSS-2

    css的背景属性 background可以统一设置 :(color/image/repeat/position) ...

  • CSS-2

    继续上一节的CSS基础后,我们来看CSS的一些高级设置。 CSS盒子模型 1、盒子模型之边框 注意:复合样式顺序为...

  • CSS-2

    1.复合选择器 2.emmet语法 3.背景色 背景图片 背景平铺 背景位置 背景相关属性连写 4.元素显...

  • 精通CSS-2 笔记

    2.1 常用选择器 最常用的选择器类型是类型选择器和后代选择器.类型选择器用来寻找特定的元素,比如段落或标题元素,...

网友评论

      本文标题:CSS-2

      本文链接:https://www.haomeiwen.com/subject/owpdzqtx.html