CSS

css 是英文 Cascading Style Sheets的缩写,称为层叠样式表,用于控制页面,进行美化。

一 css的四种引入方式

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

<body>
    <p style="background-color: green;color: red">行内是</p>
</body>

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

<head>    
<style type="text/css">
        p{background-color: greenyellow;
            color: red;}
    </style>
</head>
<body>
    <p>嵌入是</p>
</body>

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

   ss.css 模块名
.ld{
    background-color: red;
    color: yellow;
}
----------------------------------
 <style type="text/css">
        @import "ss.css";
 </style>
<body>
<ld>导入时</ld>
</body>

4.链接式
            也是将一个.css文件引入到HTML文件中    <link href="mystyle.css" rel="stylesheet" type="text/css"/>

cs.css  模块名

a{
background-color: yellow;
color: red;
}

-----------------------
<
head> <link href="cs.css" rel="stylesheet"> </head> <body> <a>连接时</a> </body>

注意:

      导入式会在整个网页装载完后再装载CSS文件,因此这就导致了一个问题,如果网页比较大则会儿出现先显示无样式的页面,闪烁一下之后,再出现网页的样式。 这是导入式固有的一个缺陷。使用链接式时与导入式不同的是它会以网页文件主体装载前装载CSS文件,因此显示出来的网页从一开始就是带样式的效果的,它不 会象导入式那样先显示无样式的网页,然后再显示有样式的网页,这是链接式的优点。

 

二 css的选择器(Selector)

“选择器”指明了{}中的“样式”的作用对象,也就是“样式”作用于网页中的哪些元素

1 基础选择器:

* :                                 通用元素选择器,匹配任何元素                                * { margin:0; padding:0; }

<head>
 *{
            background-color: green;
        }
</head>

E  :                                 标签选择器,匹配所有使用E标签的元素p { color:green; }

<head>
div{
            height:300px;
            background-color:beige;
            float: left;70%;
        }
</head>
<body>
<div>标签选择器</div>
</body>

.info 和E.info:                     class选择器,匹配所有class属性中包含info的元素        .info { background:#ff0; }    p.info { background:blue; }

<head>
   .cc{
            background-color: aqua;
        } 
</head>
<body>
<div class="cc">class选择器</div>
</body

#info 和E#info                    id选择器,   匹配所有id属性等于footer的元素                #info { background:#ff0; }   p#info { background:#ff0; }

#ss{
    background-color: greenyellow;
}

<div id="ss">id选择器</div>

