zoukankan      html  css  js  c++  java
  • 前端学习第56天高级选择器、盒子模型、边界圆角、其他属性

    一、高级选择器

    1、组合选择器

    组合选择器主要包括,群组选择器,子代(后代)选择器,相邻(兄弟)选择器,交集选择器

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>组合选择器</title>
        <style type="text/css">
            /*群组选择器: 同时可以控制多个选择器*/
            /*#dd, div, #a {
     
            }*/
            /*.d { 起相同类名
                color: red;
            }*/
            /*语法: 逗号分隔,控着多个*/
            .d1, .d2, .d3 {
                color: orange
            }
     
            /*子代(后代)选择器: 根据父子结构控着目标子标签*/
            /*明确选择器书写顺序: 目标inner, 再确定修饰词(哪个父亲,多少个父亲)*/
            /*子代选择器必须为一级父子嵌套关系,后代选择器可以为一级及多级父子嵌套关系*/
            /*语法: 子代 >连接 */
            .sub > .inner {
                color: tan
            }
            /*语法: 后代 空格连接*/
            .sup .inner {
                color: cyan
            }
            .sup .sub > .inner {
                color: red
            }
     
     
    <!-- 后代(子代)选择器:
            // ①
            <div class="sup">
                <div class="sub"></div>
            </div>
            // ②
            <div class="sup">
                <div class="box">
                    <div class="sub"></div>
                </div>
            </div>
            // *****可以控制①②
            .sup .sub {
                sup一定是sub的父代(不一定是父级,sub就是被sup直接嵌套)
            }  
            // 只可以控制①
            .sup > .sub {
                sup一定是sub的父级
            }
     -->
     
            /*相邻(兄弟)选择器: 根据兄弟结构控制下方兄弟标签*/
            /*相邻选择器必须为直接相邻关系,兄弟选择器可以为直接相邻或间接相邻关系*/
            /*明确目标 => 添加修饰词*/
            /*语法: 相邻 +连结*/
            .ele2 + .ele3 {
                color: blue
            }
            /*语法: 兄弟 ~连接*/
            .ele1 ~ .ele3 {
                color: yellow
            }
     
     
    <!-- 兄弟(相邻)选择器:
            // ①
            <div class="up"></div>
            <div class="down"></div>
            // ②
            <div class="up"></div>
            <div class="box"></div>
            <div class="down"></div>
             
            // 兄弟 控制①②
            .up ~ .down {
                 
            }
            // 相邻 控制①
            .up + .down {
                 
            }
     -->
     
     
            /*交集选择器: 一个标签有多种选择器修饰,通过多种修饰找到一个目标标签*/
            section#s.ss {
                color: green
            }
     
            /*注: 每一个选择器位均可以为三个基础选择器中任意一个*/
        </style>
    </head>
    <body>
        <!-- <div class="d1" id="dd"></div> -->
        <!-- .d${$$$}*3 -->
        <div class="d d1">001</div>
        <div class="d d2">002</div>
        <div class="d d3">003</div>
         
        <!-- .sup>.sub>.inner -->
        <div class="sup">
            <div class="sub">
                <div class="inner">inner</div>
            </div>
        </div>
     
        <!-- .ele${e$}*3 -->
        <div class="ele1">e1</div>
        <div class="ele2">e2</div>
        <div class="ele3">e3</div>
     
        <!-- (section.ss#s{块区域}+section.ss{块区域}+.ss{块区域}) -->
        <section class="ss" id="s">块区域</section>
        <section class="ss">块区域</section>
        <div class="ss">块区域</div>
     
    </body>
    </html>
     
    <!-- 交集选择器:
            <div class="div box"></div>
            <div class="div"></div>
            <div></div>
             
            div.div.box {
                增强精确度(提升优先级)
            }
            body .div.box {
                优先级只与选择器个数(种类)有关
            }
    -->

    2、复杂选择器优先级问题

     组合选择器优先级与权值相关,权值为权重和
    - 权重对应关系
     
    | 选择器 | 权重 |
    | :--------: | :---: |
    | 通配 | 1 |
    | 标签 | 10 |
    | 类、属性 | 100 |
    | id | 1000 |
    | !important | 10000 |
     
    - 选择器权值比较,只关心权重和,不更新选择器位置
    - 不同级别的选择器间不具备可比性:1个类选择器优先级高于n个标签选择器的任意组合
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style type="text/css">
            /*两个类名的选择器 > 一个类名的选择器, 与位置无关*/
            .d4 .d5 {
                font-size: 40px;
            }
     
            .d5 {
                font-size: 20px;
            }
            /*了解: 属性选择器*/
            [aa*="b"] {
                font-size: 30px;
            }
             
            /*每个选择器位也可以替换为一个组合选择器*/
            body > .d1 .d3 .d5 {
                font-size: 50px;
            }
            /*.d1 div .d3 .d5 优先级等于 body > .d1 .d3 .d5, 谁在下谁起作用*/
            .d1 div .d3 .d5 {
                font-size: 100px;
            }
     
            #div {
                font-size: 200px;
            }
        </style>
    </head>
    <body>
        <!-- 优先级取决于 权重, 其实就是比较个数 -->
        <!-- 1.不同的修饰符(后代/兄弟/交集...)均不影响权重 -->
        <!-- 2.选择器的位置也不会影响权重 -->
        <!-- 3.权重只和个数有关 -->
        <!-- 4.id的权重无限大于class无限大于标签 -->
        <!-- 5.属性选择器的权重与类一样 -->
     
        <!-- 复习: 优先级来源(操作的是同一标签同一属性) -->
        <div class="d1">
            <div class="d2">
                <div class="d3">
                    <div class="d4">
                        <div class="d5" aa="aba" id='div'>12345</div>
                        <div class="d5" aa="AAb">67890</div>
                    </div>
                </div>
            </div>
        </div>
    </body>
    </html>

    3、嵌套规则

    块级元素可以包含内联元素或某些块级元素,但内联元素不能包含块级元素,它只能包含其它内联元素。
    有几个特殊的块级元素只能包含内联元素,不能包含块级元素。如h1,h2,h3,h4,h5,h6,p,dt
    li内可以包含div
    块级元素与块级元素并列、内联元素与内联元素并列

    4、属性选择器

    [att]          匹配所有具有att属性的元素,不考虑它的值 p[title] { color:#f00; }

      
    [att=val]      匹配所有att属性等于“val”的E元素                                 div[class=”error”] { color:#f00; }
      
    [att~=val]     匹配所有att属性具有多个空格分隔的值、其中一个值等于“val”的E元素      td[class~=”name”] { color:#f00; }
      
    [attr^=val]    匹配属性值以指定值开头的每个元素                     div[class^="test"]{background:#ffff00;}
      
    [attr$=val]    匹配属性值以指定值结尾的每个元素                     div[class$="test"]{background:#ffff00;}
      
    [attr*=val]    匹配属性值中包含指定值的每个元素                     div[class*="test"]{background:#ffff00;}

    5、伪类选择器

    (1)a标签的伪类:专用于控制链接的显示效果

    a:link(没有接触过的链接),用于定义了链接的常规状态。
    a:hover(鼠标放在链接上的状态),用于产生视觉效果。
    a:visited(访问过的链接),用于阅读文章,能清楚的判断已经访问过的链接。
    a:active(在链接上按下鼠标时的状态),用于表现鼠标按下时的链接状态。
      
    伪类选择器 : 伪类指的是标签的不同状态:
    a ==> 点过状态     没有点过的状态     鼠标悬浮状态     激活状态
      
    a:link {color: #FF0000} /* 未访问的链接 */
    a:visited {color: #00FF00} /* 已访问的链接 */
    a:hover {color: #FF00FF} /* 鼠标移动到链接上 */
    a:active {color: #0000FF} /* 选定的链接 */ 格式: 标签:伪类名称{ css代码; } 
    其中hover与active其他标签也可以使用
    div:hover
    div:active

    (2)索引伪类

    :nth-child(n) 选择器匹配属于其父元素的第 N 个子元素,不论元素的类型。
    n 可以是数字、关键词或公式     先确定位置,再确定类型
     
    Odd 和 even 是可用于匹配下标是奇数或偶数的子元素的关键词(第一个子元素的下标是 1)
    p:nth-child(odd)
    p:nth-child(even)
     
    使用公式 (an + b)。描述:表示周期的长度,n 是计数器(从 0 开始),b 是偏移值。
    在这里,我们指定了下标是 3 的倍数的所有 p 元素的背景色
    p:nth-child(3n+0)
     
    :nth-of-type(n) 选择器匹配属于父元素的特定类型的第 N 个子元素的每个元素.
    n 可以是数字、关键词或公式,所有的都找    先确定类型,在确定匹配位置<br><br>:not()  取反操作

    (3)内容伪类

    :before        p:before       在每个<p>元素之前插入内容
    :after         p:after        在每个<p>元素之后插入内容
     
     
    p:before        在每个 <p> 元素的内容之前插入内容                    p:before{content:"hello";color:red}
    p:after         在每个 <p> 元素的内容之前插入内容                    p:after{ content:"hello";color:red}

    (4)取反伪类

    - :not(selector):对selector进行取反

    二、盒子模型

    1、盒模型概念

    - 广义盒模型:文档中所有功能性及内容性标签,及文档中所有显示性标签
    - 侠义盒模型:文档中以块级形式存在的标签(块级标签拥有盒模型100%特性且最常用)
    - 盒模型组成:margin + border + padding + content

    ###### v_hint:content = width x height

    2、盒模型成员介绍

    (1)、content

    盒子的内容,显示文本和图像

    - 通过设置width与height来规定content
    - 块级标签可以设置自身宽高,默认宽为父级宽(width=auto)、高为0,高度可以由内容决定
    - 内联标签不可以设置自身宽高,默认宽高均为0,宽高一定由内容决定

    (2)、border

    围绕在内边距和内容外的边框

    - border(边框)由border-width(宽度)、border-color(颜色)、border-style(风格)三部分组成
    - border成员:border-left、border-right、border-top、border-bottom
    - border-width成员:border-left-width、border-right-width、border-top-width、border-bottom-width
    - border-color成员:border-left-color、border-right-color、border-top-color、border-bottom-color
    - border-style成员:border-left-style、border-right-style、border-top-style、border-bottom-style

    | 风格 | 解释 |
    | :----: | :--------: |
    | solid | 实线 |
    | dashed | 虚线 |
    | dotted | 点状线 |
    | double | 双实线 |
    | groove | 槽状线 |
    | ridge | 脊线 |
    | inset | 内嵌效果线 |
    | outset | 外凸效果线 |

    ###### v_hint:border满足整体设置语法,eg:border: 1px solid red;

    (3)、padding

      用于控制内容与边框之间的距离

    - padding成员:padding-left、padding-right、padding-top、padding-bottom
    - padding整体设置

    | 值得个数 | 方位 |
    | :------: | :------------------: |
    | 1 | 上下左右 |
    | 2 | 上下 | 左右 |
    | 3 | 上 | 左右 | 下 |
    | 4 | 上 | 右 | 下 | 左 |

    (4)、margin

     用于控制元素与元素之间的距离;margin的最基本用途就是控制元素周围空间的间隔,从视觉角度上达到相互隔开的目的

    - margin成员:margin-left、margin-right、margin-top、margin-bottom
    - margin整体设置

    | 赋值个数 | 方位 |
    | :------: | :------------------: |
    | 1 | 上下左右 |
    | 2 | 上下 | 左右 |
    | 3 | 上 | 左右 | 下 |
    | 4 | 上 | 右 | 下 | 左 |

    <html>
    <head>
        <meta charset="UTF-8">
        <title>盒模型</title>
        <style type="text/css">
            /*content=width x height, 颜色由背景色填充, 参与盒子显示*/
            .box {
                width: 100px;
                height: 100px;
                background-color: orange
            }
            /*padding, 颜色由背景色填充, 参与盒子显示*/
            .box {
                padding: 20px;
            }
            /*border, 颜色由自身规定, 参与盒子显示*/
            .box {
                /*transparent 透明*/
                border: 10px solid black;
            }
            /*margin, 没有颜色, 不参与盒子显示, 决定盒子布局(位置信息)*/
            .box {
                margin: 200px;
            }
        </style>
    </head>
    <body>
        <!-- 什么是盒模型: 通配选择器可以控制的页面标签都是盒模型(一般我们操作的是块级标签) -->
        <!-- 为什么要学盒模型: 页面书写的标签初始状态级别都不能满足显示要求,需要再次修改,修改的就是盒模型的各个属性 -->
        <!-- 盒模型组成部分: margin(外边距) + boder(边框) + padding(内边距) + content(内容) -->
        <!-- 注意点: 1.四部分均具有自身独立区域 2.content=width x height,是子标签或子内容的显示区域  -->
    
        <div class="box">123</div>
    </body>
    </html>

    三、边界圆角

    #### border-radius

    - border-radius成员

    | 成员 | 解释 |
    | :------------------------: | :-------: |
    | border-top-left-radius | 左上 方位 |
    | border-top-right-radius | 右上 方位 |
    | border-bottom-left-radius | 左下 方位 |
    | border-bottom-right-radius | 右下 方位 |

    - 单方位设置

    | 赋值个数(值类型:长度 | 百分比) | 解释 |
    | :------------------------------: | :------: |
    | 1 | 横纵 |
    | 2 | 横 | 纵 |

    - 按角整体设置

    | 赋值个数(值类型:长度 | 百分比) | 解释 |
    | :--: | :--: |
    | 1 | 左上 右上 左下 右下 |
    | 2 | 左上 右下 | 右上 左下 |
    | 3 | 左上 | 右上 左下 | 右下 |
    | 4 | 左上 | 右上 | 右下 | 左下 |

    - 分向整体设置

    | 格式 | 解释 |
    | :---: | :----------: |
    | 1 / 1 | 横向 | 纵向 |

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>边界圆角</title>
        <style type="text/css">
            .box {
                width: 200px;
                height: 200px;
                background-color: orange;
            }
            .box {
                /*边界圆角*/
     
                /*百分比控制*/
                /*border-radius: 50%;*/
     
                /*实际像素控制*/
                /*border-radius: 20px;*/
     
                /*横纵分离  横 / 纵*/
                /*border-radius: 20px / 50%;*/
     
                /*左上为第一个角, 顺时针赋值, 无值找对角*/
                /*左上横30px 右上横100px 右下横=左上横 左下横=右上横, 四角纵向全是50%*/
                /*border-radius: 30px 100px / 50%;*/
                 
                /*单独设置时, 横向 纵向*/
                /*border-top-left-radius: 50% 100%;
                border-top-right-radius: 50% 100%;*/
                 
                border-radius: 50% 50% 0 0 / 100% 100% 0 0;
            }
        </style>
    </head>
    <body>
        <div class="box"></div>
    </body>
    </html>

     四、其他相关属性

    - max|min-width|height
    - overflow

    | 值 | 描述 |
    | :-----: | :------------------------------------------------------- |
    | visible | 默认值。内容不会被修剪,会呈现在元素框之外。 |
    | hidden | 内容会被修剪,并且其余内容是不可见的。 |
    | scroll | 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。 |
    | auto | 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。 |
    | inherit | 规定应该从父元素继承 overflow 属性的值。 |

    - display

    | 值 | 描述 |
    | :----------: | :----: |
    | inline | 内联 |
    | block | 块级 |
    | inline-block | 内联块 |

  • 相关阅读:
    又搬回来了233
    2017.10.2解题报告
    2017.10.1解题报告
    Android 百度地图开发(二)--- 定位功能之MyLocationOverlay,PopupOverlay的使用
    Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading data from binary lo
    [Warning] Aborted connection 11203 to db: 'ide' user: 'nuc' host: 'prd01.mb.com' (Got an error writi
    浅析地方门户网优化的方法
    xxx==null和xxx.equals(null)的区别
    Java+7入门经典
    《UNIX环境高级编程》笔记--read函数,write函数,lseek函数
  • 原文地址:https://www.cnblogs.com/ye-hui/p/10091891.html
Copyright © 2011-2022 走看看