• 前端之css


    一, scc介绍

      css: 层叠样式表,css的作用是给HTML页面标签添加各种样式,定义网页的显示效果,简单一句话css就是将网页内容和显示样式进行分离,提高了显示功能.

    二, css的选择器

      1.标签选择器

        标签选择器可以选中所有的标签元素,比如div,ul, li, p等等,不管标签藏得多深,都能选中,选中的是所有的,而不是某一个,所以说"共性"而不是"特性".

    body{
        color:gray;
        font-size: 12px;
    }
    /*标签选择器*/
    p{
        color: red;
        font-size: 20px;
    }
    span{
        color: yellow;
    }
    

      2.类选择器

        "."加选中class名称

        所谓类:就是class,class与id非常相似,任何的标签都可以加类,但是类是可以重复的,属于归类,同一个标签中可以携带多个类,用空格隔开

        类的使用,能够解决前端工程师的css水平到底多牛逼

    为下面的段落设置相关属性:
    段落一    绿色、40px
    段落二    绿色、下划线
    段落二    40px、下划线
    

      

    # css样式
    .lv{
         color: green;
     }
     .big{
         font-size: 40px;
     }
     .line{
        text-decoration: underline;
     }
    
    # HTML内容
    <!-- 公共类    共有的属性 -->
         <div>
             <p class="lv big">段落1</p>
             <p class="lv line">段落2</p>
             <p class="line big">段落3</p>
         </div>
    

      总结: 不要试图用一个类将我们的页面写完.这个标签要携带多个类,共同设置样式,每个类要尽可能的小,有公共的概念,能够让更多的标签去使用.

      3.id选择器

        # 加选中id名称  同一个页面中id不能重复,任何的标签都可以设置id, id命名规范要以字母下划线,数字,大小写严格区分 aa和AA是两个不一样的属性值

    #box{
        background:green;
    }
                
    #s1{
        color: red;
    }
    
    #s2{
        font-size: 30px;
    }
    

      介绍了以上的选择器,有的人会问到底是用class好还是id选择器好?,答案是尽可能的取用class,除非一些特殊情况,原因是id一般使用在js的,也就是说js是通过id来获取标签.

      4.后代选择器

        使用空格表示后代选择器,顾名思义,父元素的后代(包括儿子,孙子,子子孙孙之内)

    .container p{
        color: red;        
    }
    .container .item p{
        color: yellow;
    }
    

      5.子代选择器

        使用>表示子代选择器,比如div>p,仅仅表示的是当前div元素中的子代(不包含孙子...)元素p.

    .container>p{
        color: yellowgreen;
    }
    

      6.毗邻选择器

    /*选择所有紧接着<div>元素之后的<p>元素*/
    div+p {
      margin: 5px;
    }
    

      7.弟弟选择器

    /*i1后面所有的兄弟p标签*/
    #i1~p {
      border: 2px solid royalblue;
    }
    

      8.属性选择器

    <style>
        /*根据属性查找*/
        /*[for]{*/
        /*color: red;*/
        /*}*/
    
        /*找到for属性的等于username的元素 字体颜色设为红色*/
        /*[for='username']{*/
        /*color: yellow;*/
        /*}*/
    
        /*以....开头  ^*/
        /*[for^='user']{*/
        /*color: #008000;*/
        /*}*/
    
        /*以....结尾   $*/
        /*[for$='name']{*/
        /*color: red;*/
        /*}*/
    
        /*包含某元素的标签*/
        /*[for*="erna"]{*/
        /*color: #00BFFF;*/
        /*}*/
    
        /*指定标签的属性*/
        label[for='username'] {
            color: green;
        }
    
        input[type='text'] {
            background: red;
        }
    </style>
    

      9.伪类选择器

        伪类选择器一般会用在超链接a标签中,使用a标签的伪类选择器,我们一定要遵循"爱恨准则"。伪类一般情况下都是使用:开头。  

    :first-child  第一个子元素
    :last-child  最后一个子元素
    :nth-child()  选中第n个元素
            特殊值:
                    n  第n个  n的范围是0到正无穷
                    2n 或 even  表示选中偶数位的元素
                    2n+1 或 odd  表示选中奇数位的元素
    /*没有被访问的a标签的样式*/
    .box ul li.item1 a:link{
        color: #666;
    }
    /*访问过后的a标签的样式*/
    .box ul li.item2 a:visited{
        color: red;
    }
    /*鼠标悬停时a标签的样式*/
    .box ul li.item3 a:hover{
        color: green;
    }
    /*鼠标摁住的时候a标签的样式*/
    .box ul li.item4 a:active{
        color: yellowgreen;
    }
    
    <div class="box">
        <ul>
            <li class="item1"><a href="#">没有被访问</a></li>
            <li class="item2"><a href="">访问过后</a></li>
            <li class="item3"><a href="">鼠标悬停</a></li>
            <li class="item4"><a href="">鼠标摁住</a></li>
        </ul>
    </div>
    

      

    四. css的继承性和层叠性

      1. 继承性

        面向对象都会存在继承的情况,在面向对象语言中,继承的特点:继承了父类的属性和方法,css就是设置属性的,不会牵扯到方法.

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

        记住:有一些属性是可以继承下来的: color, font_*,text_*,line_*.主要是文本级的标签元素. 像是一些盒子元素属性,定位的元素(浮动, 绝对定位,固定定位)不能继承.

      2.层叠性:

        层叠性:权重大的标签覆盖掉了权重小的标签,说白了,就是被干掉了

        权重:谁的权重大,浏览器就会显示谁的属性  

    /*1  0  0 */显示红色
    #box{
        color: red; 
    }
    
    /*0  1  0*/
    .container{
        color: yellow;
    }
    
    /*0  0  1*/
    p{
        color: purple;
    }
    
    <p class="container" id="box">啊啊啊</p>

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

      先看HTML代码结构:

    <div id='box1' class="wrap1">
        <div id="box2" class="wrap2">
            <div id="box3" class="wrap3">
                <p>再来猜猜我是什么颜色?</p>
            </div>
        </div>
    </div>
    

      再看看css代码:

    #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:那么就是"就近原则",谁描述的近,就显示谁的属性,所谓描述的近,就是选中到内层的距离越近

      选择器的优先级

       HSL值 HSLA值:

    H 色相(0-360)
    S 饱和度,颜色的浓度,0%-100%
    L 亮度,颜色的亮度 0%-100%

      css背景(background)

      CSS 可以添加背景颜色和背景图片,以及来进行图片设置。

      

      背景图片(image)

    语法:
       background-image : none | url (url) 
    
    参数
    
        none :  无背景图(默认的)
        url :  使用绝对或相对地址指定背景图像 
    
        background-image 属性允许指定一个图片展示在背景中(只有CSS3才可以多背景)可以和 background-color 连用。 如果图片不重复地话,图片覆盖不到地地方都会被背景色填充。 如果有背景图片平铺,则会覆盖背景颜色。
    
        小技巧:  我们提倡 背景图片后面的地址,url不要加引号    

      背景平铺(repeat)

    语法:
        background-repeat : repeat | no-repeat | repeat-x | repeat-y 
    
    参数:
        repeat :  背景图像在纵向和横向上平铺(默认的)
    
        no-repeat :  背景图像不平铺
    
        repeat-x :  背景图像在横向上平铺
        
        repeat-y :  背景图像在纵向平铺 
        
        设置背景图片时,默认把图片在水平和垂直方向平铺以铺满整个元素。
    
        repeat-x :  背景图像在横向上平铺  
    
    
    
        repeat-y :  背景图像在纵向平铺 

    设置背景图片时,默认把图片在水平和垂直方向平铺以铺满整个元素。

      背景位置(position)

    语法
        background-position : length || length
        background-position : position || position
    
    参数
        length :  百分数 | 由浮点数字和单位标识符组成的长度值。请参阅长度单位 
        position :  top | center | bottom | left | center | right 
    
    说明: 
    
        设置或检索对象的背景图像位置。必须先指定background-image属性。默认值为:(0% 0%)。
        如果只指定了一个值,该值将用于横坐标。纵坐标将默认为50%。第二个值将用于纵坐标。
    
    注意:
    
        1. position 后面是x坐标和y坐标。 可以使用方位名词或者 精确单位。
        2. 如果和精确单位和方位名字混合使用,则必须是x坐标在前,y坐标后面。比如 background-position: 15px top;   则 15px 一定是  x坐标   top是 y坐标。
    
        实际工作用的最多的,就是背景图片居中对齐了。

      背景附着

    语法:
        background-attachment : scroll | fixed 
    
    参数:
        scroll :  背景图像是随对象内容滚动
        fixed :  背景图像固定 
    
    说明: 
    
        设置或检索背景图像是随对象内容滚动还是固定的。

      背景简写

    background属性的值的书写顺序官方并没有强制标准的。为了可读性,建议大家如下写:
    
    background:背景颜色 背景图片地址 背景平铺 背景滚动 背景位置
    
    background: transparent url(image.jpg) repeat-y  scroll 50% 0 ;

      背景透明(css3)

    CSS3支持背景半透明的写法语法格式是:
    
        background: rgba(0,0,0,0.3);
    
    最后一个参数是alpha 透明度  取值范围 0~1之间
    
     注意:  背景半透明是指盒子背景半透明, 盒子里面的内容不收影响。

     五.盒模型

      在css中, "box model"这一术语中是用来设计和布局时使用,然后在网页中基本上都会显示一些方方正正的盒子,我们把这种盒子称为盒模型,盒模型有两种:标准盒子模型和IE盒子模型,咱们重点讲标准模型.

       盒模型属性:

            内容的宽度  height: 内容的高度  padding: 内边距,边框到内容的距离   border: 边框,盒子的宽度  margin: 外边框,盒子边框到附近最近盒子的距离

      1.padding(内边距)

      padding:就是内边距的意思,他是边框到内容之间的距离,另外padding的区域是有背景颜色的,并且背景颜色和内容的颜色一样.也就是说background-color这个属性将填充所有的border以内的区域,

      padding的设置:padding有四个方向,分别描述4个方向的padding,描述的方法有两种:

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

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

      margin-top:上外边距,设置一个正值,元素回向下移动。margin-right:默认情况下不会产生任何效果。margin-bottom:下外边距,设置一个正值,其下边的元素会向下移动。margin-left:左外边距,设置一个正值,元素会向右移动。

      写综合属性,用空格隔开

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

      注意:一些标签默认有padding.比如ul标签,有默认的padding-left值.我们一般在做站的时候,是要清除页面标签中默认的padding和margin,以便我们更好的去调整元素的位置,我们现在可以使用通用符选择器.

    *{
    padding: 0;
    margin: 0;}
    

      2.边框(border)

      border: 边框的意思,描述盒子的边框  边框有三个要素: 粗细  线型样式  颜色

    border: solid;
    

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

    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条语句相当于border: 10px solid red;

      另外还可以这样:

    border-top: 10px solid red;
    border-right: 10px solid red;
    border-bottom: 10px solid red;
    border-left: 10px solid red;
    
    
    注意: border:none;
    border: 0;
    表示border没有设置样式
    

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

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

    六.块级元素和行内元素

      从HTML的角度来讲,标签分为:

        文本级标签: p, span, a, b, i, u, em.

        容器级标签: div, h系列, li, dt, dd.

      为什么说p是文本级标签, 因为p里面只能放文字&图片&表单元素,p里面不能放h和ul,p里面也不能放p.

      现在从css的角度讲,css的分类和上面的很像,就p不一样.

        行内元素:除了p之外所有的文本级标签都是行内标签,p是文本级的,但是是个块级元素.

        块级元素:所有的容器标签都是块级元素,还有p标签.

      块级元素和行内元素的相互转换:我们可以通过display属性将块级元素和行内元素进行相互转换.display即"显示模式"

      块级元素转换为行内元素:

    display: inline;

      那么,这个标签将立即变为行内元素,此时它和一个span无异。inline就是“行内”。也就是说:

      此时这个div不能设置宽度、高度,这个div可以和别人并排了,

      行内元素转换为块级元素:同样的道理,一旦给一个行内元素设置:

    display: block;
    

      那么,这个标签将立即变为块级元素,此时,他和一个div无异,block是"块"的意思,也就是说:此时的这个span1可以设置宽度和高度,必须是霸占一行了,别人无法和他并排,如果不设置宽度,将充满父亲.

      标准流里面的限制非常多,导致很多页面效果无法实现。如果我们现在就要并排、并且就要设置宽高,那该怎么办呢?办法是:移民!脱离标准流!css中一共有三种手段,使一个元素脱离标准文档流:浮动,绝对定位, 固定定位.

    七.浮动

      浮动是css里面布局最多的一个属性,也是很重要的一个属性。

      float:表示浮动的意思。属性值:none: 表示不浮动,默认,left: 表示左浮动. right:表示右

      html结构:

    <div class="box1"></div>
     <div class="box2"></div>
     <span>攀少卡盟</span>
    

      css样式

    .box1 {
         300px;
        height: 300px;
        background-color: red;
        float: left;
    }
    
    .box2 {
         400px;
        height: 400px;
        background-color: green;
        float: right;
    }
    
    span {
        float: left;
         100px;
        height: 200px;
        background-color: yellow;
    }

      我们会发现,三个元素并排显示,.box1和span因为是左浮动,紧挨在一起,这种现象贴边。.box2盒子因为右浮动,所以紧靠着右边。

      那么浮动如果想学好,一定要知道它的四大特性:

              1.浮动的元素脱标

              2.浮动的元素相互贴靠

              3.浮动的元素由"字围"效果

              4.收缩的效果

      1.浮动元素脱标

      脱标:就是脱离了标准文档流

      在这里补充一下,什么是标准文档流?

      宏观的讲,我们的web页面和ps等设计软件有本质的区别,web 网页的制作,是个“流”,从上而下 ,像 “织毛衣”。而设计软件 ,想往哪里画东西,就去哪里画。

      标准文档流有以下特性:

      空白折叠现象

      高矮不齐,底边对齐

      自动换行写,一行写不了,换行写

      HTML结构

    <div class="box1">小红</div>
    <div class="box2">小黄</div>
    <span>小姐姐</span>
    <span>小姐姐</span>

      css样式

    .box1 {
         200px;
        height: 200px;
        background-color: red;
        float: left;
    }
    
    .box2 {
         400px;
        height: 400px;
        background-color: yellow;
    }
    
    span {
        background-color: green;
        float: left;
         300px;
        height: 50px;
    }

      效果:红色盒子压盖住了黄色的盒子,一个行内的span标签竟然能够设置宽高了。

      原因1:小红设置了浮动,小黄没有设置浮动,小红脱离了标准文档流,其实就是它不在页面中占位置了,此时浏览器认为小黄是标准文档流中的第一个盒子。所以就渲染到了页面中的第一个位置上。

      原因2:所有的标签一旦设置浮动,就能够并排,并且都不区分行内、块状元素,都能够设置宽高。

      2.浮动元素互相贴靠

      HTML结构

    <div class="box1">1</div>
    <div class="box2">2</div>
    <div class="box3">3</div>
    

      css样式

    .box1 {
         100px;
        height: 400px;
        float: left;
        background-color: red;
    }
    
    .box2 {
         150px;
        height: 450px;
        float: left;
        background-color: yellow;
    }
    
    .box3 {
         300px;
        height: 300px;
        float: left;
        background-color: green;
    }

      效果发现:

          如果父元素有足够的空间,那么3哥紧靠着2哥,2哥紧靠着1哥,1哥靠着边。

          如果没有足够的空间,那么3哥就会自己靠边,如果再没有足够的空间靠着1哥,2哥也会往边靠。

      3.浮动元素字围效果

      HTML结构:

    <div>
        <img src="https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2121206715,2955288754&fm=26&gp=0.jpg" alt="">
    </div>
    <p>
        123老男孩懒男孩
    </p>
    

      css样式

    * {
        padding: 0;
        margin: 0;
    }
    
    div {
        float: left;
    }
    
    p {
        background-color: #666;

      效果发现:

      所谓字围效果,当div浮动,p不浮动,div遮盖住了p,div的层级提高,但是p中的文字不会被遮盖,此时就形成了字围效果。

      4.浮动元素紧凑效果

      收缩:一个浮动元素。如果没有设置width,那么就自动收缩为文字的宽度(这点跟行内元素很像)

      html结构

    <div>
         bgon
    </div>
    

      css样式

    div{
        float: left;
        background-color: red;
    }
    

      一定要谨记:关于浮动,我们初期一定要遵循一个原则,永远不是一个盒子单独浮动,要浮动就要一起浮动。另外,有浮动,一定要清除浮动。

      5.清除浮动

      伪元素清除法:给浮动子元素的父盒子,也就是不浮动元素,添加一个clearfix的类,然后设置

    .clearfix:after {
        /*必须要写这三句话*/
        content: '.';
        clear: both;
        display: block;
    }
    

      HTML结构

    <div class="box clearfix">
        <div>111</div>
        <div>222</div>
        <div>333</div>
    </div>
    <div class="box2"></div>
    

      css样式:

    * {
        padding: 0;
        margin: 0;
    }
    
    .clearfix:after {
        content: '.';
        clear: both;
        display: block;
        height: 0;
        visibility: hidden;
    }
    
    .box div {
        float: left;
         100px;
        height: 40px;
        background-color: red;
    }
    
    .box2 {
         350px;
        height: 100px;
        background-color: yellow;
    }

    八.overflow 溢出属性

      visible: 默认值,内容不会被修剪,会呈现在元素框之外

      hidden: 内容会被修剪,并且其余内容是不可见的

      scroll: 内容会被修剪,但是浏览器会显示滚动条以便查看其余内容

      auto: 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容

      inherit:规定应该从父元素继承overflow属性的值

    九.margin的用法

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

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

      使用margin:0 auto;注意点:

          1.使用margin: 0 auto;水平居中盒子必须有width,要有明确width

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

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

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

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

    十. 文本属性

      text-align属性规定元素中的文本的水平对齐方式

      center: 把文本排列到中间, left: 把文本排列到左边 right: 把文本排列在右边  justify:实现两边对齐文本效果

      text-indent 属性规定了元素首行缩进距离

      text-decoration 属性规定文本修饰的样式

      属性值: none : 默认   underline: 下划线    overline: 定义文本上的一条线, line-through: 定义穿过文本下的一条线.

      text-shadow:阴影, 水平方向偏移量  垂直方向偏移量 模糊度  阴影颜色;

    text-shadow: 3px 3px 6px #FF0000;

    十一. 定位

      定位有三种:1.相对定位

            2.绝对定位

            3.固定定位

      1.相对定位(relative)

      相对定位是相对于该元素在文档流中的原始位置,以自己原始位置为参照物,更有趣的是,即使设定了元素的相对定位和偏移量,元素还占有原来的位置,即占据文档流空间

      2.绝对定位(absolute)

      定义: 设置为绝对定位的元素从文档流中完全删除,并相对于最近已定位祖先元素定位,如果元素没有已定位的祖先元素,那么它的位置相对于最初的包含块(即body元素)。元素原先在正常文档流中所占的空间会关闭,就好像该元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。

    重点:如果父级设置了position属性,例如position:relative;,那么子元素就会以父级的左上角为原始点进行定位。这样能很好的解决自适应网站的标签偏离问题,即父级为自适应的,那我子元素就设置position:absolute;父元素设置position:relative;,然后Top、Right、Bottom、Left用百分比宽度表示。

      3.固定定位

      fixed:对象脱离正常文档流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。而其层叠通过z-index属性 定义。 注意点: 一个元素若设置了 position:absolute | fixed; 则该元素就不能设置float。这 是一个常识性的知识点,因为这是两个不同的流,一个是浮动流,另一个是“定位流”。但是 relative 却可以。因为它原本所占的空间仍然占据文档流。在理论上,被设置为fixed的元素会被定位于浏览器窗口的一个指定坐标,不论窗口是否滚动,它都会固定在这个位置。

    生前无需久睡,死后自会长眠,努力解决生活中遇到的各种问题,不畏将来,勇敢面对,加油,你是最胖的,哈哈哈
  • 相关阅读:
    js == 和 === 判断原理
    react 渲染原理
    常见的HTTP状态码
    类数组和数组的区别是什么?
    如何判断一个变量是不是数组?
    typeof 是否正确判断类型? instanceof呢? instanceof 的实现原理是什么?
    前端 js data数组转tree数据结构
    Echarts 基础学习
    Vue CLI 4.0 项目搭建
    Echarts Demo
  • 原文地址:https://www.cnblogs.com/panshao51km-cn/p/11483349.html
Copyright © 2020-2023  润新知