码迷,mamicode.com
首页 > Web开发 > 详细

前端基础之CSS

时间:2018-06-18 00:27:57      阅读:281      评论:0      收藏:0      [点我收藏+]

标签:auto   排列   epp   包含   有用   color   名称   new   type   

一、CSS语法

css语法包括两部分:选择器、和声明。例:

h1{color:red; front-size:14px}

技术分享图片

二、CSS语法的引入方式

1、行内样式:行内式是在标记的style属性中设定CSS样式。这种方式没有体现出CSS的优势,不推荐使用。

<div style="width:100px;height: 100px;background: chartreuse">111</div>

2、 嵌入式是将CSS样式集中写在网页的<head></head>标签对的<style></style>标签对中。格式如下:

<style>
        /*内嵌样式*/
        div{
            width: 100px;
            height: 100px;
            background:red;
        }
        h1{
            color:red;
            front-size:14px
        }
</style>

3、链接式

 将一个.css文件引入到HTML文件中,该行代码放在head标签上。

<link rel="stylesheet" href="1.css">

4、导入式

将一个独立的.css文件引入HTML文件中,导入式使用CSS规则引入外部CSS文件,<style>标记也是写在<head>标记中,这种导入方式是最推荐用的,使用的语法如下:

<style type="text/css">
 
          @import"mystyle.css"; 此处要注意.css文件的路径
 
</style> 

三、CSS选择器

1、基本选择器

技术分享图片

2、组合选择器

