博客列表 >9.03日 常用选择器与布局原理

9.03日 常用选择器与布局原理

曾经克火的博客
曾经克火的博客原创
2019年09月11日 22:18:21587浏览

1.    相邻选择器与兄弟选择器      nth-child  选择器和  nth-of-type 选择器

        相邻选择器:   选择器  +  * { }   ,相邻选择器只选择后面紧挨着的一个同级元素,用  +  号表示,*  是通配符,代表所有元素。

        兄弟选择器:   选择器  ~ *  { }  ,兄弟选择器选择后面的所有同级元素,用  ~   表示。

        nth-child 选择器:nth-child(索引)   代表选中从开头数第几个子元素,这里索引是从1开始的,不是从0开始的。

        nth-of-type 选择器:nth-of-type(索引)    代表选中指定元素的第几个元素。

        如果关注点是位置,使用nth-child   ;  既关注位置,又关注类型,用nth-of-type;

实例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <style>
        ul {
            border: 1px dashed red;
        }
        
        ul li {
            list-style: none;
            width: 150px;
            height: 30px;
            background-color: bisque;
            text-align: center;
            line-height: 30px;
            border: 1px solid black;
            border-radius: 10px;
        }
        
        ul p {
            width: 250px;
        }
        /* #zhan + * {
            background-color: aqua;
        }
        
        #yao ~ * {
            background-color: rosybrown;
        } */
        
        ul :nth-child(3) {
            background-color: aqua;
        }
        
        ul p:nth-of-type(3) {
            background-color: aqua;
        }
    </style>
    <title>选择器</title>
</head>

<body>
    <ul>
        <li>1.空呼</li>
        <li id="zhan">2.战斗服</li>
        <li>3.头盔</li>
        <li id="yao">4.***</li>
        <li class="ge">5.阻燃面罩</li>
        <li>6.照明灯</li>
        <li>7.救援绳</li>
        <li>8.腰斧</li>
        <li class="ge">9.呼救器</li>
        <li>10.多功能水***</li>
        <p>11.水带</p>
        <p>12.分水</p>
        <p>13.无齿锯</p>
        <p>14.冲杆</p>
        <p>15.钛合金腰斧</p>
    </ul>
</body>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

2.    padding对盒子大小的影响和解决方案

       内边距padding会撑开盒子

      1.   手动修改盒子大小:css文件中,重新给盒子定义一个大小。

      2.   使用宽度分离:添加中间层。

      3.   使用box-sizing:将box-sizing定位在边框(border-box)。这样大小就包括了内容区,padding和边框。外面的盒子大小就不会受到里面盒子的padding影响。

    HTML代码:

Snipaste_2019-09-11_21-53-41.png

    CSS代码:

Snipaste_2019-09-11_21-54-04.png 

    效果图:

Snipaste_2019-09-11_21-55-38.png


 3.    margin中的同级塌陷、嵌套传递、自动挤压     以及解决方案

        1.    同级塌陷:在垂直方向上,小的外边距会被大的外边距吞噬,谁大以谁为准。

        2.    嵌套传递:如果两个元素是父子关系,或者说是嵌套关系,那么子元素的margin值会传递到父元素上去。  解决方案:子元素的margin值对于父元素来说,就是父元素的padding值,我们反过来给父元素设置padding值,重新定义父元素的高就可以了,或者在开始的时候就在父元素定义border-box。再或者给父元素加一个边框。

        3.    自动挤压:如果一个盒子设置了左外边距,但没有给具体的值,那么浏览器会把把左边的区域尽可能留给它,这种现象就叫做自动挤压。解决方案:给margin设置一个具体的值就可以了。

实例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <style>
        .div1 {
            width: 150px;
            height: 150px;
            background-color: green;
            margin-bottom: 30px;
        }
        
        .div2 {
            width: 150px;
            height: 150px;
            background-color: aqua;
            margin-top: 20px;
        }
        
        .div3 {
            width: 200px;
            height: 200px;
            background-color: green;
        }
        
        .div4 {
            width: 100px;
            height: 100px;
            background-color: brown;
            margin-top: 50px;
        }
        /* .div3 {
            width: 200px;
            height: 200px;
            background-color: green;
            padding-top: 50px;
            height: 150px;
        }
        
        .div4 {
            width: 100px;
            height: 100px;
            background-color: brown;
        } */
        /* .div3 {
            width: 200px;
            height: 200px;
            background-color: green;
            border: 1px solid black;
        }
        
        .div4 {
            width: 100px;
            height: 100px;
            background-color: brown;
            margin-top: 50px;
        } */
        
        .div5 {
            width: 200px;
            height: 200px;
            background-color: green;
            /* margin-left: auto; */
            margin-left: 100px;
        }
    </style>
    <title>margin的同级塌陷、嵌套传递、自动挤压</title>
