• CSS知识点(二)


    七、CSS的继承性和层叠性

    继承性

    面向对象语言都会存在继承的概念,在面向对象语言中,继承的特点:继承了父类的属性和方法。那么我们现在主要研究css,css就是在设置属性的。不会牵扯到方法的层面。

    继承:给父级设置一些属性,子级继承了父级的该属性,这就是我们的css中的继承。

    记住:有一些属性是可以继承下来 : color 、 font-*、 text-*、line-* 。主要是文本级的标签元素。

    但是像一些盒子元素属性,定位的元素(浮动,绝对定位,固定定位)不能继承。

    层叠性

    层叠性: 权重的标签覆盖掉了权重小的标签,说白了 ,就是被干掉了
    权重: 谁的权重大,浏览器就会显示谁的属性

    谁的权重大? 非常简单就是小学的数数。

    数:id的数量 class的数量 标签的数量,顺序不能乱

    /*1  0  0 */显示红色
    #box{
        color: red; 
    }
    
    /*0  1  0*/
    .container{
        color: yellow;
    }
    
    /*0  0  1*/
    p{
        color: purple;
    }

    是不是感觉明白了呢?好的,再给大家加深点难度。

    <div id='box1' class="wrap1">
        <div id="box2" class="wrap2">
            <div id="box3" class="wrap3">
                <p>再来猜猜我是什么颜色?</p>
            </div>
        </div>
    </div>  
    #box1 #box2 p{
        color: yellow;
    }
            
    #box2 .wrap3 p{
        color: red;
    }
            
    div div #box3 p{
        color: purple;
    }
            
            
    div.wrap1 div.wrap2 div.wrap3 p{
        color: blue;
    }

    好的。那么上面的这个案例大家是否懂了呢?那么接下来我们继续看案例

    还是上面那个html结构,如果我设置以下css,会显示什么颜色呢。

     #box2 .wrap3 p{
        color: yellow;
    }
    
    #box1 .wrap2 p{
        color: red;
    }

    答案是红色的。结论:当权重一样的时候 是以后来设置的属性为准,前提必须权重一样 。‘后来者居上 ’。

    Good,我们继续看下面的css,你来猜以下此时字什么颜色?

    #box1 #box2 .wrap3{
        color: red;
    }
            
    #box2 .wrap3 p{
        color: green;
    }

    答案是绿色。哈哈,是不是感觉快懵掉了。其实大家只要记住这点特性就可以。第一条css设置的属性值,是通过继承性设置成的红色,那么继承来的属性,它的权重为0。它没有资格跟我们下面选中的标签对比。

    那大家猜想一下如果都是被继承来的属性,那么字会显示什么颜色呢?

    #box1 #box2 .wrap3{
        color: red;
    }
    .wrap1 #box2{
        color: green;
    }

    小案例证明:权重都是0:那么就是"就近原则" : 谁描述的近,就显示谁的属性。所谓描述的近,就是选中到最内层的距离越近。

    总结:
    1.先看标签元素有没有被选中,如果选中了,就数数 (id,class,标签的数量) 谁的权重大,就显示谁的属性。权重一样大,后来者居上
    2.如果没有被选中标签元素,权重为0。
    如果属性都是被继承下来的 权重都是0 。权重都是0:"就近原则" : 谁描述的近,就显示谁的属性

    八、层叠性权重相同处理

    第一种现象:当权重相同时,以后来设置的属性为准,前提一定要权重相同

    #box2 .wrap3 p{
        color: yellow;
    }
            
    #box1 .wrap2 p{
        color: red;
    }

    我们会发现此时显示的是红色的。


    第二种现象: 第一个选择器没有选中内层标签,那么它是通过继承来设置的属性,那么它的权重为0。第二个选择器选中了内层标签,有权重。

    所以 继承来的元素 权重为0。跟选中的元素没有可比性。

    #box1 #box2 .wrap3{
        color: red;
    }
    #box2 .wrap3 p{
        color: green;
    }

    我们会发现此时显示的是绿色的。


    第三种现象:如果都是继承来的属性,谁描述的近,显示谁的属性。'就近原则'

    #box1 #box2 .wrap3{
        color: red;
    }
     .wrap1 #box2{
        color: green;
    }

    !important 的使用。

    !important:设置权重为无限大 
    !important 不影响继承来的权重,只影响选中的元素。不要随便使用!important,因为使用它会影响页面的布局

    九、盒模型

    在CSS中,"box model"这一术语是用来设计和布局时使用,然后在网页中基本上都会显示一些方方正正的盒子。我们称为这种盒子叫盒模型。

    盒模型有两种:标准模型和IE模型。在这里重点讲标准模型。

    盒模型示意图

    盒模型的属性

    width:内容的宽度

    height: 内容的高度

    padding:内边距,边框到内容的距离

    border: 边框,就是指的盒子的宽度

    margin:外边距,盒子边框到附近最近盒子的距离

    盒模型的计算

    如果一个盒子设置了padding,border,width,height,margin(咱们先不要设置margin,margin有坑,后面课程会讲解)

    盒子的真实宽度=width+2*padding+2*border

    盒子的真实宽度=height+2*padding+2*border

    那么在这里要注意看了。标准盒模型,width不等于盒子真实的宽度。

    另外如果要保持盒子真实的宽度,那么加padding就一定要减width,减padding就一定要加width。真实高度一样设置。

    十、padding

    padding:就是内边距的意思,它是边框到内容之间的距离

    另外padding的区域是有背景颜色的。并且背景颜色和内容的颜色一样。也就是说background-color这个属性将填充所有的border以内的区域

    padding的设置

    padding有四个方向,分别描述4个方向的padding。

    描述的方法有两种

    1、写小属性,分别设置不同方向的padding

    padding-top: 30px;
    padding-right: 30px;
    padding-bottom: 30px;
    padding-left: 30px;

    2、写综合属性,用空格隔开

    /*上 右 下 左*/
    padding: 20px 30px 40px 50px ;
    
    /*上 左右  下*/
    padding: 20px 30px 40px;
    
    /* 上下 左右*/
    padding: 20px 30px;
                
    /*上下左右*/
    padding: 20px;

    一些标签默认有padding

    比如ul标签,有默认的padding-left值。

    那么我们一般在做站的时候,是要清除页面标签中默认的padding和margin。以便于我们更好的去调整元素的位置。

    我们现在初学可以使用通配符选择器

    *{
      padding:0;
      margin:0;    
    }

    But,这种方法效率不高。

    所以我们要使用并集选择器来选中页面中应有的标签(不同背,因为有人已经给咱们写好了这些清除默认的样式表,reset.css)

    https://meyerweb.com/eric/tools/css/reset/

    十一、border

    border:边框的意思,描述盒子的边框

    边框有三个要素: 粗细 线性样式 颜色

    border: solid

    如果颜色不写,默认是黑色。如果粗细不写,不显示边框。如果只写线性样式,默认的有上下左右 3px的宽度,实体样式,并且黑色的边框。

    按照3要素来写border

    border- 3px;
    border-style: solid;
    border-color: red;
    /*
    border- 5px 10px;
    border-style: solid dotted double dashed;
    border-color: red green yellow;
    */

    按照方向划分

    border-top- 10px;
    border-top-color: red;
    border-top-style: solid;
    
    border-right- 10px;
    border-right-color: red;
    border-right-style: solid;
    
    border-bottom- 10px;
    border-bottom-color: red;
    border-bottom-style: solid;
    
    border-left- 10px;
    border-left-color: red;
    border-left-style:solid;

    上面12条语句,相当于 bordr: 10px solid red;

    另外还可以这样:

    border-top: 10px solid red;
    border-right: 10px solid red;
    border-bottom: 10px solid red;
    border-left: 10pxb solid red;

    border:none;

    border:0;

    表示border没有设置样式。

    使用border来制作小三角

    /*小三角 箭头指向下方*/
    div{
        width: 0;
        height: 0;
        border-bottom: 20px solid red;
        border-left: 20px solid transparent;
        border-right: 20px solid transparent;
    }

    十二、margin

    margin:外边距的意思。表示边框到最近盒子的距离。

    /*表示四个方向的外边距离为20px*/
    margin: 20px;
    /*表示盒子向下移动了30px*/
    margin-top: 30px;
    /*表示盒子向右移动了50px*/
    margin-left: 50px;

    margin塌陷问题

    当时说到了盒模型,盒模型包含着margin,为什么要在这里说margin呢?因为元素和元素在垂直方向上margin里面有坑。

    我们来看一个例子:

    html结构:

    <div class="father">
        <div class="box1"></div>        
        <div class="box2"></div>
    </div>

    css样式:

    复制代码
           *{
                padding: 0;
                margin: 0;
            }
            .father{
                 400px;
                overflow: hidden;
                border: 1px solid gray;
            }
            .box1{
                 300px;
                height: 200px;
                background-color: red;
                margin-bottom: 20px;}
            .box2{
                 400px;
                height: 300px;
                background-color: green;
                margin-top: 50px;
            }
    复制代码

    当给两个标准流下兄弟盒子 设置垂直方向上的margin时,那么以较大的为准,那么我们称这种现象叫塌陷。没法解决,我们称为这种技巧叫“奇淫技巧”。记住这种现象,在布局垂直方向盒子的时候主要margin的用法。

    当我们给两个标准流下的兄弟盒子设置浮动之后,就不会出现margin塌陷的问题。

    margin:0 auto;

    复制代码
          div{
                 780px;
                height: 50px;
                background-color: red;
                /*水平居中盒子*/
                margin: 0px auto;
                            /*水平居中文字*/
                text-align: center;
    
            }
        
    复制代码

    当一个div元素设置margin:0 auto;时就会居中盒子,那我们知道margin:0 auto;表示上下外边距离为0,左右为auto的距离,那么auto是什么意思呢?

    设置margin-left:auto;我们发现盒子尽可能大的右边有很大的距离,没有什么意义。当设置margin-right:auto;我们发现盒子尽可能大的左边有很大的距离。当两条语句并存的时候,我们发现盒子尽可能大的左右两边有很大的距离。此时我们就发现盒子居中了。

    另外如何给盒子设置浮动,那么margin:0 auto失效。

    使用margin:0 auto;注意点:

    1.使用margin: 0 auto;水平居中盒子必须有width,要有明确width,文字水平居中使用text-align: center;

    2.只有标准流下的盒子 才能使用margin:0 auto; 

    当一个盒子浮动了,固定定位,绝对定位(后面会讲),margin:0 auto; 不能用了

    3.margin:0 auto;居中盒子。而不是居中文本,文字水平居中使用text-align: center;

    另外大家一定要知道margin属性是描述兄弟盒子的关系,而padding描述的是父子盒子的关系

    善于使用父亲的padding,而不是margin

    如果让大家实现如图的效果,应该有不少的同学做不出来。

    那么我们来看看这个案例,它的坑在哪里?

    下面这个代码应该是大家都会去写的代码。

    复制代码
            *{
                padding: 0;
                margin: 0;
            }
            .father{
                 300px;
                height: 300px;
                background-color: blue;
            }
            .xiongda{
                 100px;
                height: 100px;
                background-color: orange;
                
                margin-top: 30px;
            }
    复制代码

    因为父亲没有border,那么儿子margin-top实际上踹的是“流” 踹的是行,所以父亲掉下来了,一旦给父亲一个border发现就好了。

    那么问题来了,我们不可能在页面中无缘无故的去给盒子加一个border,所以此时的解决方案只有一种。就是使用父亲的padding。让子盒子挤下来。

  • 相关阅读:
    Xcode11 Developer Tool中没了Application Loader
    iOS
    iOS
    UIView与CALayer的区别,很详细(基础教学拓展)转
    使pre的内容自动换行(转)小知识
    requirejs:模块加载(require)及定义(define)时的路径理解
    JS国际化网站中英文切换(理论支持所有语言)应用于h5版APP
    Tomcat8 配置APR模式
    Mongodb安装
    SecureCRT配色方案
  • 原文地址:https://www.cnblogs.com/shanae/p/9671616.html
Copyright © 2020-2023  润新知