CSS样式总结

CSS相关概念
    1. CSS的定义
        Cascading Style Sheets 层叠样式表(级联样式表)
    2.  CSS的作用
        定义网页外观,如字体、背景、颜色等
    3. CSS特点
        ① 精确的定位 准确的控制页面的任何元素
        ② 精细的控制 可以做到像素级别的调整
        ③ 样式与内容的分离 便于维护,便于重用
    4. 发展历程
        ① CSS1   CSS1发布于 1996年12月17号
        ② CSS2   CSS2发布于 1999年1月11日。CSS2添加了对媒介(打印机和听觉设备)和可下载字体的支持。
        ③ CSS3 CSS3 计划将 CSS 划分为更小的模块。2001年至今   HTML5+CSS3


CSS的使用方式
    1. 内联样式(行内样式)
        在标签里面添加style属性,属性值 写css 代码
    2. 内部样式(通常定义在head头中)
        把css代码写在style标签中
        注意:style标签可以写在文件内部的任何一个地方,但是建议都放在head头内
    3. 外部样式(使用link标签引入单独的css文件)
        link标签      <link href="css文件地址" rel="stylesheet" />
        @import       @import "css文件地址";    注意:要写在css代码的前面
    ★:当样式的定义有冲突的时候,行内样式的优先级最高;其他两种看代码出现的顺序,后面的会覆盖前面的;


CSS的基本语法
    1. CSS语法
        选择器:是你需要改变样式的 HTML 元素
        声明:
            声明都被包含在{}中;
            每条声明由一个属性和值组成,中间用冒号隔开;
            定义多条声明的时候,用分号隔开;
        实例:
            h1{color:red; background:blue;}
    2. CSS注释
        /* 注释内容 */
    3. 单位
        3.1 长度单位
            px      像素(推荐),屏幕上显示的最小单位;(字体大小默认16px)
            em      倍数   字体大小相对于默认的16px来翻倍
            %       百分比 字体大小相对于默认的16px来取百分比
            ========以上3个都是相对单位===========
            in      英寸
            pt      磅 (1 pt 等于 1/72 英寸),标准长度单位,通常用于印刷业
            mm/cm   毫米/厘米
        3.2 颜色单位
            1.颜色单词
                red green blue yellow pink purple lightblue...
            2.以16进制表示, 取值范围0~f
                #121212
                提示:如果表示三原色的数值相同,可以简写
                #00 00 00 = #000
            3.rgb
                数字:     color:rbg(0~255, 0~255, 0~255)
                百分比:   color:rbg(0~100%, 0~100%, 0~100%)
                注意:不能混用!


CSS的选择器
    通配符选择器
        *{margin:0px}
    HTML标签选择器
        p{color:red}
    CLASS类选择器
        .class名{color:red}
    ID选择器
        #ID名{color:red}
    ========= 注意:以上4种是基本选择器;请保持ID名的唯一性;class和ID选择器区分大小写,标签不区分
    
    后代选择器
        爹 后代{color:red}
        空格分隔,相当于找ul的后代中左右的a标签
    组合选择器
        a, h1, p{color:red}
    伪元素选择器(不能在行内样式使用)
        选择器:link        设置没访问前的样式
        选择器:visited     设置访问过后的样式
        选择器:hover       设置鼠标放上来的时候的样式(最常用)
        选择器:active      设置鼠标点击还没放开的时候的样式


选择器的优先级
    ID选择器 > CLASS选择器 > 标签选择器