E,F   多元素选择器,同时匹配所有E元素或F元素,E和F之间用逗号分隔      :div,p { color:#f00; }
 
E F   后代元素选择器,匹配所有属于E元素后代的F元素,E和F之间用空格分隔 :li a { font-weight:bold;}
 
E > F   子元素选择器,匹配所有E元素的子元素F                   :div > p { color:#f00; }
  
E + F   毗邻元素选择器,匹配所有紧随E元素之后的同级元素F         :div + p { color:#f00; } 
 
E ~ F   普通兄弟选择器(以破折号分隔)                        :.div1 ~ p{font-size: 30px; }

3、属性选择器

E[att]          匹配所有具有att属性的E元素,不考虑它的值。(注意:E在此处可以省略。
                比如“[cheacked]”。以下同。)   p[title] { color:#f00; }
 
 
E[att=val]      匹配所有att属性等于“val”的E元素   div[class=”error”] { color:#f00; }
 
 
E[att~=val]     匹配所有att属性具有多个空格分隔的值、其中一个值等于“val”的E元素
                td[class~=”name”] { color:#f00; }
 
E[attr^=val]    匹配属性值以指定值开头的每个元素                    
                div[class^="test"]{background:#ffff00;}
 
E[attr$=val]    匹配属性值以指定值结尾的每个元素    div[class$="test"]{background:#ffff00;}
 
E[attr*=val]    匹配属性值中包含指定值的每个元素    div[class*="test"]{background:#ffff00;}

属性选择器相对用的较少。

4、伪类选择器

‘‘‘
        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代码; }

‘‘‘

 

例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>伪类选择器</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        /*未被点击时,显示的颜色,link*/
        a:link{
            color: aqua;
        }
        /*被点击过后,显示的颜色,visited*/
        a:visited{
            color: red;
        }
        /*鼠标停留时,显示的颜色,hover*/
        a:hover{
            color: chartreuse;
            /*cursor: pointer;*/
            cursor: wait;
            /*cursor 指的是悬浮在hover标签元素时的状态*/
            /*常用的还有 help:帮助*/
                        /*wait:等待*/
                        /*pointer:手指*/
                        /*default:默认*/
        }

        /*鼠标点击进去,但没有释放时的颜色,active*/
        a:active{
            color: blue;
        }
        /*当然以上伪类选择器,也可以其他的东西,不一定要颜色*/
    </style>
</head>
<body>
    <a class="box" href="http://www.baidu.com">百度</a>
    <div>
        <p></p>
    </div>
</body>
</html>

四、选择器的优先级

继承:

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

body{color:red;}       <p>helloyuan</p>

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

css的优先级:

  所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序。

样式表中的特殊性描述了不同规则的相对权重,它的基本规则是:


  1 内联样式表的权值最高 。                 style=""------------1000

  2 统计选择符中的ID属性个数。            #id --------------100

  3 统计选择符中的CLASS属性个数。    .class -------------10

  4 统计选择符中的HTML标签名个数。    p ---------------1

按这些规则将数字符串逐位相加,就得到最终的权重,然后在比较取舍时按照从左到右的顺序逐位比较。1、文内的样式优先级为1,0,0,0,所以始终高于外部定义。

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

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

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

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

 五、css属性操作

字体属性:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>css文字属性</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .box1{
            font-family:"新宋体" ,"Tahoma";
            /*font-family 字体类型浏览器默认的字体是微软雅黑,
            字体中有多个字体的时候,如果前面的字体没有就使用后面的字体*/
        }
        .box2{
            font-size: 50px;
                /*font-size   字体大小*/
           /*单位 px rem % em*/
           /*px   谷歌浏览器默认字体大小16px,最小是12px*/
           /*rem  相对于html(根标签)的字体大小*/
           /*em   等于父级的字体尺寸——相对于父级字体大小而言的*/
           /*%    相对于父容器中字体的%调整  这个要知道*/
        }
        .box3{
            font-size: 2rem;   /*浏览器默认16,这里就是32*/
            color: rgb(255,0,0);
         /*
        color  文字颜色
        关键字
            英文单词  red green
        16进制(0-9 a-f)
            #5544aa  #54a #abd456
            #dddddd  #ddd
        rgb(0-255,0-255,0-255)
            r red
            g green
            b blue
        rgba(0-255,0-255,0-255,0-1)
            r red
            g green
            b blue
            a alpha(透明度)
                0 完全透明
                1 完全不透明
        */
        }
        p{
            /*font-size: 2em;*/
            font-size: 200%;
            /*以上两种都一样,相对于父级的字体*/
        }
        .box4{
            font-weight: 700;
             /*
        font-weight 字体粗细
        关键字
            normal 默认字体
            lighter 较细
            bold 加粗   这个要知道
            bolder 很粗
        给值
            只能100-900的整百数
            400相当于正常的
            700相当于bold
        */
        }
        .box5{
            font-style: italic;
            /*
         font-style  字体类型
         normal 默认 文字正常
         italic  文字斜体(属性)
         oblique  文字斜体
     */

        }
    </style>
</head>
<body>
    <div class="box1"><b>hello world 001</b></div>
    <div class="box2"><em>hello world 002</em></div>
    <div class="box3">hello world 003</div>
    <div class="box4">hello world 004</div>
    <div class="box5">hello world 005</div>
    <div>
        <p>hello world 123</p>
    </div>
</body>
</html>
字体类型:frot-family:默认为微软雅黑
字体大小:frot-size:
                   单位:px:谷歌浏览器默认字体大小16px
                            rem:相对于html(根标签)的字体大小
                            em: 等于父级的字体尺寸
                            % :相对于父容器的字体

字体颜色:color:
                关键字
                英文单词  red green
                16进制(0-9 a-f)
                #5544aa  #54a #abd456
                rgb(0-255,0-255,0-255)  
                rgba(0-255,0-255,0-255,0-1)
                0-1:表示透明度
字体粗细:front-weight
字体风格:front-style             

文本属性:

text-indent           首行缩进(em)
line-height           行高  
letter-spacing      字距
word-spacing      词距

文本水平对齐方式
text-align            
       left 默认值 向左对其
       right
       center         

背景属性:

background:也可表示背景色(image属性可以表示背景图片)
background-color 背景色
background-image 背景图片
background-repeat 背景平铺
           repeat 平铺 默认
           repeat-x  平铺x
           repeat-y  平铺y
           np-repeat  不平铺
注意:只有背景图片的宽高小于被设置的元素的宽高,才会有平铺效果
background-position 背景位置 x轴 y轴
        x轴 left center right
        y轴 top center bottom
        如果只给一个值,默认在x轴,y轴默认center(50%)
        % px
background-size 背景大小
    单位:% px
    给一个值的时候,默认x轴,y轴默认auto auto会等比缩放
    cover 等比例缩放直到铺满x,y轴 可以铺满整个框 但是不一定能看到完整的图片
    contain 等比例缩放x轴或者y轴其中的一个方向 不一定铺满 但是可以看到整个图片

边框属性:

border-width
border-style (required)
border-color

一般书写方式:
border: 宽度 类型 颜色
例:
border:1px solid red

单独设置边框的边界:
border-top:
border-bottom:
bordet-right:
border-left:

 表格属性:

border-collapse: 
            collapse 边框合并,如果相邻的话,共用一个框
            separate 默认值,边框分开,不合并

列表属性:

list-style-type            设置列表项标志的类型,如黑圆点,白圆点等。
list-style-image           将图象设置为列表项标志。
list-style-position        设置列表中列表项标志的位置。
list-style                 简写属性。用于把所有用于列表的属性设置于一个声明中         
ul {
list-style-image: url(‘‘);
}

图片标志的引用方式

display属性:

一、display:none,隐藏某个元素

visibility:hidden可以隐藏某个元素,但隐藏的元素仍需占用与未隐藏之前一样的空间。也就是说,该元素虽然被隐藏了,但仍然会影响布局。

display:none可以隐藏某个元素,且隐藏的元素不会占用任何空间。也就是说,该元素不但被隐藏了,而且该元素原本占用的空间也会从页面布局中消失。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        p{
            display: none;
        }
    </style>
</head>
<body>
<p>1111111111</p>
</body>
</html>

display:block  将内联标签转换成块级标签

display:inline  将块级标签转换成内联标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        span{
            display: block;
        }
        div{
            display: inline;
        }
    </style>
</head>
<body>
<span>aaaaaaaaa</span>
<div>bbbbbbbbbb</div>
</body>
</html>

display:inline-block:一般可做列表布局,其中的类似于图片间的间隙小bug可以通过如下设置解决:

#outer{
            border: 3px dashed;
            word-spacing: -5px;
        }

盒子模型:margin、padding和border

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

padding··(内边距):   用于控制内容与边框之间的距离;

border····(边框):   围绕在内边距和内容外的边框。

content··(内容):   盒子的内容,显示文本和图像。

技术分享图片

margin属性:

#box div{
            width: 100px;
            height: 100px;
            background: blue;
            margin: 50px auto;
}
margin 外边距 元素与其他元素的距离(边框以外的距离) 一个值的时候: 代表四个方向值一样 上右下左(顺时针) 二个值的时候: 上下 右左 三个值的时候: 上 右左 下 四个值的时候: 上 右 下 左 margin: auto; 左右居中 垂直方向: margin-bottom,margin-top 取两者之间的较大值 水平方向: margin-left,margin-right 取两者的和

pandding(内边距):

div{
            width: 300px;
            height: 200px;
            border: 5px solid blue;
            padding: 50px 30px;
        }
        span{
            background: chartreuse;
            padding: 0 30px;
            /*对应span来说,pandding上下效果,左右有效果*/
        }

关于margin边界问题:

1、兄弟div:
上面div的margin-bottom和下面div的margin-top会塌陷,也就是会取上下两者margin里最大值作为显示值

2、父子div:
if 父级div中没有border,padding,inlinecontent,子级div的margin会一直向上找,直到找到某个标签包括border,padding,inline content中的其中一个,然后按此div 进行margin;

解决方案: overflow:hidden; 添加这个属性,可以解决

float属性:

先来了解一下block元素和inline元素在文档流中的排列方式。

  block元素通常被现实为独立的一块,独占一行,多个block元素会各自新起一行,默认block元素宽度自动填满其父元素宽度。block元素可以设置width、height、margin、padding属性;

  inline元素不会独占一行,多个相邻的行内元素会排列在同一行里,直到一行排列不下,才会新换一行,其宽度随元素的内容而变化。inline元素设置width、height属性无效

  • 常见的块级元素有 div、form、table、p、pre、h1~h5、dl、ol、ul 等。
  • 常见的内联元素有span、a、strong、em、label、input、select、textarea、img、br等

所谓的文档流,指的是元素排版布局过程中,元素会自动从左往右,从上往下的流式排列。

脱离文档流,也就是将元素从普通的布局排版中拿走,其他盒子在定位的时候,会当做脱离文档流的元素不存在而进行定位

      假如某个div元素A是浮动的,如果A元素上一个元素也是浮动的,那么A元素会跟随在上一个元素的后边(如果一行放不下这两个元素,那么A元素会被挤到下一行);如果A元素上一个元素是标准流中的元素,那么A的相对垂直位置不会改变,也就是说A的顶部总是和上一个元素的底部对齐。此外,浮动的框之后的block元素元素会认为这个框不存在,但其中的文本依然会为这个元素让出位置。 浮动的框之后的inline元素,会为这个框空出位置,然后按顺序排列。

例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
        }

        .r11{
            width: 300px;
            height: 100px;
            background-color: #7A77C8;
            /*float: left;*/
        }
        .r12{
            width: 200px;
            height: 200px;
            background-color: wheat;
            float: left;

        }
        .r13{
            width: 100px;
            height: 200px;
            background-color: darkgreen;
            float: left;
        }
    </style>
</head>
<body>

<div class="r11"></div>
<div class="r12"></div>
<div class="r13"></div>



</body>
</html>

盒子重叠现象:

 左右结构div盒子重叠现象,一般是由于相邻两个DIV一个使用浮动一个没有使用浮动。一个使用浮动一个没有导致DIV不是在同个“平面”上,但内容不会造成覆盖现象,只有DIV形成覆盖现象。

解决方案:要么全部float(浮动),要么都不浮动,要么设置margin

例一:在两div上面只有body的情况:这种情况,对未设置浮动的元素进行margin设置时无效,浮动的元素会跟着未浮动的元素一起移动,所以只能对已经浮动的元素进行margin设置

技术分享图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
        }

        .r11{
            width: 300px;
            height: 100px;
            background-color: #7A77C8;
            float: left;
            /*margin: 20px;*/
        }
        .r12{
            width: 200px;
            height: 200px;
            background-color: wheat;
            margin: 100px;
            /*float: left;*/

        }

    </style>
</head>
<body>
<div class="r11"></div>
<div class="r12"></div>
View Code

例二:在两div上还有其他元素:这种情况,不管是否浮动,都可以设置margin,来解决重叠现象

技术分享图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
        }
        .r13{
            width: 100px;
            height: 200px;
            background-color: darkgreen;
            /*float: left;*/
        }
        .r11{
            width: 300px;
            height: 100px;
            background-color: #7A77C8;
            float: left;
            /*margin: 20px;*/
        }
        .r12{
            width: 200px;
            height: 200px;
            background-color: wheat;
            margin: 100px;
            /*float: left;*/

        }

    </style>
</head>
<body>
<div class="r13"></div>
<div class="r11"></div>
<div class="r12"></div>




</body>
</html>
View Code

父级元素坍塌现象:

技术分享图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<style type="text/css">
         * {
             margin:0;padding:0;
         }
        .container{
            border:1px solid red;
            width:300px;
        }
        #box1{
            background-color:green;
            float:left;
            width:100px;
            height:100px;
        }
        #box2{
            background-color:deeppink;
            float:right;
            width:100px;
            height:100px;
        }
         #box3{
             background-color:pink;
             height:40px;
         }
