zoukankan      html  css  js  c++  java
  • 添加样式

    《精通csss》

    添加样式

    css选择符

    类型与后代选择符是最基本的选择符。

    • 类型选择符用于选择特定类型的元素,比如段落or标题元素。类型选择符也被称为元素选择符

      p {
          color: black;
      }
      
    • 后代选择符用于选择某个或某族元素的后代。后代选择符的写法是在两个选择符之间添加空格

      blockquote p {
          padding-left: 2em;
      }
      

    子选择符与同辈选择符

    使用相邻同辈选择符(+),可以选择位于某个元素后面并与该元素拥有共同父元素的元素。

    h2 + p {
        font-ize: 1.4em;
        font-weight: bold;
        color: #777;
    }
    

    >+ 被称为组合子,因为它们描述了自身两侧的选择符组合的方式。

    一般同辈组合子: ~

    用前面的例子来说明,使用一般同辈组合子可以选择 h2 元素后门的所有段落

    h2 ~ p {
        font-size: 1.4em;
        font-weight: bold;
        color: #777;
    }
    

    相邻同辈选择符一般同辈选择符都不会选择前面的同辈元素

    属性选择符

    • 要匹配以某些字符开头的属性值,在等号前面加上插入符(^)
    a[href^="http:"]
    
    • 要匹配以某些字段结尾的属性值,在等号前面加上美元符号($)
    img[src$=".jpg"]
    
    • 要匹配包含某些字符的属性值,在等号前面加上星号(*)
    a[href*="/about/"]
    
    • 要匹配以空格分隔的字符串中的属性值(如 rel 属性的值),在等号前面家还是那个波浪号(~)
    a[rel~=next]
    
    • 选择开头是指定值或指定值后连着一个短划线的情况(en-us),在等号前面加上竖线(|)
    a[lang|=en]
    

    这条规则可以匹配属性值 enen-us ,暗示这个选择符很适合选择属性中的语言代码,因为语言代码都是以短划线分隔的。

    理论上可以对一个 class 属性使用这个选择符,比如用来匹配 message 和 message-error,但实际上这种方法不够灵活,万一以后 message 类前面有添加了别的类名,比如 class="box message" ,这个选择符就会失效

    伪元素

    • ::first-letter 伪元素可以选择一段文本的第一个字符
    • ::first-line 伪元素可以选择一段文本的第一行

    使用伪元素插入内容时要注意,不能插入对交互有实质影响的内容,以避免CSS不能正确加载。

    另外,屏幕阅读器也没有统一的方式解释伪元素,有的会直接忽略它们,有的则会读取其中的内容

    伪类

    目标伪类::target 伪类

    它匹配的元素有一个ID属性,该属性的只出现在当前页面URL末尾的井号(#)后边

    如果打开链接 http://example/com/blog/1/#comment-3,找到该页面中标记为:

    <article class="comment" id="conment-3">...</article>
    

    的评论,可以使用以下规则高亮该条评论

    .comment:target {
        background-color: #FF6666;
    }
    

    反选伪类::not() 伪类(选择符)

    如果被标记为”投票否决(downvoted)“的评论都有一个特殊的类名,可以使用以下规则:

    .comment:target:not(.comment-downvoted) {
        background-color: #FF666;
    }
    

    结构化伪类

    1. :nth-child(n) 伪类,从第一个元素正序计算匹配第n个元素

    更多奇妙的用法:

    • odd(奇数) & even(偶数)

    • 数值表达式(3n+4 等)

      制作(模拟)CSS随机数的方法之一

    • 负值

      • :nth-child(-n+3) ,只会选择前3个元素
    1. :nth-last-child(n) 伪类,从最后一个元素倒序计算匹配第n个元素

    2. :first-child ,相当于直观版的 :nth-child(1)

    3. :last-child ,相应于 :nth-last-child(1)

    4. :only-of-type,相应选择特定类型的唯一子元素

    明智地使用结构化伪类:

    .column:nth-last-of-type(4):first-child,
    .column:nth-last-of-type(4):first-child ~ .column {
        /* 在有4个同类型 .column 元素的情况下应用此规则 */
    }
    

    如果以上规则适用,则意味着倒数第4个子元素同事也是正数的第1个子元素,也就是恰好有4个想同类型的子元素都有 .column

    1562672821431

    1562672870302

    1562672888110

    表单伪类

    • required 属性,必填属性
    <input type="text" name="field-name" id="field-name" required>
    

    如果想对这个必填框添加独特的样式,可以使用 :required 伪类

    input:required {
        outline: 2px solid #000;
    }
    
    • optional 属性,非必填属性,使用方式和 required 一样

    使用 :optional 伪类对非必填框设置样式

    input:required {
        border-color: #CCC;
    }
    
    • :valid 伪类,有效消息
    • :invaild 伪类,无效消息

    更多伪类设置,参考MDN文档:https://developer.mozilla.org/zh-CN/docs/Web/CSS/Pseudo-classes

    层叠

    CSS的关于层叠的层级概念:

    • 作者样式表,即由网站开发者所编写的样式
    • 用户样式表,用户可以通过浏览器的设置选项,为网页应用自己的样式
    • 浏览器的默认样式表

    CSS允许用户使用 !important 覆盖任何规则,包括网站作者使用的 !important 标注的规则。

    也就是说,在 !important 面前,用户样式是最大的

    之间的层级关系是:

    用户 !impotant > 作者 !important > 作者样式表 > 用户样式表 > 浏览器默认样式

    当层级相等时,后面定义的规则优先应用,即后来者覆盖掉前者设置的样式

    特殊性(权值)

    CSS对不同的情况都有不同的权值设置:

    • 内联(style=""),权值 1000
    • ID选择器(#content),权值 100
    • 类选择器(.class),权值 10
    • 元素选择器(div),权值 1
    • 通用选择符(*),权值 0,慎用(少用为好)此选择符

    权值高的规则会被优先应用

    权值相同的规则,则用“后浪推前浪”的方式应用

    层叠次序

    伪类 :hover:visited:focus:active 的权值都是一样的,也就是说,伪类的设置顺序会直接影响规则是否能被正确应用

    如果将 :visited 伪类设置在 :hover 之前,那么在访问过目标元素后,:hover 伪类的规则会被覆盖

    控制特殊性

    先为公用元素设置默认样式,然后在更特殊的元素上覆盖这些样式

    简化选择符,降低特殊性:

    body {
        color: black;
    }
    .intro {
        font-size: 1.2em;
        color: gray;
    }
    .intro-highlighted {
        color: black;
        background: lightgray;
    }
    .intro-hightlighted a {
        color: green;
    }
    a .call-to-action {
        text-decoration: none;
        background-color: green;
        color: white;
        padding: 10px;
    }
    

    去掉ID选择符,把所有选择符的特殊性降到最低。

    去掉介绍性文本上下文的引用。

    利用特殊性,可以为公用元素设置默认样式,然后在更特殊的元素上覆盖这些样式

    继承

    继承的属性值没有任何特殊性,其权值连0都说不上。

    这意味着使用特殊性为0的通用选择符设置的样式都可覆盖继承的样式

    * {
        color: black;
    }
    h2 {
        color: red;
    }
    
    <h2>Hello world!<em>this is CSS</em></h2>
    

    表面上看,em 元素会继承 h2 的红色字体,但实际上 em 元素的样式被通用选择符设置的黑色字体样式覆盖了

    所以更好的利用继承,可以设置 body 的样式,这样所有的元素都会继承 body 设置的样式,也就不会发生未知覆盖了

    正如合理利用层叠可以简化CSS一样,合理利用继承有助于减少选择符的数量,降低复杂性。

    不过如果有大量的元素继承了不同的样式,那么查找样式的来源会比较麻烦

    为文档应用样式文件

    为网页引用添加css样式有两个方案(@import可以单独使用,亦可结合 link / style 元素使用)

    • style元素

    优点: 无需等待下载,打开即用

    缺点:元素内设置的样式无法复用

    • link元素

    优点:相当灵活,可多次复用样式

    缺点:若文件较大或网络环境不佳,页面无样式会使体验变差

    • @import命令

    优点:更灵活

    缺点:需要下载所有被 import 的文件,下载量大

    性能

    度量Web性能的一个重要指标是页面打开到完全显示的时间,也称为“渲染时间” or “上屏时间”

    在CSS层面提高页面性能的方法:

    1. 减少HTTP请求

    线上网页最好把需要加载的CSS文件数量控制在1~2个。

    只用一个 link 元素加载CSS文件,然后在文件中使用 @import,并不能把请求控制为1个

    线上网页中尽量不要使用 @import

    1. 压缩和缓存内容

    使用 GZIP 压缩线上资源。

    1. 不让浏览器渲染阻塞 JavaScript

    讲js文件放置到body结束标签前的位置,且给js文件添加以下两种属性:

    • async 属性,异步加载脚本,不阻塞 HTML 解析,但会在脚本加载完成执行时阻断HTML解析
    • defer 属性,异步加载脚本,但在HTML解析完成后再执行加载的脚本

    至于两种属性使用哪一个,要看js脚本的内容

  • 相关阅读:
    嘿,新年快乐
    最近无状态~
    奥巴马:我们为什么要上学
    大学学不会逃课是不会有出息的!
    赫赫,给红十字捐款的sb了吧
    狄仁杰你敢不装逼吗
    腾讯qq开始耍威胁用户的无赖手段了
    <转>关于信仰
    恩,老了~~~
    Vue 2.0学习笔记: Vue中的computed属性
  • 原文地址:https://www.cnblogs.com/CreateBox/p/15196036.html
Copyright © 2011-2022 走看看