CSS中常见的属性和值
    1、字体属性
        font            设置字体所有属性
            font: [粗细] [斜体] 30px '楷体';
        font-size       字体大小(常用的)
        font-family     用哪一种字体
        font-weight     字体粗细
            值:100-900的整百数!600以上为粗体,其他为正常大小
        font-style      字体样式
            italic  设置为斜体
    2、颜色属性
        color   值参考基本语法中的颜色单位
    3、背景属性
        background              任意组合各种子属性(用起来很爽)
        background-color        背景颜色
            background-color:#ccc;
        background-image        背景图片
            background-image:url('../html03/img/f.gif');
        background-repeat       背景图片的平铺方式  
            值:repeat(默认)  no-repeat(不平铺)  repeat-x  repeat-y
            background-repeat:no-repeat;
        background-position     背景图片的位置(九宫格或者像素)
            值:left center right top bottom 像素
            background-position:10px 100px;
        background-attachment   背景图片相对于谁滚
            值:fixed(相对于窗口滚)     scroll(相对于元素滚)    local(默认,跟着内容滚)
        
    4、文本属性
        letter-spacing      设置字间距   (值:长度单位)
        word-spacing        设置词间距   (值:长度单位;空格区分一个词)
    ### text-indent         设置首行缩进 (值:长度单位;通常为2em,缩进两个汉字) 
        text-transform      大小写转换
            值:capitalize(每个单词的首字母大写)  uppercase(全大写)  lowercase(全小写)
    ### text-decoration     设置线
            值:none(没有)  underline(下划线)  overline(上划线)  line-through(删除线)
    ### text-align          水平对齐方式
            值:left   center     right
    ### vertical-align      行级元素基于本行的垂直对齐方式
            值:
                baseline 默认
                middle  默认与下标位置之间
                sub     下标位置
                super   上标位置
                top     会找到最上面的哥们对齐
                bottom  会找到最下面的哥们对齐
                100px   直接设置长度单位
    ### line-height         设置行高,通常用于文本垂直居中
        word-wrap           break-word:设置超长变态的单词自动换行


    5、边框属性
        border          必须记住,设置元素的边框
            border:1px solid red;   //顺序无所谓
        border-width    设置边框的宽度
        border-color    设置边框的颜色
        border-style    设置边框的样式:solid|dashed|dotted...(见:./border-style.html)
        #可以单独设置上下左右某一条边框,知道就行,有兴趣的可以测试一下
        border-top
            border-top-width
            border-top-color
            border-top-style
        border-bottom
            border-bottom-width
            border-bottom-color
            border-bottom-style
        border-left
            border-left-width
            border-left-color
            border-left-style
        border-right
            border-right-width
            border-right-color
            border-right-style
    6、鼠标指针样式属性
        cursor  设置鼠标指针样式
            值:pointer|move|not-allowed|wait|progress... (见:./cursor.html)
    7、列表属性
        list-style              通常是去掉前面的点:list-style:none;
        list-style-type         设置图标类型:circle|square... (见:list-style-type.html)
        list-style-image        设置图标图片
        list-style-position     设置图标位置:inside|outside
    8、表格属性
        table-layout:   设置表格为固定布局:auto|fixed
        border-collapse:  设置td的边框相邻合并;默认为独立的
            值:separate(默认独立)  collapse(相邻合并)




网页布局(DIV + CSS)
    HTML网页:标准文档流(从左往右,从上往下)由标签构成
    浏览器把每一个标签都看做是一个盒子!(烟盒)


布局相关概念:
    1.盒子模型
        1.1 定义: 任何一个元素都可以抽象一个盒子模型, 盒子里面可以嵌套盒子
        1.2 组成: 元素内容(有宽高)、内边距(补白)、边框、外边距(补白)
        1.3 相关属性:
                   width  height  盒子的宽高
                   border       盒子的边框
                   padding      盒子的边框距离盒子的内容的距离
                   margin       盒子的边框距离上一个盒子或父元素的距离,可以为负值
        1.4 盒子模型的宽高
             盒子的宽 = 内容的宽 + 左右内补白 + 左右边框


    2.标签分为块级元素和行级元素
        块级元素(标签)
            一般用来搭建网站架构、布局、承载内容……像这些大体力活都属于块级元素的
                如:div|ul|li|dl|dt|p。。。
            特点:
                1、从左到右撑满页面,独占一行。
                2、如果没有设置宽度,默认是它容器宽度的100%
                3、块级元素可以包含其他块级元素或者行级元素(P标签除外)
                    部分标签:h1~h6、p、dt。。。(html语法检测的编辑器会报错,只有p标签会影响结构)
            <ul>、<ol>、<dl>、<table>,它们的子一层必须是指定元素
        行级元素(标签)
            一般用在网站内容之中的某些细节或部位,用以“强调、区分样式、上标、下标、锚点”等等,如:span|a|b|i|strong|img|input。。。
            特点:
                1、从左到右在同一行显示,触碰到页面边缘时会自动换行
                2、设置的宽、高、行高属性没用(部分标签例外),在容器允许的范围内,实际的宽高度是由内容决定的!padding有效;margin左右有效,上下没用!
                    部分标签:img|input|select|textarea|button|label
                3、行级元素只能包含其他行级元素或者文本内容,不能包含块级元素!
    3.无意义的块级元素(div)和行级元素(span)
        3.1、布局标签
            <div></div>
            <span></span>
            没有任何内涵和样式,常用于布局!
        3.2、行级元素和块级元素的转换(display)
            display    inline|block|inline-block|none
            扩充:IE7不支持inline-block,解决方法:首先将其变成行内元素,使其具有行内元素的特性,然后触发haslayout,使其具有块级元素的特性,如此就可以模拟出inline-block的效果
            div{
                display:inline-block;
                *display:inline;
                *zoom:1;
            }


    4.盒子的浮动
        浮动的盒子可以脱离文档流;脱离了文档流后,其他的块级元素会无视这个盒子的存在
        需要注意的是:元素中的文本依然会为它让出位置,环绕在它周围
        float属性,值有right|left|none
    5.盒子的定位
        相对定位
            相对于自己原先的位置定位,配合left|right|top|bottom使用,不会脱离文档流,不影响其他元素的布局;可以与其他元素重叠,但它原本所占的空间不会改变
        绝对定位
            相对于离自己最近的已定位父元素,如果没有找到,那么它的位置相对于浏览器的可视窗口;脱离了文档流,其他元素(包括元素中的文本)会无视它
        固定定位
            固定定位,固定在浏览器的某个位置,不随滚动条的滚动而滚动
    6.margin的特性
        1、两个盒子的水平外边距margin值会相加(正常理解),累加显示
        2、两个盒子的垂直外边距margin值会重叠,以最大的为显示标准
        3、父元素的第一个子元素的[上边距](只有上边距)margin-top如果碰不到有效的border或者padding.就会不断一层一层的找自己“领导”(父元素,祖先元素)的麻烦。将自己的margin应用到“领导”的身上;
            解决:
                1、给父元素加有效的border或者padding(不能为0)
                2、或者设置父元素的overflow:hidden
    7.盒子的嵌套
        1、如果子元素的宽高超出了父元素,可以通过overflow来控制超出部分
            auto 自动 | hidden 隐藏 | scroll 滚动条
        2、当子元素浮动后,父元素的高度不会被撑开了!就像橡皮筋一样
            解决:
                1、让父元素也浮动起来
                2、给父元素加上overflow属性
    8.居中
        水平居中
            text-align  可以让文本和行级元素水平居中,设置在要居中元素的父级元素上
            margin:0 auto  可以让块级元素水平居中,设置在要居中的元素本身上
        垂直居中
            line-height 和父元素的height相等,可以让文本和行级元素垂直居中,设置在要居中元素的父级元素上(只能有1行文本)
            块级元素垂直居中:(画图中心点演示)
                position:absolute;
                top:50%;
                margin-top:当前元素高度的一半
    9.隐藏元素
        visibility:hidden   隐藏元素,但保留其物理空间
        display:none    隐藏元素,不保留空间


