CSS基础(三)

CSS伪类选择器

几种状态伪类

  • E:link 链接未被访问前状态
  • E:visited 链接已访问后状态
  • E:hover 鼠标在其元素上的悬浮状态
  • E:active 元素被激活状态下(鼠标点击与释放之间)
  • E:focus 鼠标点击并松开后的状态或者元素处于输入焦点状态(可用于button点击状态)
  • 对于a标签的几种状态伪类,其书写顺序为:
    :link(访问前)、:visited(访问后)、:hover(鼠标移入)、:active(鼠标点击)、:focus(鼠标点击并释放后)

CSS3新增的选择器

  • 子级选择器 >
    parent>child

    > 符号之前书写父级的选择器,> 符号之后写子级选择器,必须满足父子级关系才能选中标签

    选中的是直接子代

  • 兄弟选择器 +~

    • 相邻兄弟选择器 +
      prev+next

      选中的是紧跟在prev后面的下一个同级元素next(拥有同一父元素)

    • 同级兄弟通用选择器 ~
      prev~Siblings

      选中的是prev后面的所有同级兄弟元素Siblings(拥有同一父元素)

  • 属性选择器
    选择带有某种属性的所有元素

    选择器 描述
    E[attr] 选择具有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[attr1][attr2] 匹配同时具有attr1和attr2属性的E元素
  • 结构伪类选择器

    选择器 描述
    E:first-child 匹配父元素中的第一个子元素E
    E:last-child 匹配父元素中最后一个E元素
    E:nth-child(n) 匹配父元素中的第n个子元素E
    E:first-of-type 选择父元素下的指定类型E的第一个元素
    E:last-of-type 选择父元素下的指定类型E的最后一个
    E:nth-of-type(n) 选择父元素下的指定类型E的第n个

    其中n 可以是数字,关键字和公式。公式一般n从0开始一直递增(第 0 元素或者超出了元素的个数会被忽略)

    nth-child(n)与nth-of-type(n)的区别

    • E:nth-child(n):选择的是父元素下的第n个子元素,并且该元素的类型为E,须同时满足两个条件,否则不生效。
      例如:div p:nth-child(1){} 选中的是div下的第一个子元素,且该元素是p标签,否则不生效

    • E:nth-of-type(n): 选择的是父元素下的同类型E中的第 n 个同级兄弟元素,会忽略其他同级的非同类型元素
      例如:div p:nth-of-type(1){} 选中的是div下的所有p元素中的第一个p标签

  • 目标伪类选择器 :target
    突出显示,选中被激活的HTML锚点元素(相关url指向的E元素)
    :target/E:target

  • UI状态伪类
    :checked :匹配用户界面上处于选中状态的元素E
    :enabled :匹配用户界面上处于可用状态的元素E
    :disabled :匹配用户界面上处于禁用状态的元素E

  • 否定伪类 :not(selector)
    将指定选择器selector匹配到的元素排除出去

  • 伪元素选择器

    选择器 描述
    E::before 在 E 元素内部的前面添加一个元素
    E::after 在E元素内部的后面添加一个元素
    E::first-letter 匹配E元素内的第一个字母
    E::first-line 匹配E元素内的第一行文本
  • CSS3中伪元素的双冒号和单冒号的区别
    区别:双冒号是CSS3的新规范,单冒号是CSS2中的写法,两者等效,IE兼容性上单冒号比双冒号好,并且CSS3规范上,双冒号表示伪元素,而单冒号表示伪类

    对于伪元素注意事项

    • 伪元素只能应用于双标签
    • 伪元素中的冒号不能与元素之间存在空格
    • 伪元素(::before、::after)内部必须添加content属性,content:"";
    • 常用的::before和::after创建的元素属于行内元素
  • 伪类与伪元素的区别
    根据W3C对两者应用的描述:

    • 伪类:用于向某些选择器添加特殊的效果
    • 伪元素:用于将特殊效果添加到某些选择器中

    对于伪类,从字面上可以理解为一种虚拟的类class,伪类所产生的效果可以通过对已有的元素添加一个实际的类来达到。

    而对于伪元素,可以理解为一种虚拟的元素,伪元素所产生的效果可以通过添加一个真实的新元素,再为其添加css样式,从而达到效果。

    两者根本区别在于是否会创建一个新元素

选择器权重
基础选择器:id选择器 > 类选择器 > 标签选择器 > *
伪类选择器、属性选择器的权重等于类选择器
伪元素选择器的权重等于标签选择器