</head>

<body>

    <!-- 同级塌陷 -->
    <div class="div1"></div>
    <div class="div2"></div>
    <hr>

    <!-- 嵌套传递 -->
    <div class="div3">
        <div class="div4"></div>
    </div>
    <hr>
    <!-- 自动挤压 -->
    <div class="div5"></div>

</body>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


    总结:

1. 选择器

    list-style: none;   把无序列表前的小黑点去掉,也可以用  list-style-type: none;

    text-align: center;  设置单行文本水平居中。

    line-height:  **px;  设置单行文本垂直居中,给文本设置一个高度就可以了。

    border-radius:  **%;  设置边框的圆角,百分比可以让圆角自适应边框的宽高。

   display:inline-block;  将块级元素转为内联元素;

    box-shadow:*px  *px  *px  #888;   设置阴影,前两个像素代表沿着左右偏移的像素,第三个像素代表扩散的像素,颜色代表阴影的颜色;

    属性选择器:标签[属性=“属性值”]

    群组选择器:多个地位平等选择器写在一块,中间用英文逗号隔开。

    相邻选择器:选择器  +  *  { }       相邻选择器只选择后面紧挨着的一个同级元素,用 + 号表示,*是通配符,代表所有元素。

    兄弟选择器:选择器 ~ * { }        兄弟选择器选择后面的所有同级元素,用 ~ 表示。

    伪类: 子元素选择器, first-child 代表选中第一个子元素,last-child代表选中最后一个子元素。nth-child(索引)   代表选中从开头数第几个子元素,这里索引是从1开始的,不是从0开始的。nth-last-child(索引)    代表选中倒数第几个子元素。

    伪类:类型选择器, 只要前面指定元素的,一定要用带有type的选择器! first-of-type 代表选中指定元素的第一个元素。  last-of-type  代表选中指定元素的最后一个元素。nth-of-type(索引)    代表选中指定元素的第几个元素。

    注意:  如果关注点是位置,使用nth-child   ;  既关注位置,又关注类型,用nth-of-type;


2. 背景

background-color:    背景色。

background-image:    背景图片。用  url(" ")  导入

background-repeat:    重复方向。no-repeat 不重复,repeat-x 水平方向重复,repeat-y 垂直方向重复。

background-positon:     背景定位。第一个值为水平方向位置,第二个值为垂直方向位置。

background-attachment:    滚动方式。scroll  固定,随着滚动条移动而移动,fixed  不会随着滚动条移动而移动。

简写顺序:背景色    背景图片    重复方向    背景定位    滚动方式


3.  padding对盒子大小的影响与解决方案

      内边距padding会撑开盒子

      手动修改盒子大小:css文件中,重新给盒子定义一个大小。

      使用宽度分离:添加中间层。

      使用box-sizing:将box-sizing定位在边框(border-box)。这样大小就包括了内容区,padding和边框。外面的盒子大小就不会受到里面盒子的padding影响。


4.  关于margin中的同级塌陷、嵌套传递、自动挤压,解决方案和应用场景

    同级塌陷:在垂直方向上,小的外边距会被大的外边距吞噬,谁大以谁为准。

    嵌套传递:如果两个元素是父子关系,或者说是嵌套关系,那么子元素的margin值会传递到父元素上去。  解决方案:子元素的margin值对于父元素来说,就是父元素的padding值,我们反过来给父元素设置padding值,重新定义父元素的高就可以了,或者在开始的时候就在父元素定义border-box。再或者给父元素加一个边框。

    自动挤压:如果一个盒子设置了左外边距,但没有给具体的值,那么浏览器会把把左边的区域尽可能留给它,这种现象就叫做自动挤压。解决方案:给margin设置一个具体的值就可以了。 


    扩展:

            1.    在选择器内,在属性值的前面加上一个减号,就会使它变成非法值,作用等同于注释。

            2.    在伪类:子元素选择器中,标签后面会加一个空格,这个空格代表的是层级关系。

            3.    如果一个ul中有10个li,如何选中除了第一个li ,剩下的9个li全部选中。可以使用 ul  li+li{ },如果是伪类,用ul  li+li:hover{ }。


    疑问:

            老师,在关于margin的嵌套传递这个问题中,我使用给父元素设置上内边距解决了,也使用了给父元素加一个边框,但是上课时老师您讲到的使用box-sizing这个方法我一直没有试验出来,老师您能不能给解答一下? 



声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议