CSS 基础

作者: MrMagicWang | 来源:发表于2016-08-06 06:24 被阅读27次

    CSS简介

    • CSS 指层叠样式表 (Cascading Style Sheets)
    • 样式定义如何显示HTML 元素
    • 样式通常存储在样式表
    • 把样式添加到 HTML 4.0 中,是为了解决内容与表现分离的问题
    • 外部样式表可以极大提高工作效率
    • 外部样式表通常存储在CSS 文件
    • 多个样式定义可层叠为一个

    CSS引入

    • 外部样式表
    <head>
        <link rel="stylesheet" href="base.css">
    </head>
    
    • 内部样式表:适用于内容比较少的情况
    <head>
        <style>
            body {background-color: red;}
            p {margin-left: 20px;}
        </style>
    </head>
    
    • 内嵌样式:将html和css杂糅在一起,不推荐使用
    <p style="color:red;">123</p>
    

    CSS语法规则

    CSS 规则由两个主要的部分构成:选择器,以及一条或多条属性声明。

    /*选择器*/ css中注释用/* */
    selector {
        property1:value; //属性声明 = 属性名:属性值
        property2:value;
        ....
    }
    

    如果值为若干单词,则要给值加引号:

    p {font-family: "sans serif";}
    

    不同浏览器拥有不同私有属性,为了兼容各种浏览器,写法应该参照下面的代码:

    .pic {
        -webkit-transform:rotate(-3deg); /*chrome,safari*/
        -moz-transform:rotate(-3deg);  /*firefox*/
        -ms-transform:rotate(-3deg);  /*IE*/
        -o-transform:rotate(-3deg);  /*opera*/
        transform:rotate(-3deg);
    }
    

    属性值语法

    margin : [<length>|<percentage>|<auto>]{1,4}
    基本元素           组合符号               数量符号
    
    • 基本元素
    • 关键字:- auto,solid,bold.....
    • 类型
      • 基本类型:<length>,<percentage>,<color>....
      • 其他类型:<'padding-width'>,<color-stop>....
    • 符号:/,
    • inherit, initial
    • 组合符号
    • 空格
                <font-size> <font-family>
    合法值: 12px arial
    不合法值: 12px 或 arial 12px
    
    • &&
    <length>&&<color>
    green 2px 合法
    1em blue 合法
    blue 不合法
    
    • ||
    underline||overline||line-through||blink  
    至少需要出现一个,与顺序无关
    underline 合法
    overline underline 合法
    
    • |
    <color>|transparent  只能出现一个
    orange 合法
    transparent 合法
    orange transparent 不合法
    
    • [],主要起分组作用
    bold[thin || <length>]
    bold thin 合法
    bold 2em 合法
    
    • 数量符号
    • 无:表示只能出现一次
    <length>
    1px 合法
    1px 2em 不合法
    
    • +:表示可以出现一次或多次
    <color-stop>[,<color-stop>]+
    #fff,red 合法
    blue,green 40%,gray 合法
    blue 如果只有<color-stop>部分,不合法
    
    • ?:可出现也可以不出现
    • {}:表示可出现次数的范围
      <length>{1,2}表示能出现1-2次
    • *:表示可出现0次,或多次
    <time>[,<time>]*
    合法:1s 或 1s 2s
    
    • #:表示需要出现一次或多次
    <time>#
    合法:2s,3s
    不合法:1s 2s
    

    属性值例子:

    绿色的为合法的,红色的为不合法的

    @规则语法

    • @标识符 xxx;
    • @标识符 xxx{}
      常用规则
    • @media
    • @keyframes
    • @font-face
      不常用
    • @import
    • @charset
    • @namespace
    • @page
    • @supports
    • @document

    CSS选择器

    选择器简单可分为以下三类:

    1. 简单选择器
    1. 伪元素选择器
    2. 组合选择器
    • 简单选择器
    • 标签选择器:文档的元素就是最基本的选择器。选择器通常将是某个 HTML 元素,比如 p、h1、em、a,甚至可以是 html 本身。
    html {color:black;}
    p {color:gray;}
    h2 {color:silver;}
    
    • 类选择器
      .className:
      - className可以是字母,数字,-,_
      - className必须以字母开头
      - 区分大小写
      - 可以出现多次
    将段落1设置成蓝色,段落2、3设置成红色,段落3设置成粗体
    <div>
        <p>num 1</p>  
        <p class="special">num 2</p>
        <p class="special stress">num 3</p>
    </div>
    
    p{color:blue;}
    .special{color:red;}
    .stress{font-weight:bold;}
    
    • id选择器:可以为标有特定 id 的 HTML 元素指定特定的样式。
      id 选择器以 "#" 来定义。
      下面的两个 id 选择器,第一个可以定义元素的颜色为红色,第二个定义元素的颜色为绿色:
    #red {color:red;}
    #green {color:green;}
    

    下面的 HTML 代码中,id 属性为 red 的 p 元素显示为红色,而 id 属性为 green 的 p 元素显示为绿色。

    <p id="red">这个段落是红色。</p>
    <p id="green">这个段落是绿色。</p>
    

    注意:id 属性只能在每个 HTML 文档中出现一次

    • 通配符选择器
      *{color:blue} 选择页面中所有元素并设置成蓝色

    • 属性选择器:对带有指定属性的 HTML 元素设置样式。
      下面的例子为带有 title 属性的所有元素设置样式:

    [title]
    {
    color:red;
    }
    

    下面的例子为 title="W3School" 的所有元素设置样式:

    [title=W3School]
    {
    border:5px solid blue;
    }
    

    下面的例子为包含指定值的 title 属性的所有元素设置样式。适用于由空格分隔的属性值:

    [title~=hello] { color:red; }
    

    下面的例子为带有包含指定值的 lang 属性的所有元素设置样式。适用于由连字符分隔的属性值:
    <p lang="en-us">Hello!</p>
    [lang|=en] { color:red; }
    下面的例子为以指定值#开头的 href 属性的所有元素设置样式。

    <a href="http:baidu.com">baidu</a>
    
    [href^="#"]{color:red}
    

    下面的例子为以指定值pdf结尾的 href 属性的所有元素设置样式。

    <a href="http://xxx.pdf">xxx.pdf</a>
    
    [href$="pdf"]{color:red}
    

    下面的例子为以包含指定值baidu的href属性的所有元素设置样式。

    <a href="http:baidu.com">xxx.pdf</a>
    
    [href*="baidu"]{color:red}
    
    • 伪类选择器
      伪类的语法:selector : pseudo-class {property: value}
      CSS 类也可与伪类搭配使用:selector.class : pseudo-class {property: value}
      在支持 CSS 的浏览器中,链接的不同状态都可以不同的方式显示,这些状态包括:活动状态,已被访问状态,未被访问状态,和鼠标悬停状态。
    a:link {color: #FF0000}     /* 未访问的链接 */
    a:visited {color: #00FF00}  /* 已访问的链接 */
    a:hover {color: #FF00FF}    /* 鼠标移动到链接上 */
    a:active {color: #0000FF}   /* 选定的链接 */
    
    input:enabled{color:#ccc;}  /*一个元素可用的状态
    input:disabled{color:#ccc;}   /*一个元素不可用的状态
    input:checked{color:#ccc;}   /*一个元素如radio被选中的状态
    
    li:first-child{color:#ccc;}  /*列表的第一项*/
    li:last-child{color:#ccc;}   /*列表的最后一项*/
    li:nth-child(even){color:#ccc;}   /*列表的偶数项*/
    li:nth-child(3n+1){color:#ccc;} 
    li:nth-last-child(3){color:#ccc;}   /*列表倒数项*/
    ul:only-child{color:#ccc;}   /*只有一个元素的列表*/
    
    dd:first-of-type{color:#ccc;}  /*第一个dd*/
    dd:last-of-type{color:#ccc;} 
    dd:nth-of-type{color:#ccc;} 
    
    span:only-of-type{color:#ccc;}   
    /*选中父元素中只有一个span元素的元素中的span并指定样式*/
    
    p:empty{color:#ccc;}   没有内容的元素
    :root  根标签
    :not()  不包含某元素的选择器
    :target
    :lang
    
    • 组合简单选择器
    img[src$=jpg]{}
    #banner:hover{}
    
    • 伪元素选择器
    ::first-letter{}  为第一个字母指定样式
    ::first-line{}  为第一行指定样式
    ::before{content:"before";}  在某个元素之前插入before
    ::after{content:"after";}  在某个元素之后插入after
    ::selection{}  用于被用户选中的内容
    
    • 组合选择器

    • 后代选择器
      后代选择器(descendant selector)又称为包含选择器。
      后代选择器可以选择作为某元素后代的元素。

      我们可以定义后代选择器来创建一些规则,使这些规则在某些文档结构中起作用,而在另外一些结构中不起作用。
      如果您希望只对 h1 元素中的 em 元素应用样式,可以这样写:

    h1 em {color:red;}
    这个规则会把作为 h1 元素后代的 em 元素的文本变为 红色。
    其他 em 文本(如段落或块引用中的 em)则不会被这个规则选中:
    
    <h1>This is a <em>important</em> heading</h1>
    <p>This is a <em>important</em> paragraph.</p>
    
    • 子选择器
      子元素选择器(Child selectors)只能选择作为某元素子元素的元素。
      如果您希望选择只作为 h1 元素子元素的 strong 元素,可以这样写:
    h1 > strong {color:red;}
    

    这个规则会把第一个 h1 下面的两个 strong 元素变为红色,但是第二个 h1 中的 strong 不受影响( 因为第二个h1中的strong元素并不直接为h1的子元素,而是h1下em元素的子元素 ):

    <h1>This is <strong>very</strong> <strong>very</strong> important.</h1>
    <h1>This is <em>really <strong>very</strong></em> important.</h1>
    
    • 相邻兄弟选择器
      如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器(Adjacent sibling selector)。
      例如,如果要增加紧接在 h1 元素后出现的段落的上边距,可以这样写:
    h1 + p {margin-top:50px;}
    
    • 通用兄弟选择器
    h2~p{}  选中h2后所有为p元素的兄弟节点
    

    选择器分组:可以用逗号来为多个具有相同样式的不同元素来指定样式。

    属性的继承:子元素会继承父元素中的属性
    自动继承

    • color
    • font
    • text-align
    • list-style
    • ...
      非继承属性
    • background
    • border
    • position
    • ...
      强制继承,将属性值设置成inherit

    css优先级


    优先级计算(其中数字为权重)
    优先级计算例子
    优先级高的样式会覆盖掉优先级低的样式

    css层叠
    相同的属性会覆盖:

    • 优先级高的覆盖掉低的
    • 优先级相同,后面覆盖掉前面的

    css改变优先级

    • 改变先后顺序
    • 提升选择器的优先级
    • !important:前两种都不可行时使用

    CSS文本

    字体

    • font-size:设置文本的大小。
      font-size:<length>|percentage
      percentage参照父元素的font-size
    font-size:12px
    font-size:2em
    
    • font-family :定义文本的字体系列。
      font-family:[<family-name>|<generic-family>]#
      <generic-family>=serif | sans-serif
      font-family:serif "宋体" 英文为serif,中文为宋体
    • font-weight:设置文本的粗细。
      font-weight:normal|bold|bolder|lighter
    • font-style:最常用于规定斜体文本。
      font-style:normal | italic(斜体) | oblique(对于没有斜体的字体强制倾斜)
    • line-height:指定行高
      line-height:normal | <number> | <length> | <percentage>
    • 为某文本设置多种文本属性
      font:[ [<font-style] || <font-weight> ] ?<font-size> [ /<line-height> ]? <font-family> ]
    font:30px/2 "Consolas",monospace;
    font:italic bold 20px/1.5 arial,serif;
    font:20px arial,serif;
    
    • color:设置文本颜色
    color:red
    color:#ff0000
    color:rgb(255,0,0)
    color:rgba(255,0,0,1)  设置颜色及透明度
    color:transparent  全透明
    

    对齐方式

    • text-align:设置一个元素中的文本行互相之间的对齐方式。
      text-align:left | right | center | justify(两端对齐)
    • vertical-align:设置垂直对齐方式
      vertical-align:baseline | sub(下标) | super(上标,例如指数表达) | top | text-top | middle | bottom | text-bottm | <percentage>(参照行高)| <length>
    • text-indent:可以方便地实现文本缩进。
      text-indent:<length> | <percentage>
      如果text-indent设置一个负的极大值,则里面的文字将跑出容器,达到隐藏文字的目的

    文本修饰

    • white-space:会影响到用户代理对源文档中的空格、换行和 tab 字符的处理。
      white-space : normal | nowrap | pre | pre-wrap | pre-line


    • word-wrap:设置长单词是否自动换行
      word-wrap:normal | break-word
    • word-break
      word-break:normal | keep-all | break-all
    • text-shadow:设置文本阴影。
      text-shadow:none | [<length>{2,3} && <color>?]#
    text-shadow:1px(x轴的偏移方向) 2px(y轴的偏移方向) 3px(阴影模糊半径)
    

    如果文字阴影中的颜色没有设置,那么阴影颜色就是文字颜色

    • text-decoration
      text-decoration:none | [underline(下划线) || overline(上划线) || line-through(贯穿线)]

    高级设置

    • text-overflow
    text-overflow: clip | ellipsis(文本溢出的时候利用...代替溢出文本)
    //要配合下面两个属性使用
    overflow:hidden
    white-space:nowrap
    
    • curosr
      cursor:[<uri>,]*[auto | default | none | help | pointer | zoom-in | zoom-out | move]

    css模型盒

    CSS 框模型 (Box Model) 规定了元素框处理元素内容、内边距(填充)、边框 和 外边距 的方式。



    每个盒子都有:边距、边框、填充、内容四个属性
    每个属性都有:上、下、左、右四个部分

    boder, padding, margin都有top, right, bottom, left四部分

    • width:指定内容区域的宽度
      width:<length> | <percentage>
    • height:指定内容区域的宽度
      height:<length> | <percentage>
    • padding:定义元素的内边距。
      padding:[<length>|<percentage>]{1,4}
      按照上、右、下、左的顺序分别设置各边的内边距,各边均可以使用不同的单位或百分比值:
    h1 {padding: 10px 0.25em 2ex 20%;}   按照顺时针顺序
    h1 {padding: 20px}  当四个方向的内边距都为20px时
    

    也可以单独设置:

    h1 {
      padding-top: 10px;
      padding-right: 0.25em;
      padding-bottom: 2ex;
      padding-left: 20%;
      }
    

    padding规则:对面相等,后者省略;4面相等,只设一个

    • margin:设置外边距
      margin:[<length>|<percentage>|atuo]{1,4}
      magin合并:(1)毗邻的元素如果相邻的边都设置了margin,则取其中大的一个值;(2)父元素与第一个或最后一个子元素的margin会合并。
      水平居中: margin:0 auto
    • border:[<border-width>||<border-style>||<border-color>]{1,4}
      border-width:[<length>|thin|medium|thick]{1,4}
      border-style:[solid|dashed|dotted|...]{1,4}
      boder-color:[<color>|transparent]{1,4}
    • border-radius:圆角边框(方向为顺时针,从左上开始)
      border-radius:[<length>|<percentage>]{1,4}[/[<length>|<percentage>]{1,4}]?
      前面四个为x方向上半径,后面四个为y方向上半径
    border-radius:50%   正圆
    

    border-radius并不是只有在设置了border的情况下才会生效。

    • overflow :设置内容溢出部分
      overflow:visible|hidden|scroll|auto
      显示溢出部分 | 不显示 | 显示垂直和水平滑动条 | 在溢出情况下显示滑动条


    • boxing-size: 用于content或者boder的尺寸
      boxing-size:content-box | border-box
    • box-shadow: none | <shadow>[,<shadow>]*<shadow>:inset?&&<length>{2,4}&&<color>?



    • outline:[<border-width>||<border-style>||<border-color>]
      outline-color: <color>|invert
      不占空间(布局时当做没有outline),border外
      如果已经有了border,可以不用设置outline

    css背景

    • background-color
    • background-image:<bg_image>[,<bg-image>]*
    background-image:url(),url();  先写的在上层,background-color始终在底层
    
    • background-repeat:设置背景平铺方式
      background-repeat:<repeat-style>[,<repeat-style>]*
      <repeat-style> = repeat-x(沿x轴平铺) | repeat-y | [repeat | space | round(缩放平铺) | no-repeat]{1,2}
    • background-attachment:<attachment>[,<attachment>]*
      <attachment>= scroll(背景不动) | fixed | local(内容背景一起动)
      设置背景是否随内容拖动而拖动
    • background-position:设置背景图位置
    background-position:0 0;
    background-position:10px 20px;  x,y分别偏移的距离
    background-position:20% 50%; 容器x的20%位置和y轴的50%便宜到容器x的20%位置和y轴的50%
    background-position:center center;
    background-position:right;
    background-position:right 10px top 20px
    
    • linear-gradient():设置颜色线性渐变
    • radial-gradient():设置圆形渐变
    • repeat-*-gradient
    • background-origin:决定背景图片(0,0)位置参考的位置
      border-box | padding-box | content-box

    相关文章

      网友评论

        本文标题:CSS 基础

        本文链接:https://www.haomeiwen.com/subject/pqtksttx.html