CSS3新增属性

  • CSS3盒模型(box-sizing属性)
    content-box

    • 默认值,标准模式(Standard),width、height属性值只包含内容宽高,不包括padding和border
    • 盒子的大小为width(height) + padding + border,内容区域为width和height部分

    border-box

    • 怪异模式(Quirks),width、height属性值包含内容宽高、padding、border
    • 盒子的大小为width和height,添加padding和border之后,内容区域就会相应缩小
  • 边框圆角border-radius
    设置边框圆角,px、%(IE8及以下不支持该属性)

    属性值有两种方式

    • x-radius/y-radius: 水平半径 / 垂直半径
    • radius: 水平、垂直半径设置一个值

    border-radius的书写方式类似于padding、margin

    也可以给某一个角设置圆角,如borde-top-left-radius(top-left、top-right、bottom-right、bottom-left)

  • 文字阴影text-shadow
    设置文字阴影效果

    h-shadow(水平阴影位置)、v-shadow(垂直阴影位置)、blur(模糊程度)、color(阴影颜色)

    可以设置多层阴影,每层阴影的属性值用,隔开(先写的阴影会压盖后写的)
    text-shadow:3px 3px 2px #ff0 , 6px 6px 2px #f0f

  • 盒子阴影box-shadow
    为盒子的边框添加阴影效果

    h-shadow(水平阴影位置)、v-shadow(垂直阴影位置)、blur(模糊程度)、spread(阴影面积)、color(阴影颜色)、inset(设置为内部阴影)

    可以设置多层阴影,用,隔开(先写的阴影会压盖后写的)
    box-shadow:3px 3px 5px 4px #ff0 , 7px 7px 5px 4px #f0f

  • 过渡属性transition
    给元素设置属性改变的动画效果(IE9及以下不支持,Safari需要给属性加前缀-webkit-)

    属性值

    • transition-property:过渡属性名(none、具体属性名、all)
    • transition-duration:过渡时间(s秒,单位必须写)
    • transition-timing-function:运动曲线(linear、ease等)
    • transition-delay:延迟执行时间
  • 2D转换和3D转换属性transform
    IE10、Firefox/Opera支持transform属性,而Chrome和Safari需要添加前缀-webkit-,IE9需要添加前缀-ms-

    2D转换

    • 对元素进行移动、缩放、旋转、拉长或拉伸

    • 位移translate()
      translate(x, y): 水平、垂直方向位移距离
      translate(x): 水平方向的位移

    • 缩放scale()
      scale(x, y): 缩放宽度x、高度y
      scale(n): 表示宽高同时缩放n倍
      scaleX(n)、scaleY(n)

    • 旋转rotate()
      书写语法;rotale(数值deg)
      deg为度数单位,正数为顺时针,2D只有一个属性值,元素旋转后,坐标轴也会改变

    • 斜切(倾斜)skew()
      transform:skew(x,y)
      水平、垂直方向的倾斜角度

    • 变换原点transform-origin
      transform-orign: x y ;
      两个值,中间用空格隔开
      x:left、center、right、像素值、%
      y:top、center、bottom、像素值、%

    3D转换

    • 透视属性perspective
      设置在Z轴的视线焦点的观察位置,从而视线3D效果
      像素值越大,观察点距离Z轴原点越远,图形效果越完整且接近原始尺寸
      perspective属性设置在3D变换元素的父级

    • transform-style属性
      设置被嵌套的子元素在父元素的 3D 空间中显示,子元素是否保留 3D 空间
      flat: 默认值,子元素2D平面呈现
      preserve-3d: 保留3D空间,呈现真正的3D效果
      transform-style属性设置给 3D 变换图形的父级

    因此,要实现真正的3D效果,最好是给进行3D变换的元素的父级同时添加3D环境和透视属性

    • 方法
      transform-style:preserve-3d;
      perspective:1000px;

    • 3D旋转
      正值表示沿对应轴顺时针旋转
      rotateX()、rotateY()、rotateZ()

    • 3D位移
      正值向对应轴的正方向移动
      translateX()、translateY()、translateZ()

  • CSS3动画属性 animation方法 + @keyframes规则
    @keyframes规则

    • 用于创建动画,使用百分比来规定动画的关键帧,也可以使用关键字"from"和"to"来表示,等同于0%(动画开始关键帧)和100%(动画结束关键帧)
    • 每一个关键帧中写元素变化的CSS样式
      @keyframes 动画名称{
         0%{/*元素动画初始的css样式*/}
         25%{/*css变化样式*/}
         50%{/*css变化样式*/}
         75%{/*css变化样式*/}
         100%{/*元素动画结束的css样式*/}
       }
      

    animation属性方法

    • 用于对动画进行绑定
    • 要实现真正的动画,需要将@keyframes中创建的动画绑定到某个选择器上,否则不生效
    • 属性值:
      • animation-name
        @keyframes定义的动画名称

      • animation-duration
        动画时间(一个周期,s/ms),默认为0

      • animation-timing-function
        动画的速度曲线默认'ease'

      • animation-delay
        动画延迟执行时间,默认为0

      • animation-iteration-count
        动画次数,默认是1,infinite(无限循环)

      • animation-direction
        动画是否反向,可选值有:

        • normal:默认值(0% ~ 100%)
        • reverse: 反向(100% ~ 0%)
        • alternate: 往返
    • animation语法:
      animation: 动画名称 动画时长 速度曲线 动画次数 延时时间;
      其中,动画名称和动画总时长是必需设置的,其他为可选属性值,不写则以默认值加载
  • 动画使用步骤

    1. 声明动画 @keyframes:
      指定动画名称 ,如: @keyframes move { }
      指定动画关键帧(0% ~ 100%)
    2. 为元素调用动画:
      animation,指定动画名以及动画时长、动画次数等,如 animation: move 3s;

    案例:实现一个元素先水平向右移动500px,然后向下移动500px,然后向左移动500px,最后向上500px回到原位,5S完成动画并一直重复

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>@keyframes和animation实现动画</title>
      <style>
        .box {
          width: 550px;
          height: 550px;
          border: 1px solid #000;
          margin: 50px auto;
          position: relative;
        }
    
        .ball {
          width: 50px;
          height: 50px;
          border-radius: 50%;
          background-color: #f00;
          position: absolute;
          left: 0;
          top: 0;
        }
    
        @keyframes move {
          0% {
            left: 0;
            top: 0;
          }
    
          25% {
            left: 500px;
            top: 0;
          }
    
          50% {
            left: 500px;
            top: 500px;
          }
    
          75% {
            left: 0;
            top: 500px;
          }
    
          100% {
            left: 0;
            top: 0;
          }
        }
        .ball {
          animation: move 5s infinite;
        }
      </style>
    </head>
    
    <body>
      <div class="box">
        <div class="ball"></div>
      </div>
    </body>
    
    </html>
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容