2 组合选择器

           E,F               多元素选择器,同时匹配所有E元素或F元素,E和F之间用逗号分隔             Div,p { color:#f00; }

           E F               后代元素选择器,匹配所有属于E元素后代的F元素,E和F之间用空格分隔    #nav li { display:inline; }    li a { font-weight:bold; }

          E > F             子元素选择器,匹配所有E元素的子元素F                                            div > strong { color:#f00; }

          E + F            毗邻元素选择器,匹配所有紧随E元素之后的同级元素F                            p + p { color:#f00; }  

<head>
    <meta charset="UTF-8">
    <title>哈哈</title>
    <style>
    
        .a p{font-size: 30px;
        color: aqua}
        .a>p{font-size: 30px;
        color: rebeccapurple}
        .c + p{
            background-color: blanchedalmond;
            color: chocolate;
        }

    </style>
</head>
<body>

    <div class="a">


        <p>儿子</p>
        <div class="a1">儿子

            <p>孙子</p>

            <p>sadsadsa</p>
        </div>

        <div class="c" >兄弟1</div>
        <p>兄弟2</p>


    </div>


</body>

 注意嵌套规则

  1. 块级元素可以包含内联元素或某些块级元素,但内联元素不能包含块级元素,它只能包含其它内联元素。
  2. 块级元素不能放在p里面
  3. 有几个特殊的块级元素只能包含内联元素,不能包含块级元素。如h1,h2,h3,h4,h5,h6,p,dt
  4. li内可以包含div
  5. 块级元素与块级元素并列、内联元素与内联元素并列。(错误的:<div><h2></h2><span></span></div>)

<head>
<style>
    [kkkk]{
        color:#ff0033;
    }
        .qq>div{
            color: #ffff33;
        }

 </style>

<body>

<div class="qq">
    111111111
    <p class="dd">222222222
        <div>333333333</div>
    </p>
</div>
-------------------------------
<div kkkk="ccc">4444
    <p>55555</p>
</div>
    <p kkkk="ddd">dddd
    <p>ppppppp</p></p>
</body>

3 属性选择器

          E[att]            匹配所有具有att属性的E元素,不考虑它的值。

                             (注意:E在此处可以省略,比如“[cheacked]”。以下同。)                 p[title] { color:#f00; }

  

        [shuxing]{
           font-size: 40px;
           color: greenyellow;
       }
 <div shuxing="属性名">属性名字</div>

         E[att=val]     匹配所有att属性等于“val”的E元素                                                   div[class=”error”] { color:#f00; }

        [shuxing='boy']{
           font-size: 40px;
           color: firebrick;
       }
    <div shuxing="boy">属性名字</div>

        E[att~=val]    匹配所有att属性具有多个空格分隔的值、其中一个值等于“val”的E元素      td[class~=”name”] { color:#f00; }

       [shuxing~='ccc'] {
           font-size: 40px;
           color: red;
       }
       <div shuxing="ccc">属性值</div>

        E[att|=val]    匹配所有att属性具有多个连字号分隔(hyphen-separated)的值、其中一个值以“val”开头的E元素,主要用于lang属性,

                            比如“en”、“en-us”、“en-gb”等等                                                    p[lang|=en] { color:#f00; }

    [shuxing|='aa'] {
           font-size: 40px;
           color: black;}
    <p shuxing="aa"> saaaaaaaaaa</p>


        p[shuxing|="en"]{
            color: #ffff33;
        }
        <p shuxing="en-us">匹配一下</p>

        E[attr^=val]    匹配属性值以指定值开头的每个元素                       div[class^="test"]{background:#ffff00;}

        E[attr$=val]    匹配属性值以指定值结尾的每个元素                       div[class$="test"]{background:#ffff00;}

        E[attr*=val]    匹配属性值中包含指定值的每个元素                       div[class*="test"]{background:#ffff00;}

        [shuxing^='te']{
            background-color: chocolate;
        }
        [shuxing$='ss']{
            background-color: firebrick;
            /*font-size: 60px;*/
        }
        [shuxing*='w']{
            background-color: aqua;
        }
    <div shuxing="ccddd">指定开头</div>
    <div shuxing="aaaass">指定结尾</div>
    <div shuxing="qwe">包含指定元素</div>

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

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

        p{
            background-color: #ffff33;
            color: #000fff;
        }
        p:before{
            content:"开始";
            color: #ff0033;
        }
        p:after{
            content:"结束";
            color:#ffffff;
        }
    <p>开心</p>
    <p>哈哈</p>

 4 伪类选择器:

    伪类选择器: 专用于控制链接的显示效果,伪类选择器:

a:link(没有接触过的链接),用于定义了链接的常规状态。

a:hover(鼠标放在链接上的状态),用于产生视觉效果。

a:visited(访问过的链接),用于阅读文章,能清楚的判断已经访问过的链接。

a:active(在链接上按下鼠标时的状态),用于表现鼠标按下时的链接状态。

     伪类选择器 : 伪类指的是标签的不同状态:

            a ==> 点过状态 没有点过的状态 鼠标悬浮状态 激活状态

a:link {color: #F00} /* 未访问的链接 */

a:visited {color: #FF0} /* 已访问的链接 */

a:hover {color: #F03} /* 鼠标移动到链接上 */

a:active {color: #000FFF} /* 选定的链接 */ 格式: 标签:伪类名称{ css代码; }

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>伪类选择器</title>
    <style type="text/css">
        a:link {color: #f00}
        a:visited{
            color: #ffff33
        }
        a:hover{color: #ff0033}
        a:active{
            color: #000fff;}

    </style>
</head>
<body>
    <a href="s1.html">hello-world</a>
</body>
</html>

三  CSS的常用属性

1  颜色属性:

    <div style="color: red">hello-world</div>
    <div style="color: #ffff33">hello-word</div>
    <div style="color:rgb(255,0,255)">hello-world</div>
    <div style="color:rgba(255,0,0,0.5)">hwllo-word</div>

2  字体属性:

font-size: 20px/50%/larger

font-family:'Lucida Bright'

font-weight: lighter/bold/border/

<h1 style="font-style: oblique">老男孩</h1>

    <h1 style="font-size: 20px">字体</h1>
    <h2 style="font-size: larger">字体</h2>
    <h3 style="font-size: 50%">字体</h3>
    <h4 style="font-family:'华文宋体'">字体</h4>
    <h5 style="font-weight:lighter">字体</h5>
    <h6 style="font-weight: bold">字体</h6>

3  背景属性:

">background-image: url('1.jpg');

background-repeat: no-repeat;(repeat:平铺满)

background-position: right top(20px 20px);(横向:left center right)(纵向:top center bottom)

      简写:<body style="background: 20px 20px no-repeat #ff4 url('1.jpg')">

              <div style=" 300px;height: 300px;background: 20px 20px no-repeat #ff4 url('1.jpg')">

     注意:如果讲背景属性加在body上,要记得给body加上一个height,否则结果异常,这是因为body为空,无法撑起背景图片,另外,如果此时要设置一个

     width=100px,你也看不出效果,除非你设置出html。   

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        html{background-color: antiquewhite}
        body{
            width:200px;
            height:500px;
            background-color: deeppink;
            background-image: url(cnyrjhod.bmp);
            background-repeat:no-repeat;
            background-position:center right ;
        }
    </style>
</head>
<body>
    <div>ssss</div>
</body>

4   文本属性:

font-size: 10px; 字体大小

text-align: center;横向排列

line-height: 200px;文本行高 通俗的讲,文字高度加上文字上下的空白区域的高度 50%:基于字体大小的百分比

            p{
             200px;    
            height:200px;
            text-align:center;
            background-color: transparent;
            line-height: 200px;
        }


    <p style="font-size: 10px"> 字体大小</p>
    <p style="text-align: center">对齐方式 居中</p>
    <p style="line-height: 200px"> 字体百分比</p>
    <p style="line-height: inherit">哈哈哈</p>
    <p style="text-indent: 155px">文本缩进</p>
    <p style="letter-spacing:20px">字间距</p>
    <p style="word-spacing: 20px">调整间距</p>
    <p style="direction: rtl">sss</p>
    <p style="text-transform: capitalize;">文本大小写</p>

5   边框属性:

<head>
      <style>
        div{
            background: rebeccapurple;   背景颜色
            height: 400px;               高度
            width: 400px;          宽度
            /*border: solid 3px red;*/   实线
            border: dashed red 4px;    边界  虚线
        }
    </style>
</head>
<body>
    <div>ssss</div>
</body>

6   列表属性

ul,ol{ list-style: decimal-leading-zero; 

         list-style: none; list-style: circle;

         list-style: upper-alpha;

         list-style: disc; }

       ul{
            /*list-style: none;  无样式*/
        /*list-style: decimal-leading-zero;*/ 数字
        /*list-style: circle;  空心圆*/
            /*list-style:upper-alpha; 英文字母*/
        list-style: disc; 实心圆
        }
    <ul>
        <li>1111</li>
        <li>2222</li>
        <li>3333</li>
        <li>4444</li>
    </ul>

7  dispaly属性

  • none
  • block
  • inline
        p{
            background-color: #ff0033;
            display: inline; 显示内联
        }
        span{
            background-color: red;
            display: block;  显示一块
            /*display: none;*/显示无样式
            /*隐藏*/
             200px; 块的宽度
            height:200px; 高度
        }
    <p>块级变内联</p>
    <span>内联变块级</span>

8  盒子模型


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

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

 内边距会影响盒子的大小,外边距不会影响盒子的大小,需要设置

练习: 300px*300px的盒子装着100px*100px的盒子,分别通过margin和padding设置将小盒  子 移到大盒子的中间

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>    
.kai{
        width: 300px;
        height: 300px;
        background-color: #ff0033;
        border: 10px solid transparent;  边界透明度

    }
        .inner{
            width: 100px;
            height:100px;
            background-color: #ffff33;
            margin-top: 100px;
            margin-left: 100px;
}
    </style>
</head>
<body>
    <div class="kai">
        <div class="inner"></div>
</body>
</html>
    </div>
效果图:

  边框在默认情况下会定位于浏览器窗口的左上角,但是并没有紧贴着浏览器的窗口的边框,这是因为body本身也是一个盒子(外层还有html),在默认情 况下,

  body距离html会有若干像素的margin,具体数值因各个浏览器不尽相同,所以body中的盒子不会紧贴浏览器窗口的边框了,为了验证这一点, 加上

        body{
        /*padding: 0px;*/
            margin: 0px;  边缘
        border: solid red 3px;  边界固体红

        }

<body>
ssssssssssssssssss
</body>

 注意2:margin collapse(边界塌陷或者说边界重叠)

           外边距的重叠只产生在普通流文档的上下外边距之间,这个看起来有点奇怪的规则,其实有其现实意义。设想,当我们上下排列一系列规则的块级元素(如段             落P)时,那么块元素之间因为外边距重叠的存在,段落之间就不会产生双倍的距离。又比如停车场

        

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

           2父子div    

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

                 解决方法:

              1: border:1px solid transparent
2: padding:1px
3: over-flow:hidden;

    .kai{
         300px;
        height: 300px;
        background-color: #ff0033;
 /*     overflow-x:hidden   */
        padding:10px
 /*     border: 10px solid transparent;  边界透明度    */
}
        .inner{
             100px;
            height:100px;
            background-color: #ffff33;
            margin-top: 100px;
            margin-left: 100px;        }
    <div class="kai">
        <div class="inner"></div>
    </div>

代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        a{  光标值
            /*cursor: pointer;*/ 指针
            /*cursor: help;*/
            /*cursor:wait;*/
            /*cursor: move;*/
            /*cursor: crosshair;*/
        }

        body{
        /*padding: 0px;*/
            margin: 0px;  边缘
        border: solid red 3px;  边界固体红

        }
    .kai{
        width: 300px;
        height: 300px;
        background-color: #ff0033;
        border: 20px solid transparent;  边界透明度
        /*padding: 100px; !*扩充大小!**/
        /*padding-top: 100px;*/ 上填充
       /*padding-left: 100px ;*/  左填充

    }
        .inner{
            width: 100px;
            height:100px;
            background-color: #ffff33;
            /*margin-top: 100px;*/  上边距
            /*margin-left: 100px;*/ 左边距
            margin: 30px;   边缘
        }
    </style>
</head>
<body>
    <a>ssssssss</a>
    <div class="kai">
        <div class="inner"></div>
        <div class="inner"></div>
    </div>
    daaaaaaaaaaaaaaaaaaaaaaaaaaa

</body>
</html>

9 float

浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。

由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样。

float:

     inherit:继承

none  :  默认值。允许两边都可以有浮动对象

left   :  左边有浮动对象

right  :  右边有浮动对象

both  :  两边有浮动对象

clear,官方定义如下:

语法:

clear : none | left | right | both

取值:

none  :  默认值。允许两边都可以有浮动对象

left   :  不允许左边有浮动对象

right  :  不允许右边有浮动对象

both  :  不允许有浮动对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>

        .div1{
            width: 100px;
            float: left;
            background-color: chartreuse;
        }
        .div2{
            background-color: red;
            float: left;
            width: 200px;
            height: 100px;
            clear: left;
        }
        .div3{
            background-color: #000fff;
            float: left;
            width: 100px;
            height: 100px;
        }
        .div4{
            background-color: #ff0033;
            width: 200px;   
            float: left;

        }
        .div5{
            width: 100px;
            height:100px;
            background-color: aqua;
            float: left;
            /*clear: both;*/
        }
        .div6{
            width: 100px;
            background-color: black;
            float: left;
        }
    </style>
</head>
<body>
    <div class="div1">div1</div>
    <div class="div4">div4</div>
    <div class="div6">s</div>
    <div class="div2">div2</div>
    <div class="div3">div4</div>
    <div class="div5">ssss</div>
</body>
</html>
浮动实例

效果图如下:

 

10 position

通过使用 position 属性,我们可以选择 4 种不同类型的定位,这会影响元素框生成的方式。

 1 static,默认值 static:无特殊定位,对象遵循正常文档流。

   top,right,bottom,left等属性不 会被应用。 说到这里我们不得不提一下一个定义——文档流,文档流其实就是文档的输出顺序, 也就是我们通常看到的由左      到右、由上而下的输出形式,在网页中每个元素都是按照这个顺序进行排序和显示的,而float和position两个属性可以将元素从文档流脱离出来显 示。 默认值就        是让元素继续按照文档流显示,不作出任何改变。

2  position:relative

      relative:对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置。而其层叠通过z-index属性定义。

      absolute:对象脱离正常文档流,使用top,right,bottom,left等属性进行绝对定位。而其层叠通过z-index属性定义。 如果设定 position:relative,就可以使用 top,bottom,left和 right 来相对于元素在文档中应该出现的位置来移动这个元素。[意思是元素实际上依然占据文档 中的原有位置,只是视觉上相对于它在文档中的原有位置移动了] 当指定 position:absolute 时,元素就脱离了文档[即在文档中已经不占据位置了],可以准确的按照设置的 top,bottom,left 和 right 来定位了。 如果一个元素绝对定位后,其参照物是以离自身最近元素是否设置了相对定位,如果有设置将以离自己最近元素定位,如果没有将往其祖先元素寻找相对定位元素, 一直找到html为止。

3  position:fixed

         在理论上,被设置为fixed的元素会被定位于浏览器窗口的一个指定坐标,不论窗口是否滚动,它都会固定在这个位置。

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .q{
            position:relative;
            background-color: #ff00ff;
            height: 400px;
            width:500px;
        }
        .w{
            position: absolute;
            bottom: 30px;
            right: 30px
        }
        .e{
            height: 200px;
            position: fixed;
            background-color: #ffff33
        }
        .r{
            position: static;
            background-color: #000fff;
            width: 100px;
            height: 100px;
        }
    </style>
</head>
<body>
    <div class="q">
        <div class="w">固定</div>
    </div>
     <div class="e">sssss</div>
    <div class="r">sadfgffdd</div>
</body>
</html>

 

原文地址:https://www.cnblogs.com/guokaixin/p/5623124.html