• cascading style sheet
  • 基础
    • 层级匹配
      • 不同级
          1. style属性
          1. style标签
          1. link标签
          1. 浏览器中用户自定义样式表
          1. 浏览器默认样式 # 浏览器对每个元素定义了默认的样式表
      • !important
        • color: black !important
      • 同级 # 评估得出最特殊的样式, 评分相同时,使用最后的
          1. id值的数目
          1. 其它属性和伪类的数目
          1. 元素名和伪元素的数目
    • 继承
      • 部分元素继承父元素样式
        • 外观继承
        • 布局不继承
      • inherit # 指明使用父元素样式
        • border: inherit
    • 三种引入方式
      • 内联式
        • <div style=“color:000;”></div> - 嵌入式
        • <style type="text/css">
              div {color:#000;}
          </style>
      • 引用式
        • <link href=“css.css” rel=“stylesheet” type=“text/css” /> - @
          • @charset “UTF-8” # 默认UTF-8, 在import前
          • @import “styles.css” # 静态引用, 效率比标签慢
  • 单位
    • 颜色
      • 名称, 如silver, gray
      • 0xffffff
      • rgb(112, 128, 144)
      • rgb(112, 128, 114, 0.4)
      • hsl(120, 100%, 22%) # 色相(hue), 饱和度(saturation), 明度(lightness)
      • hsl(120, 100%, 22%, 0.4)
    • 长度
      • 绝对单位 # 只有在打印和设计文档时才用绝对单位
        • cm
        • pt # 磅
        • in # 英寸
        • mm
        • pc # pica 等于12磅
      • 相对长度
        • em # 元素字号
        • ex # 元素字体的’x高度’,字体基线到中线的距离,一般与x的高度相当,大致等于0.5em
        • rem # 根元素(html元素)字号
        • px # css像素,假定了设备的分辨率为96dpi, 是1英寸的1/96(windows系统标准像素密度, 其它平台浏览器自己转换), css在定义中px是相对单位,但浏览器实现中全是绝对单位
        • % # 不是所有元素都可以用, 不同属性中%定义不同,如font-size挂钩继承的font-size值, width挂钩元素包含块的宽度
      • 算式 # css3 未得到广泛支持
        • width: calc(80% - 20px);
    • 角度
      • deg # 度, 0 - 360
      • grad # 百分度 0 - 400
      • rad # 弧度 0 - 6.28
      • turn # 圆周 1 turn = 360 deg
    • 时间
      • s
      • ms
  • 选择器
    • *                               # 所有元素
      <type>                          # 标签
      .<class>                        # 样式
      #<id>                           # id
      [attr]                          # 属性, 如[title] {}
      [attr="val"]
      [attr^="val"]                   # 以val开头
      [attr$="val"]
      [attr*="val"]                   # 包含val
      [attr~="val"]                   # 属性多值有val, 空格隔开
          [class~="class2"] {}
      [attr|="val"]                   # 属性多值有val, - 隔开
          [lang |="en"] 
      <selector>, <selector>          # 同时匹配
      <selector> <selector>           # 后代
      <selector> > <selector>         # 直接后代
      <selector> + <selector>         # p 之后的第一个兄弟a
      <selector> ~ <selector>         # p 之后所有兄弟a
    • o 伪元素 # 直接使用匹配所有
      • ::first-line                    # 块级元素文本首行
        ::first-letter                  # 块级元素文本首字母
        :before                         # 之前插入内容
            {content: 'a'}
        :after                          # 之后插入内容
    • o 伪类 # 直接使用匹配所有
      • :root                           # 文档根元素, 总是返回html元素
        :first-child                    # 第一子元素
            p > span: first-child , p 下面第一个span元素
        :last-child
        :only-child                     # 只有一个子元素的该元素
        :only-of-type                   # 同上但指定类型,直接使用时会匹配更多,因为很多某类型的唯一元素
        :nth-child(n)                   # body > :nth-child(2)
        :nth-last-child(n)
        :nth-of-type(n)
        :nth-last-of-type(n)
    • o UI 伪类
      • :enabled                        # 已启用的元素
        :disabled                       # 禁用的元素
        :checked                        # 选中的单选或复选按钮
        :default                        # 默认的元素, 如 <button type="submit">, 常和outline属性一起使用
        :valid                          # 输入验证有效的元素
        :invalid
        :in-range                       # 范围内的input元素, 未广泛支持
        :out-of-range
        :required                       # 允许使用required属性的input元素
        :optional                       # 非required
    • o 动态伪类
      • :link                           # 未访问的a元素
        :visited                        # 已访问过的a元素
        :hover
        :active                         # 当前激活的元素(鼠标按下)
        :focus                          # 获得焦点的元素
        :not(<selector>)                # a:not([href*="apress"])
        :empty                          # 无子元素的元素
        :lang(<language>)               # lang属性为指定值
            :lang(en) 匹配 <a lang="en-us">
        :target                         # url hash(片段标识符) 定向id所在的元素
    • 例子
      • o->
        span.class2 {}
         
        o->
        body > * > span, tr > th {}
         
        o-> 计数器
        body {counter-reset: paracount;}
        p:before {
            content: counter(paracount) " ";
            counter-increment: paracount;
                # counter-increment: paracount 2; 可以增加2
        }
         
        o->
        :checked + span
  • 属性
    • 布局
      • position # 默认static, top等属性不起作用
        • static
        • absolute
        • fixed # fixed滚动固定
        • relative
      • left
      • right
      • top
      • bottom
      • z-index
      • columns # 列数和列宽的简写属性
      • column-count # 多列布局的列数
        • column-fill # 列间内容分布方式
        • column-gap # 列间隔
        • column-rule # 列间规则的简写属性
        • column-rule-color
        • column-rule-style
        • column-rule-width
        • column-span # 元素跨列数
        • column-width
      • flex-align # 弹性盒子布局, 未实现
        • flex-direction
        • flex-order
        • flex-pack
        • webkit-box-align # 内容高度小于容器高度时
          • start(顶边放置), end(底边放置), center(中间放置), baseline, stretch(拉伸元素)
          • webkit-box-flex # 元素可伸缩性
          • webkit-box-pack # 元素伸缩到最大尺寸(max-width)时怎么做
            • start(左边放置), end(右边放置), center(中间放置), justify(平均分配到各个元素间)
          • webkit-box-direction # 内部盒子排列顺序
      • 例子
        • o 多列布局
          • column-count: 3;
            column-fill: balance;
            column-rule: medium solid black;
            column-gap: 1.5em;
            column-width: 10em;
        • o 弹性盒
          • #container {
                display: -webkit-box;
                -webkit-box-direction: reverse;
                -webkit-box-align: end;
                -webkit-box-pack: justify;
            }
            #first {-webkit-box-flex: 3;}
            #second {-webkit-box-flex: 1;}
        • o css表格
          • #table {display: table;}
            div.row {display: table-row;}
            p {display: table-cell;}
    • 盒模型
      • box-sizing # 尺寸样式(如width, height)应用到哪部分
        • content-box, padding-box, border-box, margin-box
      • display
        • inline # 显示为文本行中的字
          • inline时,忽略width, height, margin属性
        • block # 显示为段落, 在垂直方向有所区别
        • inline-block # 显示为文本行, 整体作为inline, 但内部作为block, 这样认width, height, margin属性
        • list-item # 显示为列表项
        • run-in # 类型取决于周围元素
          • 包含display:block元素,就是block
          • 兄弟都是block时,为inline
          • 其它都为block
        • compact # 为块或标记盒(类list-item), 一般不支持
        • flexbox # 弹性盒布局用
          • webkit-box
        • table # 表格布局用
          • inline-table
          • table-caption # 类似caption
          • table-row-group # 类似tbody
          • table-header-group # 类似thead
          • table-footer-group # 类似tfoot
          • table-row # 类似tr
          • table-column-group # 类似colgroup
          • table-column # 类似col
          • table-cell # 类似td
        • ruby # ruby注释的文本布局用
          • ruby-base
          • ruby-text
          • ruby-base-group
          • ruby-text-group
        • none # 元素不可见,不占空间
      • float # 元素左边界或右边界移动到包含块或另一个浮动盒的边界。其余inline部分流式环绕
        • left, right, none
      • clear # 左右边界不能挨着另外浮动元素
        • left, right, both, none
      • padding
        • padding-bottom
        • padding-left
        • padding-right
        • padding-top
      • margin
        • margin-bottom
        • margin-left
        • margin-right
        • margin-top
      • height # 长度或百分比
      • width
        • max-height
        • max-width
        • min-height
        • min-width
      • overflow
        • auto # 同scroll, 但自动加滚动条
        • hidden # 剪掉
        • on-content # 移除内容, 已废弃
        • on-display # 隐藏内容, 已废弃
        • scroll, visible # 溢出
      • overflow-x
      • overflow-y
      • visibility # 元素可见性
        • collapse # 不可见,不占据空间, 只能用在表相关内容,如tr, td
        • hidden # 不可见,占据空间
        • visible
    • 边框
      • border # border: 30px dashed 000
      • border-width # 可以是长度值, 百分比, thin, medium, thick
        • border-width: 15px 5px 15px 5px
      • border-style
        • none 默认
        • dashed 破折线
        • dotted 圆点
        • double 双线
        • groove 槽线
        • inset 内嵌效果
        • outset 外凸效果
        • ridge 脊线
        • solid 实线
        • border-style: solid dotted dashed double 定义了上、右、下、左的样式
        • border-style: none的时候,边框其它属性无意义
      • border-color
        • blue rgb(25%, 35%, 45%) 909090 red;
      • border-image # 不广泛支持
        • border-image-outset
        • border-image-repeat
          • stretch 拉伸
          • repeat 平铺
          • round 不截断下拉伸
          • space不截断下图片间保留间距平铺
        • border-image-slice
        • border-image-source
        • border-image-width
        • o
        • webkit-border-image, -moz-border-image, -o-border-image
        • border-image: url(a.png) 30 / 50px round repeat; 九宫格切分长度都为30, 宽度为50, 横round, 竖repeat
      • border-left
        • border-left-style
        • border-left-color
        • border-left-width
      • border-right
        • border-right-color
        • border-right-style
        • border-right-width
      • border-top
        • border-top-style
        • border-top-color
      • border-top-width
      • border-top-left-radius
        • border-top-left-radius: 20px 15px; x半径20, y半径15
      • border-top-right-radius
      • border-bottom
        • border-bottom-style
        • border-bottom-width
        • border-bottom-color
        • border-bottom-left-radius
        • border-bottom-right-radius
      • border-radius
        • border-radius: 20px / 15px;
        • border-radius: 50% 20px 25% 5em / 25% 15px 40px 55%
      • box-shadow
        • box-shadow: hoffset voffset blur spread color inset
        • 水平偏移量, 正向右,负向左。垂直偏移量,正向下,负向上。模糊值。阴影延伸半径,正向各方向延伸,负缩小。颜色。内嵌阴影
        • 可设置多组阴影,用, 隔开
      • outline # 轮廓不属于页面,不影响布局, <颜色> <样式> <宽度>
        • outline-color
        • outline-offset # 距元素边框边缘的偏移量
        • outline-style # 同border-style
        • outline-width # 同border-width
    • 背景
      • 不继承
      • background # background:
      • background-attachment # 背景附着方式
        • fixed 固定到视窗上, 不随文字滚动
        • local 随文字滚动
        • scroll 固定到元素上(使用浏览器的滚动条), 不随文字滚动
      • background-color # 原点在border外边缘
        • 函数
          • linear-gradient(transparent, rgba(0, 0, 0, 0.1) 20%, rgba(0, 0, 0, 0.5) 65%, rgba(0, 0, 0, 0.66))
            • 线性渐变
      • background-image # 原点在padding外边缘,也就是border内边缘
        • background-image: url(“bg.jpg”)
      • background-position # 起始位置, 可以是长度, top, left, right ,bottom, center, 第一个值控制垂直位置, 第二个值控制水平位置
        • 0px 0px # 左上偏移0, 0
        • right ? # 位置在右边显示
        • left ? # 位置在左连显示(默认)
        • ? bottom
        • center center # 位置在中间显示、内容从中间开始显示(默认)
        • ? top # 内容从上开始显示
      • background-repeat
        • no-repeat
        • repeat 水平和垂直同时平铺
        • repeat-x 水平平铺
        • repeat-y
        • space 水平或垂直平铺, 统一间距,不截断, round 水平或垂直拉伸, 不截断
      • background-size # 可以长度值或百分比
        • contain 等比缩放, 宽高适应匹配, 不超出容器
        • cover 等比缩放, 宽高最大适应匹配, 可超出容器
        • auto 本身尺寸显示
      • background-origin # 定位显示原点
        • border-box 边框盒子内
        • padding-box 内边距盒子内
        • content-box 内容盒子内
      • background-clip # 裁剪, 属性同上
    • 色彩
      • opacity
      • color # 前景颜色
        • rgba(255, 255, 255, 0.7)
      • user-select # 用户不可选择
      • filter # 滤镜效果, ie8 或之前使用
        • filter:alpha(opacity=50),同opacity: .5
    • 文本
      • text-decoration # node时 a标签没有下划线
      • text-indent # 首行缩进
      • text-align
        • start 语言的起始边界,可能是右
        • end, left, right, center, justify
      • text-justify # text-align: justify时来指定规则
        • auto
        • none 禁用文本对齐
        • inter-word 空白在单词之间
        • inter-ideograph 中日韩
        • inter-cluster 泰
        • distribute, kashida 草体
      • text-transform # 转换大小写
        • none, capitalize, uppercase, lowercase
      • text-decoration # 文本装饰
        • none, underlinenone, overline, line-through, blink
      • text-shadow # 文本阴影, , 水平偏移, 垂直偏移, 模糊程度, 颜色
      • direction # 文本对齐
        • ltr, rtl
      • word-spacing # 词间距
      • letter-spacing # 字母间距
      • white-space
        • normal 空白被压缩,文本行自动换行
        • nowrap 空白压缩,文本行不换行
        • pre 空白不压缩, 换行符换行
        • pre-line 空白压缩,自动换行或换行符换行
        • pre-wrap 空白不压缩, 自动换行或换行符换行
      • line-height # 行高, 百分比,长度
      • word-wrap # 行超距单词截断
        • normal 溢出
        • break-word
      • @font-face # 指定web字体, woff得到最广泛支持, 在@font-face中定义,font-family中使用
        • @font-face {
              font-family: 'MyFont';
              font-style: normal;
              font-weight: normal;
              src: url('http://a/MyFont.woff')
          }
      • font #
        • 简写属性
          • font-family # serif, sans-serif, monospace, cursive, fantasy
            • font-family: MyFont, cursive
          • font-style # normal, italic, oblique
      • font-variant # normal, small-caps
        • font-weight # bold, bolder, lighter
        • font-size
          • xx-small 浏览器决定的大小
          • x-small, small, medium, large, x-large, xx-large
          • smaller 相对父元素字体的大小
          • larger, , <%>
    • 列表样式
      • list-style #
        • list-style-type # 列表项前标记
          • none, box, check, circle, diamond, disc, dash, square, decimal, binary, lower-alpha, upper-alpha
        • list-style-image # 图片作为列表标记
        • list-style-position # 相对于内容框的位置
          • inside 内容框内部
          • outside 外部
      • vertical-align # 垂直对齐(文字不行)
      • cursor
        • auto :标准光标
        • default :标准箭头
        • hand :手形光标
        • wait :等待光标
        • text :I形光标
        • vertical-text :水平I形光标
        • no-drop :不可拖动光标
        • not-allowed :无效光标
        • help :?帮助光标
        • all-scroll :三角方向标
        • move :移动标
        • crosshair :十字标
        • pointer
        • e-resize n-resize nw-resize w-resize s-resize se-resize sw-resize ne-resize
    • 表格样式
      • border-collapse # 相邻单元格边框样式
        • separate 默认,重复画框
        • collapse 合并边框
      • border-spacing # 相邻单元格边框距离
      • table-layout # 单元格行列的算法规则
        • auto
        • fixed 由表格自身样式和每列width属性决定布局[无则设等间距],由第一行决定列宽,以下行内容自动换行
      • caption-side # 表格标题的位置
        • top, bottom
      • empty-cells # 是否显示表格中空单元格
        • hide
    • 计数器
      • counter-reset # 用于有序列表
      • counter-increment
    • 动画
      • 介绍
        • 本质是增强过渡
      • @keyframes
        • 指定一个以上关键帧
        • 只在过程中有效,动画结束后即使仍hover, 也返回初始状态
      • animation
        • 动画,动画完后回到初始状态。想停留在结束状态用过渡。
        • 可以用在初始布局中
        • 通过keyframe显式控制, 可重用
        • <animation-name> <animation-duration> <animation-timing-function> <animation-delay> <animation-iteration-count> - 只是模拟属性值改变来实现动画,动画结束后属性无变化
          • 可以应用到页面的初始布局中去,而transform只能应用在动作上
        • animation-delay # 延迟,可以指定多个值,对应transition-property中的多个属性
        • animation-direction # 重复播放时播放方向
          • normal 每次向前播放
          • alternate 先向前,再反向,相当于animation-iteration-count: 2
        • animation-duration # 持续时间, 可多值
        • animation-iteration-count # 循环次数
          • infinite # 无休止交替播放
        • animation-name # 关键帧集合名称,可多个
        • animation-play-state # 动画状态, js中ele.style.webkitAnimationPlayState = ‘paused’
          • paused # 停止
          • playing # 开始播放
        • animation-timing-function # 关键帧时间插值函数
          • normal # 每次重复向前播放
          • alternate # 先向前播放,再反向播放,相当于animation-iteration-count: 2
      • transform # 变换,动画结束后属性有变化
        • moz-transform: rotate(-45deg) scaleX(1.2) # 逆时针旋转45度, 延x轴缩放到1.2倍
        • 函数
          • translate # 水平、垂直或两个方向 平衡。长度,百分比
          • translateX
          • translateY
          • scale # 数
          • scaleX
          • scaleY
          • rotate # 角度
          • skew # 倾斜, 角度
          • skewX
          • skewY
          • matrix # 6个参数。自定义变换, 由于z缩放未被实现,后两个参数省略
        • transform-origin # 变换的起点,默认是元素中心点
          • transform-origin right top;
          • 长度,百分比,left center right, top center, bottom
      • transition # , 可以作为初始状态,也可以过渡
        • transition-delay # 开始之间延迟时间, ms
        • transition-duration # 持续时间, ms
        • transition-property # 应用过渡的多个属性
        • transition-timing-function # 时间函数
          • ease 默认
          • linear
          • ease-in
          • ease-out
          • ease-in-out
          • cubic-bezier 指定自定义曲线
        • -webkit-
          transition: .2s background-cololr
          transition: .2s all
      • 示例
        • o 过渡
          • #banana {
                font-size: large;
                border: medium solid black;
                -webkit-transition-delay: 10ms;
                -webkit-transition-duration: 250ms;
                    # 反向过渡
            }
            #banana:hover {
                font-size: x-large;
                border: medium solid white
                background-color: green;
                color: white;
                padding: 4px;
                -webkit-transition-delay: 100ms;
                -webkit-transition-property: background-color, color, 
                    padding, font-size, border;
                -webkit-transition-duration: 500ms;
                -webkit-transition-timing-function: linear;
            }
        • o 动画
          • #banana:hover {
                -webkit-animation-delay: 100ms;
                -webkit-animation-duration: 500ms;
                -webkit-animation-iteration-count: infinite;
                -webkit-animation-timing-function: linear;
                -webkit-animation-name: 'GrowShrink';
                -webkit-animation-direction: alternate;
            }
            @-webkit-keyframes GrowShrink {
                from {
                    # 可以用0%替代
                    font-size: xx-small;
                    background-color: red;
                }
                50% {
                    # 定义了变化的速率,可以用0%, 100%代替fromto子句
                    background-color: yellow;
                    padding: 1px;
                }
                to {
                    # 可以用100%替代
                    font-size: x-large;
                    border: medium solid white;
                    background-color: green;
                    color: white;
                    padding: 4px;
                }
            }
        • o 变换
          • #banana {
                -moz-transform: rotate(-45deg) scale(1.2);
                -moz-transform-origin: right top;
            }
  • 典型问题
    • 垂直居中
      • line-height
            .content {
                height: 100px;
                line-height: 100px;
            }
        vertical-align
            .wrapper {display: table;}
            .cell {
                display: table-cell;
                vertical-align: middle;
            }
        position
            .wrapper {position: relative}
            .content {
                left: 50%;
                top: 50%;
                transform: translate(-50%, -50%)
            }
        position
            .content {
                position: absolute;
                top: 0;
                bottom: 0;
                left: 0;
                right: 0;
                margin: auto;
            }
        float填充一半
            .floater {
                float: left;
                height: 50%;
                margin-bottom: -120px;
            }
            .content {
                clear: both;
                height: 240px;
                position: relative;
            }
    • 图标切分
      • background-image: url(/base/icons.png);
        background-repeat: no-repeat;
        background-position: -910px -74px;
    • 内部元素自动高度
      • .parent {
            overflow: hidden;
        }
        .parent .children {
            overflow: hidden;
        }
  • 工具