• CSS的选择器(一篇文章齐全)


    目录

    Day26:CSS的选择器

    1、CSS的引入方式

    2、CSS的选择器

    2.1 基本选择器​编辑

    2.2 组合选择器

    2.3 属性选择器

    2.4 伪类选择器

    2.5 样式继承

    2.6 选择器优先级

    3、CSS的属性操作

    3.1 文本属性

    3.2 背景属性

    3.3 边框属性

    3.4 列表属性

    3.5 dispaly属性

    3.6 盒子模型(重点)

    3.7 float属性(重点)

    3.7.1 清除浮动

    3.7.2 清除浮动解决父级塌陷问题:

    3.8 position属性


    Day26:CSS的选择器

    1、CSS的引入方式

    • 行内样式

    行内样式,就是写在元素的style属性中的样式,这种样式仅限于元素内部起作用。当个别元素需要应用特殊样式时就可以使用内联样式。但不推荐大量使用内联样式,因为那样不利于后期维护。

    <div style="color: white;background-color: #369;text-align: center">行内设置div>
    • 嵌入式

    嵌入式,是把CSS样式写在HTML文档内部head标签中的style标签里。浏览器加载HTML的同时就已经加载了CSS样式了。当单个文档需要特殊,单独的样式时,可以使用内部样式表。

    1. HTML>
    2. <html lang="en-US">
    3.  <head>
    4.     <title>titletitle>
    5.      <meta charset="utf8">
    6.      <style>
    7.          div{
    8.              color: white;
    9.              background-color: #369;
    10.              text-align: center
    11.         }
    12.      style>
    13.  head>
    14.  <body>
    15.  
    16.  <div> 嵌入式div>
    17.  body>
    18. html>
    • 链接式

    链接式,就是把CSS样式写在HTML文档的外部,一个后缀为 .css 的外部样式表中,然后使用时在head标签中,使用link标签的href属性引入文件即可。当CSS样式需要应用在很多页面时,外部样式表是最理想的选择。在使用外部样式表的情况下,我们可以通过改变一个文件来改变这所有页面的外观。

    外部样式文件:common.css

    1. div{
    2.      color: white;
    3.      background-color: #369;
    4.      text-align: center
    5. }

    html文件

    1. HTML>
    2. <html lang="en-US">
    3.  <head>
    4.     <title>titletitle>
    5.      <meta charset="utf8">
    6.      <link rel="stylesheet" href="common.css">
    7.  head>
    8.  <body>
    9.  <div>链接式div>
    10.  
    11.  body>
    12. html>

    2、CSS的选择器

    2.1 基本选择器

    1. html>
    2. <html lang="en">
    3. <head>
    4.    <meta charset="UTF-8">
    5.    <title>Titletitle>
    6.    <style>
    7.           #i1{
    8.               color: red;
    9.           }
    10.           .c1{
    11.               color: red;
    12.           }
    13.           .c2{
    14.               font-size: 32px;
    15.           }
    16.    style>
    17. head>
    18. <body>
    19. <div id="i1">item1div>
    20. <div id="i2">item2div>
    21. <div id="i3">item3div>
    22. <div class="c1 c2">item4div>
    23. <div class="c1">item5div>
    24. <div class="c1">item6div>
    25. body>
    26. html>

     

    2.2 组合选择器

    • 后代子代选择器

    1. html>
    2. <html lang="en">
    3. <head>
    4.    <meta charset="UTF-8">
    5.    <title>Titletitle>
    6.    <style>
    7.        /*后代选择器*/
    8.        .c1 .c2{
    9.            color: red;
    10.       }
    11.        /*子代选择器*/
    12.        .c3 .c5{
    13.            color: red;
    14.       }
    15.        .c3 > .c5{
    16.            color: red;
    17.       }
    18.        .c3 .c4 .c5{
    19.            color: red;
    20.       }
    21.        
    22.    style>
    23. head>
    24. <body>
    25. <div class="c1">
    26.    <div class="c2">item1div>
    27. div>
    28. <div class="c2">item2div>
    29. <div class="c3">
    30.    <div class="c4">
    31.        <div class="c5">item3div>
    32.    div>
    33.     <div class="c5">item4div>
    34. div>
    35. body>
    36. html>
    • 与或选择器

    1. html>
    2. <html lang="en">
    3. <head>
    4.    <meta charset="UTF-8">
    5.    <title>Titletitle>
    6.    <style>
    7.        /*与选择器*/
    8.        p.c1{
    9.            color: red;
    10.       }
    11.         /*或选择器*/
    12.        p.c1,#i1{
    13.            color: red;
    14.       }
    15.    style>
    16. head>
    17. <body>
    18. <div class="c1">item1div>
    19. <p class="c1">item2p>
    20. <div>item3div>
    21. <p id="i1">item4p>
    22. body>
    23. html>
    • 兄弟选择器

    1. html>
    2. <html lang="en">
    3. <head>
    4.    <meta charset="UTF-8">
    5.    <title>Titletitle>
    6.    <style>
    7.        /*毗邻选择器*/
    8.       #i1 + div.c1{
    9.           color: red;
    10.       }
    11.       #i1 + div.c2{
    12.           color: red;
    13.       }
    14.        /*兄弟选择器*/
    15.        #i1 ~ div.c2{
    16.           color: red;
    17.       }
    18.        #i1 ~ div{
    19.           color: red;
    20.       }
    21.    style>
    22. head>
    23. <body>
    24.    
    25. <p id="i1">item0p>
    26. <div class="c1">item1div>
    27. <div class="c2">item2div>
    28. <div class="c3">item3div>
    29. <div class="c4">item4div>
    30. body>
    31. html>

    2.3 属性选择器

    1. E[att]         匹配所有具有att属性的E元素,不考虑它的值。(注意:E在此处可以省略。
    2.               比如“[cheacked]”。以下同。)   p[title] { color:#f00; }
    3.                
    4. E[att=val]     匹配所有att属性等于“val”的E元素   div[class=”error”] { color:#f00; }
    5. E[att~=val]     匹配所有att属性具有多个空格分隔的值、其中一个值等于“val”的E元素
    6.                td[class~=”name”] { color:#f00; }
    7. E[attr^=val]   匹配属性值以指定值开头的每个元素                    
    8.                div[class^="test"]{background:#ffff00;}
    9. E[attr$=val]   匹配属性值以指定值结尾的每个元素    div[class$="test"]{background:#ffff00;}
    10. E[attr*=val]   匹配属性值中包含指定值的每个元素    div[class*="test"]{background:#ffff00;}
    1. html>
    2. <html lang="en">
    3. <head>
    4.    <meta charset="UTF-8">
    5.    <title>Titletitle>
    6.    <style>
    7.        /*属性选择器*/
    8.       [type="text"]{
    9.            border: 1px solid red;
    10.       }
    11.       [index]{
    12.            font-size: 32px;
    13.            font-style: italic;
    14.       }
    15.       [href*="png"]{
    16.            color: red;
    17.       }
    18.    style>
    19. head>
    20. <body>
    21. <input type="text">
    22. <input type="password">
    23. <div index="1">1div>
    24. <div index="2">2div>
    25. <div index="3">3div>
    26. <ul>
    27.    <li><a href="1.png">item1a>li>
    28.    <li><a href="2.jpg">item2a>li>
    29.    <li><a href="3.jpg">item3a>li>
    30.    <li><a href="4.png">item4a>li>
    31.    <li><a href="5.gif">item5a>li>
    32. ul>
    33. body>
    34. html>

    2.4 伪类选择器

    • anchor伪类:专用于控制链接的显示效果

    :linka:link选择所有未被访问的链接。
    :visiteda:visited选择所有已被访问的链接。
    :activea:active选择活动链接。
    :hovera:hover选择鼠标指针位于其上的链接。
    1.    <style>
    2.           a:link{
    3.               color: red;
    4.           }
    5.           a:visited{
    6.               color: coral;
    7.           }
    8.           a:hover{
    9.               color: blue;
    10.           }
    11.           a:active{
    12.               color: rebeccapurple;
    13.           }
    14.    style>

     

    • before after伪类

    before/after伪类相当于在元素内部插入两个额外的标签,其最适合也是最推荐的应用就是图形生成。在一些精致的UI实现上,可以简化HTML代码,提高可读性和可维护性。

    :first-childp:first-child选择属于父元素的第一个子元素的每个

    元素。

    :last-childp:last-child选择属于其父元素最后一个子元素每个

    元素。

    :beforep:before在每个

    元素的内容之前插入内容。

    :afterp:after在每个

    元素的内容之后插入内容。

    1. html>
    2. <html lang="en">
    3. <head>
    4.    <meta charset="UTF-8">
    5.    <title>Titletitle>
    6.    <style>
    7.        .c1 p:first-child{
    8.            color: red;
    9.       }
    10.        .c1 div:last-child{
    11.            color: red;
    12.       }
    13.        p#i1:after{
    14.            content:"hello";
    15.            color:red;
    16.            display: block;
    17.       }
    18.    style>
    19. head>
    20. <body>
    21. <div class="c1">
    22.    <p>item1p>
    23.    <p>item1p>
    24.    <div>item1div>
    25.    <p>item1p>
    26. div>
    27. <p id="i1">p标签p>
    28. body>
    29. html>

     

    2.5 样式继承

    CSS的样式表继承指的是,特定的CSS属性向下传递到子孙元素。总的来说,一个HTML文档就是一个家族,然后html元素有两个子元素,相当于它的儿子,分别是head和body,然后body和head各自还会有自己的儿子,最终形成了一张以下的家族谱。

    在上图中,可以看到,body的子元素有三个,h1、p和ul,ul也有几个子元素,p也有1个子元素,那么li和a就都是body的后代元素。有时可能我们在body里面设置了一些属性,结果,body下面所有的后代元素都可能享受到,这就是样式继承。就像一句俗语一样,“龙生龙,凤生凤,老鼠的儿子会打洞”。样式继承,可以给我们的网页布局带来很多的便利,让我们的代码变得更加简洁,但是,如果不了解,或者使用不当,也有可能会给我们带来很多不必要的麻烦。

    因此,如果了解了哪些样式是会继承到后代元素的,那么就可以避免这些问题的发生了。

    文本相关属性
    font-familyfont-sizeletter-spacingline-height
    font-stylefont-varianttext-aligntext-indent
    font-weightfonttext-transformword-spacing
    colordirection
    列表相关属性
    list-style-imagelist-style-positionlist-style-typelist-style
    表格和其他相关属性
    border-collapseborder-spacingcaption-sideempty-cells
    cursor

     

    2.6 选择器优先级

    • 继承

    继承是CSS的一个主要特征,它是依赖于祖先-后代的关系的。继承是一种机制,它允许样式不仅可以应用于某个特定的元素,还可以应用于它的后代。例如一个BODY定义了的颜色值也会应用到段落的文本中。

    body{color:red;}    <p>helloyuanp>

    这段文字都继承了由body {color:red;}样式定义的颜色。然而CSS继承性的权重是非常低的,是比普通元素的权重还要低的0。

    p{color:green}

    发现只需要给加个颜色值就能覆盖掉它继承的样式颜色。由此可见:任何显示申明的规则都可以覆盖其继承样式。 此外,继承是CSS重要的一部分,我们甚至不用去考虑它为什么能够这样,但CSS继承也是有限制的。有一些属性不能被继承,如:border, margin, padding, background等。

    • 优先级

      所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序。样式表中的特殊性描述了不同规则的相对权重。

    1. /*
    2. !important > 行内样式>ID选择器 > 类选择器 > 标签 > 通配符 > 继承 > 浏览器默认属性
    3. 1 内联样式表的权值最高               style=""           1000;
    4. 2 统计选择符中的ID属性个数。         #id               100
    5. 3 统计选择符中的CLASS属性个数。     .class             10
    6. 4 统计选择符中的HTML标签名个数。     标签名             1
    7. 按这些规则将数字符串逐位相加,就得到最终的权重,然后在比较取舍时按照从左到右的顺序逐位比较。
    8. */
    1. html>
    2. <html lang="en">
    3. <head>
    4.    <meta charset="UTF-8">
    5.    <title>Titletitle>
    6.    <style>
    7.            .c1{
    8.                color: red;
    9.           }
    10.            #i1{
    11.                color: coral;
    12.           }
    13.            div{
    14.                color: greenyellow;
    15.           }
    16.            /*.c2 .c3 .c4 span{*/
    17.            /*   color: orange;*/
    18.            /*}*/
    19.            .c2 .c4 span{
    20.                color: blue;
    21.           }
    22.            .c2 .c3 .c5{
    23.                color: rebeccapurple;
    24.           }
    25.            .c2 .c4 .c5{
    26.                color: darkcyan;
    27.           }
    28.    style>
    29. head>
    30. <body>
    31. <div class="c1" id="i1">item1div>
    32. <div class="c2">
    33.    <div class="c3">
    34.        <div class="c4">
    35.            <span class="c5">item2span>
    36.        div>
    37.    div>
    38. div>
    39. body>
    40. html>

    1、有!important声明的规则高于一切。

    2、如果!important声明冲突,则比较优先权。

    3、如果优先权一样,则按照在源码中出现的顺序决定,后来者居上。

    4、由继承而得到的样式没有specificity的计算,它低于一切其它规则(比如全局选择符*定义的规则)。

    5、用数字表示只是说明思想,一万个class也不如一个id权值高

    3、CSS的属性操作

    3.1 文本属性

    • font-style(字体样式风格)

    1. /*
    2. 属性值:
    3. normal:设置字体样式为正体。默认值。
    4. italic:设置字体样式为斜体。这是选择字体库中的斜体字。
    5. oblique:设置字体样式为斜体。人为的使文字倾斜,而不是去使用字体库的斜体字。
    6. */
    • font-weight(字体粗细)

    1. /*
    2. 属性值:
    3. normal:设置字体为正常字体。相当于数字值400
    4. bold:设置字体为粗体。相当于数字值700。
    5. bolder:设置字体为比父级元素字体更粗的字体。
    6. lighter:设置字体为比父级元素字体更细的字体。
    7. number:用数字表示字体粗细。从小到大,越来约粗,取值范围:100、200、300、400、500、600、700、800、900。
    8. 注意:
    9. font-weight的常用值有两个normal和bold,其他的值在浏览器中的支持并不好。
    10. */
    • font-size(字体大小)

    1. /*
    2. font-size的值有很多,有xx-small、x-small、small、medium、large、x-large、xx-large、smaller和larger,也可以设置值为具体的数值加上对应的计算单位来表示字体的大小。字体单位有像素( px )、字符( em,默认1em等于16px,2em等于32px,根据不同浏览器的默认字体大小而决定 )、百分比( % ),磅[点]( pt )。
    3. 字体不指定大小时,主流浏览器默认是15像素到16像素。旧版本的谷歌浏览器,字体最小只能设置成12像素,新版已经修复。
    4. */
    • font-family(字体族)

    1. /*
    2. font-family可以指定元素使用的字体系列或字体族。当我们使用font-family指定字体族的时候,可以指定多种字体,作为候补。指定多个字体的时候,需要使用逗号隔开。
    3. 如果css中没有声明当前内容使用的字体族的时候,默认:
    4. 中文: 宋体 [ win7以后默认是 微软雅黑 ]
    5. 英文: Arial
    6. */
    • color(字体颜色)

    // 可以使用color来表示字体的颜色,颜色值最常用的有三种形式,英文单词,十六进制,RGB十进制。更高级的有 RGBA、HSL、HSLA,不过低版本的浏览器并不支持。
    
    1. <style>
    2.       .c1{
    3.           color: red;
    4.       }
    5.       .c1{
    6.           color: #369;
    7.       }
    8.       .c1{
    9.           color: RGB(0,0,255);
    10.       }
    11. style>

    另外要注意,使用十六进制表示颜色值的时候,如果字符的格式类似于“AAAAAA”的这种,六个字符一样的;又或者是“AABBCC”,这种,一二,三四,五六 位置上的数字一样的,我们可以使用简写来表达。

     

    • text-align(文本对齐方式)

    1. /*
    2. text-align属性可以设置文本内容的水平对齐方式。属性值常用的有
    3. 左对齐left、居中对齐center、右对齐right。justify 实现两端对齐文本效果。
    4. */

     

    • line-height(字体行高)

    // 字体行高即字体最底端与字体内部顶端之间的距离。值可以是normal、px、number、%。
    
    

    行高 = 字体大小 + 上半行距 + 下半行距

     

    • vertical-align

    vertical-align 属性设置元素的垂直对齐方式。

    <img src="" alt=""><span>yuanspan>
    • text-decoration

    // 使用text-decoration可以设置文本内容的装饰线条,正常的文本是没有线条的,常用的值有none,underline,overline,line-through四种。

    3.2 背景属性

    • background-color(背景颜色)

    页面的背景颜色有四种属性值表示,分别是transparent(透明),RGB十进制颜色表示,十六进制颜色表示和颜色单词表示。

    属性使用:

    1. /*
    2. background-color: transparent;   // 透明
    3. background-color: rgb(255,0,0); // 红色背景
    4. background-color: #ff0000; // 红色背景
    5. background-color: red;   // 红色背景
    6. */
    • background-image(背景图片)

    background-image可以引入一张图片作为元素的背景图像。默认情况下,background-image放置在元素的左上角,并在垂直和水平方向重复平铺。

    语法:

    // background-image: url('图片地址')

    当同时定义了背景颜色和背景图像时,背景图像覆盖在背景颜色之上。 所以当背景图片没有被加载到,或者不能完全铺满元素时,就会显示背景颜色。

    • background-repeat(背景平铺方式)

    CSS中,当使用图像作为背景了以后,都是默认把整个页面平铺满的,但是有时候在很多场合下面,页面并不需要这种默认的效果,而可能需要背景图像只显示一次,或者只按照指定方式进行平铺的时候,可以使用background-repeat来进行设置。

    background-repeat专门用于设置背景图像的平铺方式,一般有四个值,默认是repeat(平铺),no-repeat(不平铺),repeat-x(X轴平铺),repeat-y(Y轴平铺)。

    • background-position(背景定位)

    CSS中支持元素对背景图像的定位摆放功能,就是利用background-position属性来实现,以页面中元素的左上角为原点(0,0),把元素的内部区域当成一个坐标轴(上边框为X轴,越往左X的值越大,左边框为Y轴,越往下Y轴的值就越大,反之亦然),然后计算出背景图片的左上角与圆点的距离(x轴和y轴的距离),然后把背景图片放入到指定的位置上,对背景图片的位置进行精确的控制和摆放。

    background-position的值分成两个,使用空格隔开,前面一个是背景图片左上角的x轴坐标,后面一个是背景图片左上角的y轴坐标。两个值都可以是正、负值。

    语法:

    // background-position: x轴坐标 y轴坐标

    背景定位的值除了是具体的数值以外,还可以是左(left)、中(center)、右(right)

    • background(背景样式缩写)

    和字体属性一样,多个不同背景样式属性也是可以同时缩写的,不过不需要像字体那样按照一定的顺序,背景样式的缩写属性的顺序是不固定的,可以任意编排。

    语法:

    // background: 背景颜色  背景图片  背景平铺方式  背景定位;

     

    3.3 边框属性

    • border-style(边框风格)

    定义边框的风格,值可以有

    1. /*
    2. none:没有边框,当border的值为none的时候,系统将会忽略[border-color]
    3. hidden:隐藏边框,低版本浏览器不支持。
    4. dotted:点状边框。
    5. dashed:虚线边框。
    6. solid:实线边框。
    7. double:双实线边框,两条单线与其间隔的和等于border-width值。
    8. */

    border-style的值可以缩写的:

    1. /*
    2. 只有一个值的时候表示同时控制上下左右的边框风格。
    3. 只有两个值的时候表示分别控制上下、左右的边框风格。
    4. 有三个值的时候表示分别控制上、左右、下的边框风格。
    5. 有四个只的时候表示分别控制上、右、下、左的边框风格。
    6. */

    border-style还可以单独指定不同方向:

    1. /*
    2. border-top-style 设置上边的边框风格
    3. border-bottom-style     设置下边的边框风格
    4. border-left-style 设置左边的边框风格
    5. border-right-style 设置右边的边框风格
    6. */
    • border-width(边框宽度)

    使用border-width可以定义边框的厚度,值可以是medium,thin,thick和指定数值的宽度。 同时,border-width也可以进行缩写:

    1. /*
    2. 只有一个值的时候表示同时控制上下左右的边框宽度。
    3. 只有两个值的时候表示分别控制上下、左右的边框宽度。
    4. 有三个值的时候表示分别控制上、左右、下的边框宽度。
    5. 有四个只的时候表示分别控制上、右、下、左的边框宽度。
    6. */

    border-width也可以单独指定不同方向:

    1. /*
    2. border-top-width 设置上边的边框宽度
    3. border-bottom-width   设置下边的边框宽度
    4. border-left-width 设置左边的边框宽度
    5. border-right-width 设置右边的边框宽度
    6. */
    • border-color(边框颜色)

    定义边框的颜色,值表示的方式可以是十六进制,RGB十进制和单词表示法。

    同上,border-color的缩写:

    1. /*
    2. 只有一个值的时候表示同时控制上下左右的边框颜色。
    3. 只有两个值的时候表示分别控制上下、左右的边框颜色。
    4. 有三个值的时候表示分别控制上、左右、下的边框颜色。
    5. 有四个只的时候表示分别控制上、右、下、左的边框颜色。
    6. */

    border-color也可以单独指定不同方向:

    1. /*
    2. border-top-color 设置上边的边框颜色
    3. border-bottom-color 设置下边的边框颜色
    4. border-left-color 设置左边的边框颜色
    5. border-right-color 设置右边的边框颜色
    6. */
    • 边框样式缩写

    还可以把边框风格,边框宽度,边框颜色进行组合在一起,进行缩写:语法:

    // border: 边框宽度 边框样式 边框颜色;

    注意,border的缩写值可以不按照顺序来进行书写。这样的缩写可以同时控制4个方向的边框样式。

    3.4 列表属性

    CSS中提供了一些列表属性可以用来:

    (1)、设置不同的列表项标记为有序列表

    (2)、设置不同的列表项标记为无序列表

    (3)、设置列表项标记为图像

    • list-style-type(系统提供的列表项目符号)

    • list-style-image(自定义的列表项目符号)

    li { list-style-image:url('qq.gif'); }

    3.5 dispaly属性

    display可以指定元素的显示模式,它可以把行内元素修改成块状元素,也可以把别的模式的元素改成行内元素。diisplay常用的值有四个。

    语法:

    1. /*
    2. display: block; // 声明当前元素的显示模式为块状元素
    3. display: inline; // 声明当前元素的显示模式为行内元素
    4. display: inline-block; // 声明当前元素的显示模式为行内块状元素
    5. display: none; // 声明当前元素的显示模式为隐藏
    6. */

    display: inline-block; 和 float

    ==解决的核心问题:能够让多个可以设置长宽的元素在一行显示。==

    3.6 盒子模型(重点)

    盒模型是CSS的核心知识点之一,它指定元素如何显示以及如何相互交互。HTML页面上的每个元素都可以看成一个个方盒子,这些盒子由元素的content(内容)、padding(内边距)、border(边框)、margin(外边距)组成。

    • padding(内边距及其缩写)

    内边距,也叫“内补白”,表示页面中元素的边框与内容的距离。内边距的值不能是负值,相当于table标签的cellpadding属性。

    内边距可以设置多个值:

    1. /*
    2. 当padding只有一个值的时候表示同时控制上下左右的内边距。
    3. 当padding只有两个值的时候表示分别控制上下、左右的内边距。
    4. 当padding有三个值的时候表示分别控制上、左右、下的内边距。
    5. 当padding有四个只的时候表示分别控制上、右、下、左的内边距。
    6. */

    内边距也可以进行单独设置:

    1. /*
    2. padding-top 设置上边的外边距
    3. padding -bottom 设置下边的外边距
    4. padding -left 设置左边的外边距
    5. padding -right 设置右边的外边距
    6. */
    • margin(外边距及其缩写)

    外边距,也叫“外补白”,表示页面中元素与元素之间的距离。外边距越大,两者的距离就越远,反之,如果外边距越小,则元素之间的距离就越近,外边距的值可以是正数,也可以是负值。

    margin也可以像padding一样设置多个值和单独方向设置,用法一样。

    1、在网页的开发过程中,需要让一个元素相对于父级元素作水平居中时,可以借助margin的特性来实现。

    使用margin让元素自身居中: margin: 0 auto;

    2、浏览器的默认边距清零

    1. html>
    2. <html lang="en">
    3. <head>
    4.    <meta charset="UTF-8">
    5.    <title>Titletitle>
    6.    <style>
    7.       .c1{
    8.           width: 100%;
    9.           height: 600px;
    10.           border: 1px solid red;
    11.       }
    12.       .c2{
    13.           width: 50%;
    14.           height: 40px;
    15.           background-color: rebeccapurple;
    16.           margin: 10px auto;
    17.       }
    18.    style>
    19. head>
    20. <body>
    21. <div class="c1">
    22.    <div class="c2">div>
    23.    <div class="c2">div>
    24. div>
    25. body>
    26. html>

    边距案例:

    1. HTML>
    2. <html lang="en-US">
    3.  <head>
    4.        <meta charset="utf8">
    5.        <style>
    6.           *{
    7.                margin: 0;
    8.                padding: 0;
    9.           }
    10.            .c1{
    11.                width: 80%;
    12.                margin: 100px auto;
    13.           }
    14.            .c1 .J_categoryList{
    15.                list-style: none;
    16.           }
    17.            .c1 .J_categoryList li{
    18.                display: inline-block;
    19.                margin: 10px;
    20.           }
    21.            .c1 .J_categoryList li a{
    22.                font-size: 16px;
    23.                color: #333;
    24.                padding: 20px;
    25.                border: 1px solid rebeccapurple;
    26.                text-decoration: none;
    27.           }
    28.        style>
    29.  head>
    30.  <body>
    31. <div class="c1">
    32.      <ul class="J_categoryList">
    33.          <li><a href=""><span>红米span>a>li>
    34.          <li><a href=""><span>电视span>a>li>
    35.          <li><a href=""><span>笔记本span>a>li>
    36.          <li><a href=""><span>家电span>a>li>
    37.          <li><a href=""><span>小米手机span>a>li>
    38.      ul>
    39. div>
    40.  body>
    41. html>

     

    3.7 float属性(重点)

    • 流动布局

    流动模型(Flow),即文档流,浏览器打开HTML网页时,从上往下,从左往右,逐一加载。

    在正常情况下,HTML元素都会根据文档流来分布网页内容的。

    文档流有2大特征:

    ① 块状元素会随着浏览器读取文档的顺序,自上而下垂直分布,一行一个的形式占据页面位置。

    ② 行内元素会随着浏览器区队文档的顺序,从左往右水平分布,一行多个的形式占据页面位置。行内元素摆放满一行以后才会到下一行继续排列。

    1. HTML>
    2. <html lang="en-US">
    3.  <head>
    4.    <title>title>
    5.    <style>
    6.    div{ border: 1px solid #f00; margin: 4px; }
    7.    .d3{ width: 100px; }
    8.    style>
    9.  head>
    10.  <body>
    11.    <div>d1div>
    12.    <div>d2div>
    13.    <div class="d3">
    14.      <span>span1span>
    15.      <a>a1a>
    16.      <a>a2a>
    17.      <span>span2span>
    18.    div>
    19.  body>
    20. html>
    • 浮动模型

    要学习浮动模型的布局模式,就要了解CSS提供的浮动属性(float)。浮动属性是网页布局中最常用的属性之一,通过浮动属性不但可以很好的实现页面布局,而且还可以依靠它来制作导航栏等页面功能。

    简单浮动:

    1. HTML>
    2. <html lang="en-US">
    3.  <head>
    4.    <title>简单浮动title>
    5.    <style>
    6.        .c1{
    7.            width: 200px;
    8.            height: 200px;
    9.            background-color: indianred;
    10.            float: left;
    11.       }
    12.        .c2{
    13.            width: 300px;
    14.            height: 200px;
    15.            background-color: orange;
    16.            float: left;
    17.       }
    18.        .c3{
    19.            width: 400px;
    20.            height: 200px;
    21.            background-color: lightblue;
    22.            float: left;
    23.       }
    24.        
    25.    style>
    26.  head>
    27.  <body>
    28.   <div class="c1">div>
    29.   <div class="c2">div>
    30.   <div class="c3">div>
    31.  body>
    32. html>
    • 字围效果

    1. HTML>
    2. <html lang="en-US">
    3.  <head>
    4.    <title>字围效果title>
    5.    <style>
    6.        .c1{
    7.            width: 200px;
    8.            height: 200px;
    9.            background-color: indianred;
    10.       }
    11.        .c2{
    12.            width: 300px;
    13.            height: 200px;
    14.            background-color: orange;
    15.            float: left;
    16.       }
    17.        .c3{
    18.            width: 400px;
    19.            height: 400px;
    20.            background-color: lightblue;
    21.       }
    22.        
    23.    style>
    24.  head>
    25.  <body>
    26.   <div class="c1">111div>
    27.   <div class="c2">222div>
    28.   <div class="c3">333div>>
    29.  body>
    30. html>

    案例:

    1. HTML>
    2. <html lang="en-US">
    3.  <head>
    4.    <title>字围案例title>
    5.    <meta charset="utf8">
    6.    <style>
    7.        .c1{
    8.            width: 500px;
    9.       }
    10.        img{
    11.            float: left;
    12.            width: 300px;
    13.            height: 200px;
    14.       }
    15.      
    16.    style>
    17.  head>
    18.  <body>
    19.    <div class="c1">
    20.           <img src="" alt="">
    21.           <span class="text">
    22.           span>
    23.    div>
    24.  body>
    25. html>

    当一个元素被设置浮动后,将具有以下特性:

    1. 任何申明为float 的元素都会自动被设置为一个==行内块状元素==,具有行内块状元素的特性。

    2. 假如某个元素A是浮动的,如果A元素上一个元素也是浮动的,那么A元素会跟随在上一个元素的后边(如果一行放不下这两个元素,那么A元素会被挤到下一行);如果A元素上一个元素是标准流中的元素,那么A的相对垂直位置不会改变,也就是说A的顶部总是和上一个元素的底部对齐。

    3. 在标准浏览器中如果浮动元素a脱离了文档流,那么排在浮动元素a后的元素将会往回排列占据浮动元素a本来所处的位置,使页面布局产生变化。

    4. 如果水平方向上没有足够的空间容纳浮动元素,则转向下一行。

    5. 字围效果:文字内容会围绕在浮动元素周围。

    6. 浮动元素只能浮动至左侧或者右侧。

    7. 浮动元素只能影响排在其后面元素的布局,却无法影响出现在浮动元素之前的元素。

    3.7.1 清除浮动

    网页布局中,最常用的布局便是浮动模型。但是浮动了以后就会破坏原有的文档流,使页面产生不必要的改动,所以我们一般在浮动了以后,达到目的了,就紧接着清除浮动。

    在主流浏览器(如Firefox)下,如果没有设置height,元素的高度默认为auto,且其内容中有浮动元素时,在这种情况下元素的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响(甚至破坏)布局的情况,叫“浮动溢出”,为了防止这个现象的出现而进行的CSS处理操作,CSS里面叫“清除浮动”。

    1. HTML>
    2. <html lang="en-US">
    3.  <head>
    4.    <title>title>
    5.    <meta charset="utf8">
    6.    <style>
    7.        .box{
    8.            border: 1px solid red;
    9.       }
    10.        .c1{
    11.            width: 200px;
    12.            height: 200px;
    13.            background-color: #336699;
    14.            float: left;
    15.       }
    16.         .c2{
    17.            width: 200px;
    18.            height: 200px;
    19.            background-color: orange;
    20.            float: right;
    21.       }
    22.         .footer{
    23.             width: 100%;
    24.             height: 60px;
    25.             background-color: yellowgreen;
    26.         }
    27.    style>
    28.  head>
    29.  <body>
    30.    <div class="box">
    31.        <div class="c1">div>
    32.        <div class="c2">div>
    33.    div>
    34.   <div class="footer">div>
    35.  body>
    36. html>

    clear是css中专用于清除浮动的,常用的属性值有以下几个:

    描述
    left在左侧不允许浮动元素。
    right在右侧不允许浮动元素。
    both在左右两侧均不允许浮动元素。
    none默认值。允许浮动元素出现在两侧。
    1. HTML>
    2. <html lang="en-US">
    3.  <head>
    4.    <title>简单浮动title>
    5.    <style>
    6.        .c1{
    7.            width: 200px;
    8.            height: 200px;
    9.            background-color: indianred;
    10.            float: left;
    11.            /*float: right;*/
    12.       }
    13.        .c2{
    14.            width: 300px;
    15.            height: 200px;
    16.            background-color: orange;
    17.            float: left;
    18.            clear: left;
    19.            /*clear: both;*/
    20.       }
    21.        .c3{
    22.            width: 400px;
    23.            height: 200px;
    24.            background-color: lightblue;
    25.            float: left;
    26.       }
    27.    style>
    28.  head>
    29.  <body>
    30.   <div class="c1">div>
    31.   <div class="c2">div>
    32.   <div class="c3">div>
    33.  body>
    34. html>
    3.7.2 清除浮动解决父级塌陷问题:
    1.  .clearfix:after {                         /*在类名为“clearfix”的元素内最后面加入内容*/
    2.            content: ".";                    /*内容为“.”就是一个英文的句号而已。也可以不写。*/
    3.            display: block;                  /*加入的这个元素转换为块级元素。*/
    4.            clear: both;                     /*清除左右两边浮动。*/
    5.            visibility: hidden;              /*可见度设为隐藏。注意它和display:none;是有区别的。*/
    6.                                              /* visibility:hidden;仍然占据空间,只是看不到而已;*/
    7.            line-height: 0;                  /*行高为0;*/
    8.            height: 0;                       /*高度为0;*/
    9.            font-size:0;                     /*字体大小为0;*/
    10.       }
    11. 整段代码就相当于在浮动元素后面跟了个宽高为0的空div,然后设定它clear:both来达到清除浮动的效果。
    12. 之所以用它,是因为,你不必在html文件中写入大量无意义的空标签,又能清除浮动。
    13. <div class="head clearfix">div>

    此外,还给父元素加上溢出隐藏属性(overflow: hidden;)来进行清除浮动。

     

    3.8 position属性

    就像photoshop中的图层功能会把一整张图片分层一个个图层一样,网页布局中的每一个元素也可以看成是一个个类似图层的层模型。层布局模型就是把网页中的每一个元素看成是一层一层的,然后通过定位属性position对元素进行定位摆放,最终实现网页的布局。

    定位属性position有4个值,分别是静态定位(static)、相对定位(relative)、绝对定位(absolute)和固定定位(fixed)。默认就是static。所以我们略过。

    元素设置了定位以后,还要依靠4个方位属性来进行定位摆放。

    方位属性:

    1. /*
    2. top:让元素相对于指定目标的顶部偏移指定的距离。
    3. 例如: top:10px; 表示距离顶部10像素
    4. right:让元素相对于指定目标的右边偏移指定的距离。
    5. 例如: right:10px; 表示距离顶部10像素
    6. bottom:让元素相对于指定目标的底部偏移指定的距离。
    7. 例如: bottom:10px; 表示距离顶部10像素
    8. left:让元素相对于指定目标的左边偏移指定的距离。
    9. 例如: left:10px; 表示距离顶部10像素
    10. */
    • 相对定位(relative)

    相对定位就是在正常文档流中,元素相对于自身位置使用left、right、top、bottom属性进行定位偏移。

    1.      .c1{
    2.            width: 200px;
    3.            height: 200px;
    4.            background-color: indianred;
    5.       }
    6.        .c2{
    7.            width: 200px;
    8.            height: 200px;
    9.            background-color: orange;
    10.            position: relative;
    11.            left: 200px;
    12.            top: 200px;
    13.       }
    14.        .c3{
    15.            width: 200px;
    16.            height: 200px;
    17.            background-color: lightblue;
    18.       }
    • 绝对定位(absolute)

    绝对定位就是将元素完全脱离文档流,然后使用left、right、top、bottom属性相对于其最接近的一个具有==定位属性的父级元素==进行绝对定位,如果不存在这样的父级元素,则默认是相对于body元素进行绝对定位。

    轮播图案例:

    1. HTML>
    2. <html lang="en-US">
    3.  <head>
    4.        <meta charset="utf8">
    5.        <style>
    6.           *{
    7.                margin: 0;
    8.                padding: 0;
    9.           }
    10.            .lunbo{
    11.                width: 590px;
    12.                height: 470px;
    13.                border: 1px solid rebeccapurple;
    14.                margin: 100px auto;
    15.                position: relative;
    16.           }
    17.            .lunbo ul{
    18.                list-style: none;
    19.           }
    20.            .lunbo .img li{
    21.                position: absolute;
    22.                top: 0;
    23.                left: 0;
    24.           }
    25.            .lunbo .btn li{
    26.                font-size: 25px;
    27.                width: 40px;
    28.                height: 40px;
    29.                background-color: gray;
    30.                text-align: center;
    31.                line-height: 40px;
    32.                border-bottom-right-radius: 50%;
    33.                border-top-right-radius: 50%;
    34.                color: white;
    35.                position: absolute;
    36.                top: 50%;
    37.                margin-top: -20px;
    38.           }
    39.            .lunbo .left_btn{
    40.                left: 0;
    41.           }
    42.            .lunbo .right_btn{
    43.                right: 0;
    44.           }
    45.        style>
    46.  head>
    47.  <body>
    48.  <div class="lunbo">
    49.      <ul class="img">
    50.          <li><a href=""><img src="imgs/1.jpg" alt="">a>li>
    51.          <li><a href=""><img src="imgs/2.jpg" alt="">a>li>
    52.          <li><a href=""><img src="imgs/3.jpg" alt="">a>li>
    53.          <li><a href=""><img src="imgs/4.jpg" alt="">a>li>
    54.          <li><a href=""><img src="imgs/5.jpg" alt="">a>li>
    55.      ul>
    56.      <ul class="btn">
    57.          <li class="left_btn"> < li>
    58.          <li class="right_btn"> > li>
    59.      ul>
    60.  div>
    61.  body>
    62. html>
    • 固定定位(fixed)

    固定定位与绝对定位有点相似,但是固定定位是使用left、right、top、bottom属性相对于整个浏览器的窗口进行定位,而不再相对于某个HTML页面元素了,所以当元素使用了固定定位以后,就算页面的滚动条滚动了,固定定位的元素也不会变化位置。也就是说固定定位是相对于窗口的定位,不受文档流的影响了。

    1. HTML>
    2. <html lang="en-US">
    3.  <head>
    4.      <meta charset="utf8">
    5.    <style>
    6.        body{
    7.            margin: 0;
    8.       }
    9.        .c1{
    10.            width: 100%;
    11.            height: 2000px;
    12.            background-color: lightgray;
    13.       }
    14.        .c2{
    15.            width: 200px;
    16.            height: 60px;
    17.            background-color: yellowgreen;
    18.            text-align: center;
    19.            line-height: 60px;
    20.            position: fixed;
    21.            right: 20px;
    22.            bottom: 20px;
    23.       }
    24.        
    25.    style>
    26.  head>
    27.  <body>
    28.   <div class="c1">div>
    29.   <div class="c2">返回顶部div>
    30.  body>
    31. html>

  • 相关阅读:
    【算法题】2905. 找出满足差值条件的下标 II
    Toward Fast, Flexible, and Robust Low-Light Image Enhancement
    unity脚本_Vector3 c#
    安装vite报错:Cannot use import statement outside a module
    全球 IPv4 耗尽,下个月开始收费!
    记录一下做工厂的打印pdf程序
    爱尔兰公司改名要遵循一定的程序和规定
    MSP430F5529库函数定时器A——捕获实验
    路由器安全性怎么提高
    一次网络请求的流程
  • 原文地址:https://blog.csdn.net/wojiubugaosuni12/article/details/134482233