布局相关的属性
    1、尺寸
        width       设置内容的宽
        height      设置内容的高
    2、内边距
        padding
            padding:四边
            padding:上下  左右
            padding:上  左右  下
            padding:上  右  下  左
        padding-top     上
        padding-right   右
        padding-bottom  下
        padding-left    左
    3、外边距
        margin
            margin:四边
            margin:上下  左右
            margin:上  左右  下
            margin:上  右  下  左
        margin-top      上外边距
        margin-right    右外边距
        margin-bottom   下外边距
        margin-left     左外边距
    4、布局
        display     设置元素的显示方式
            值:
                none    隐藏元素,很彻底的隐藏,不保留物理空间(化尸粉,毁尸灭迹)
                block   显示为块级元素
                inline  显示为行级元素
                inline-block    显示为行内块级元素(类似于img、input标签,可以设置宽高)
        float       设置元素浮动方式
            值:
                left    往左浮动
                right   往右浮动
                none    不浮动(默认)
        clear       清除浮动。一般用于被浮动所影响的(块状)元素上
            值:
                both    清除两边的浮动(常用)
                left    清除左浮动
                right   清除右浮动
        overflow
            值:
                auto    溢出就显示滚动条,没超出就算了
                hidden  溢出隐藏
                scroll  溢出滚动(有没有超出都有滚动条的位置)
        overflow-x  设置水平方向的溢出方式,值和overflow一样
        overflow-y  设置垂直方向的溢出方式,值和overflow一样
        visibility  设置元素的可见性
            值:
                hidden  隐藏可见元素
                visible 显示元素(默认)
    5、定位
        position    设置元素的定位方式
            值:
                relative    相对定位
                absolute    绝对定位
                fixed       固定定位,固定在浏览器的某个位置,不随滚动条的滚动而滚动
        z-index     设置元素的堆叠层级
            值为一个整数,越大优先级越高;可以有负值
            注意:必须设置了postion的属性才有效!如果值相同,写在后面的会覆盖前面的


布局
    1.取消标签的默认样式
        body、h1~h6、p、ul 的margin值
        img的border值(IE默认有边框)
        a标签的text-decoration:none
    2.子元素继承父元素的属性设置
        字体、颜色、文本相关的属性,子元素会继承父元素的
            比如:在body中设置了字体样式,所有元素都会生效
        跟布局相关的属性,不会被继承;
            比如:边框、内边距、外边距、宽高、背景。。。