</style>
</head>
<body>

        <div class="container">
                <div id="box1">box1 向左浮动</div>
                <div id="box2">box2 向右浮动</div>
        </div>
        <div id="box3">box3</div>
</body>
</body>
</html>
View Code

例子如上:.container和box3的布局是上下结构,上图发现box3跑到了上面,与.container产生了重叠,但文本内容没有发生覆盖,只有div发生覆盖现象。这个原因是因为第一个大盒子里的子元素使用了浮动,脱离了文档流,导致.container没有被撑开。box3认为.container没有高度(未被撑开),因此跑上去了。

解决方案:

1、给div设置高度:给父级div加上一个空的子div,对其设置高度

技术分享图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<style type="text/css">
         * {
             margin:0;padding:0;
         }
        .container{
            border:1px solid red;
            width:300px;
        }
        #box1{
            background-color:green;
            float:left;
            width:100px;
            height:100px;
        }
        #box2{
            background-color:deeppink;
            float:right;
            width:100px;
            height:100px;
        }
         #box3{
             background-color:pink;
             height:40px;
         }
</style>
</head>
<body>

        <div class="container">
                <div id="box1">box1 向左浮动</div>
                <div id="box2">box2 向右浮动</div>
                <div id="empty" style="height: 200px"></div>
        </div>
        <div id="box3">box3</div>