/********************* CSS3 **********************/
选择器
    元素选择器
        通配符 *
        标签选择器  li|div|a|b
        ID选择器
        类选择器
    关系选择器
        后代选择器   ul li{...}
            ul的后代li
        儿子选择器   ul > li{...}
            ul的儿子li(不包括孙子)
        相邻选择器   ul + div{...}
            ul后面紧挨着的div
        相邻选择器   ul ~ div{...}
            ul后面所有的div
    属性选择器
        E[attr]
            包含attr属性的E元素
        E[attr="val"]
            attr属性等于某个值的E元素
        E[attr^="val"]
            包含attr属性,并且值是以val开始的E元素
        E[attr$="val"]
            包含attr属性,并且值是以val结尾的E元素
        E[attr*="val"]
            包含attr属性,并且值里面包含val的E元素
        E[attr~="val"]
            包含attr属性,并且值用空格分割后还包含val的E元素
        E[attr|="val"]
            包含attr属性,并且值用|分割后还包含val的E元素
    伪类选择器
        E:link
        E:visited
        E:hover
        E:active


        E:first-child
        E:last-child
        E:nth-child(n)
        E:only-child
        E:not(选择器)
        E:empty
        E:focus
        E:checked
        ...
颜色
    设置元素的透明度:rgba(0~255, 0~255, 0~255, 0~1(透明度));
    transparent  设置为全透明
属性
    边框圆角
        border-radius
        border-left-top-radius
        border-left-right-radius
        border-bottom-top-radius
        border-bottom-right-radius
    盒子阴影
        box-shadow
    文字阴影
        text-shadow:5px 5px 10px yellow;
        -webkit-text-stroke:1px red;


    兼容写法:
        -webkit-        表示chrome谷歌浏览器
        -moz-           表示firefox火狐浏览器
        -o-             表示opera欧朋浏览器
        -ms-            表示IE浏览器






/****************** 以下均为扩充知识 ******************/


css hack
    由于各大浏览器对CSS的解析认识不完全一样,所以可以用css hack使你的CSS代码兼容不同的浏览器。当然,我们也可以反过来利用CSS hack为不同版本的浏览器定制编写不同的CSS效果。


    比如:
        比如 IE6能识别下划线"_"和星号" * ",IE7能识别星号" * ",但不能识别下划线"_",而firefox两个都不认识


        /*以下代码在IE7是蓝色,标准浏览器是红色*/
        p{
            color:red;  
            *color:blue;
        }


    比如判断浏览器
        <!--[if lte IE 8]>
            您的破浏览器太老了, 请到 <a href="http://browsehappy.com/">这里</a> 更新, 以获取最佳的体验
        <![endif]-->
            lt <
            gt >
            lte <=
            gte >=




关于inline-block后的换行符产生空格问题:
    » block水平的元素inline-block化后,IE6/7没有换行符间隙问题,其他浏览器均有;
    » inline水平的元素inline-block后,所有主流浏览器都有换行符/空格间隙问题;
    » font-size:0,去除换行符间隙,在IE6/7下残留1像素间隙,Chrome浏览器无效,其他浏览器都完美去除;
    » letter-spacing负值可以去除所有浏览器的换行符间隙,但是,Opera浏览器下极限是间隙1像素,0像素会反弹,换行符间隙还原。




CSS的浮动
    float 用于设置css的浮动
        之所以会出现浮动,是为了实现文字的环绕效果,并不是为了高大上的布局


    浮动的特性:
        1. 包裹
            一般有3中表现形式:
                1. 收缩
                    没设置宽高的情况下,宽高会收缩到和内容差不多
                2. 隔绝
                    里面发生的事情,与外部无关


            具有包裹的其他属性:
                display:inline-block|table-cell
                position:absolute|fixed
                overflow:hidden|scroll //待定
        2. 破坏
            一般表现为父元素高度塌陷,主要目的是为了实现文字环绕效果
            具有破坏性的其他属性:
                display:none
                position:absolute|fixed


    减轻浮动破坏性的两大方法
        1. 在浮动元素底部插入clear:both 清除浮动
            插入一个block块状元素,并加属性clear:both
                如:<div style="clear:both"></div>
            可以延伸出追加伪元素清除浮动的写法:
                .fix::after{content:'';display:table;clear:both;}
                .fix{zoom:1;/*兼容IE6/IE7*/}
        2. 让父元素BFC(Block Formatting Context)
            能够让父元素BFC的属性:
                1. float:left|right
                2. position:absolute|fixed
                3. overflow:hidden|scroll (常用)
                4. display:inline-block|table-cell(IE8+)
                5. zoom:1 (IE6/IE7)


    浮动后的元素有两种情况,变得像砖块一样,所以被很多人用来布局砌墙:
        1. 会将元素块状化
            <button onclick="alert(document.defaultView.getComputedStyle(this).display)">按钮</button>


            button标签,默认为inline-block,浮动后变成了block
        2. 去空格化


position的absolute绝对定位
    1. 跟随性:元素设置了absolute后会留在原来的位置
        经常用于无依赖的绝对定位,脱离relative的掌控
    2. 包裹性
    3. 破坏性
posted @ 2018-03-03 18:03  执码挥战  阅读(280)  评论(0编辑  收藏  举报