</body>
</body>
</html>
View Code

2、清除浮动:clear属性

clear : none | left | right | both

取值:
none : 默认值。允许两边都可以有浮动对象
left : 不允许左边有浮动对象
right : 不允许右边有浮动对象
both : 不允许有浮动对象

但是需要注意的是:clear属性只会对元素本身起作用,而不会影响其他元素。

这种方法父级还是坍缩的,但是保证父级同居的文本正常

技术分享图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<style type="text/css">
         * {
             margin:0;padding:0;
         }
        .container{
            border:1px solid red;
            width:300px;
        }
        #box1{
            background-color:green;
            float:left;
            width:100px;
            height:100px;

        }
        #box2{
            background-color:deeppink;
            float:right;
            width:100px;
            height:100px;
        }
         #box3{
             background-color:pink;
             height:40px;
             clear: both;   //对box3进行浮动清除
         }
</style>
</head>
<body>

        <div class="container">
                <div id="box1">box1 向左浮动</div>
                <div id="box2">box2 向右浮动</div>
</div>-->
        </div>
        <div id="box3">box3</div>
</body>
</body>
</html>
View Code

3、overflow:hidden:直接对坍缩的父级元素进行浮动清除

overflow:hidden的含义是超出的部分要裁切隐藏,float的元素虽然不在普通流中,但是他是浮动在普通流之上的,可以把普通流元素+浮动元素想象成一个立方体。如果没有明确设定包含容器高度的情况下,它要计算内容的全部高度才能确定在什么位置hidden,这样浮动元素的高度就要被计算进去。这样包含容器就会被撑开,清除浮动。

技术分享图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<style type="text/css">
         * {
             margin:0;padding:0;
         }
        .container{
            border:1px solid red;
            width:300px;
            overflow: hidden;
        }
        #box1{
            background-color:green;
            float:left;
            width:100px;
            height:100px;

        }
        #box2{
            background-color:deeppink;
            float:right;
            width:100px;
            height:100px;
        }
         #box3{
             background-color:pink;
             height:40px;
         }
</style>
</head>
<body>

        <div class="container">
                <div id="box1">box1 向左浮动</div>
                <div id="box2">box2 向右浮动</div>
</div>-->
        </div>
        <div id="box3">box3</div>
</body>
</body>
</html>
View Code

position属性:定位属性

position 定位
static 静态定位(没有定位),默认,使用方向词完全无意义。
relative 相对定位,相对于正常位置(原来没定位之前的位置)进行定位,相对于自己原来的位置,
     位置没有脱离文档流,原来位置在被占着。还要占据位置
absolute 绝对定位,没有占据位置,使元素完全脱离文档流
没有定位父级,则相对于整个文档发生偏移
参考最近非static定位的父级进行定位
fixed 固定定位,相对于浏览器窗口进行定位,对象脱离文档流
方向词
left
right
top
bottom
z-index 规定定位的层级(默认0)
值:number 值越大层级越高

总结:参照物用相对定位,子元素用绝对定位,并且保证相对定位参照物不会偏移即可。
技术分享图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .box1{
            width: 100px;
            height: 100px;
            background: blue;
            position: absolute;
            left: 30px;

        }
        .box2{
            width: 200px;
            height: 200px;
            background: green;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    <div class="box2"></div>
</body>
</html>
View Code

 注意点: 一个元素若设置了 position:absolute | fixed; 则该元素就不能设置float。这 是一个常识性的知识点,因为这是两个不同的流,一个是浮动流,另一个是“定位流”。

 

 

前端基础之CSS

标签:auto   排列   epp   包含   有用   color   名称   new   type   

原文地址:https://www.cnblogs.com/wallacewang/p/9173157.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!