了解CSS学习(2) | 青训营笔记

985 阅读9分钟

这是我参与「第四届青训营 」笔记创作活动的第3天。

笔记小结: 作为一个前端,一定要懂怎么用css。页面写多了,一些css真的就跟呼吸一样简单,而且UI框架成熟,自己积累下来的css封装好的东西成熟。有时候根本就不用写css,只需要装填class。使用flex.这类布局方式,做页面。

伪类(pseudo-classes)

  1. 不基于标签和属性定位元素
  2. 几种伪类
  • 状态伪类
  • 结构性伪类

概念:

CSS伪类(Pseudo-classes)用于定义元素的特殊状态,用来添加一些选择器。 的特殊效果。下面我们分四种了解伪类,分别是first-child伪类、超链接伪类、CSS类和伪类、其他伪类。

一、first-child伪类

概念: first-child 伪类来选择父元素的第一个子元素,选择器匹配作为任何元素的第一个子元素的 <p> 元素。

语法: 子元素(选择器)+ 空格 +  first-child +  {定义的样式};

代码示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>伪类 伪元素</title>
    <style>
        h4:first-child{color: olivedrab;}
    </style>
</head>
<body>
    <h4>我是html父标签的第一个元素,且为h4标签,所以我是变绿了</h4>
    <h4>我是html标签的第二个元素,所以我不变色</h4>
    <hr>
    <div>
        <h4>我是第一个div标签里的第一个元素,且为h4标签,所以我变绿了</h4>
        <h4>我是第一个div标签里的第二个h4标签内容,所以我不变色</h4>
    </div>
    <hr>
    <div> 
        <p>我是第二个div标签里的第一个元素,但是我是p标签,所以我不变色</p>
        <h4>我是第二个div标签里的第一个h4标签,但我不是div的第一个元素,所以我不变色</h4>
       
    </div>
    
</body>
</html>

代码解析:

(1)通过观察代码得知first-child伪类是放在sytle标签里的,再看看运行结果的“自述”,我们可以得出结论:first-child伪类的实现,需要满足2个条件,条件1是子元素必须是first-child规定的元素,条件2是子元素必须是父元素的第一个(first)元素,只有2个条件同时满足,first-child伪类便会实现。

(2)div标签

<div> 标签定义 HTML 文档中的一个分隔区块或者一个区域部分。<div>标签常用于组合块级元素,以便通过 CSS 来对这些元素进行格式化。<div> 元素经常与 CSS 一起使用,用来布局网页。

例如百度页面中有很不同的内容,有导航栏、logo标题、推荐内容、百度热搜等,这些不同区域的内容都可以使用 div 分隔,再使用 css 样式对其进行排版,使其在页面中“摆放”在不同位置。div 间的关系有并列有嵌套,嵌套可以一套一也可以一套多。

二、超链接伪类

在支持 CSS 的浏览器中,用超链接伪类实现链接的不同状态以不同的方式显示,例如设置超链接未被访问时的颜色、已访问时的颜色、鼠标滑过时的颜色、选中后的颜色。未访问颜色的设置使用 link 伪类、已访问使用visited、鼠标滑过使用hover、已选中使用active。

代码示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>超链接伪类</title>
    <style>
       /* 未访问的链接,显示黑色 */
       a:link {
           color:black;
        }
       /* 已访问的链接,显示灰色*/
       a:visited {
           color:gray;
        }
       /* 鼠标悬停链接,显示绿色 */
       a:hover {
           color:olivedrab;
        }
       /* 已选择的链接,显示橙色 */
       a:active {
           color:orange;
        }
    </style>
</head>
<body>
    <a href="http://csdn.com">我是链接一</a>
    <br>
    <a href="http://www.w3school.com">我是链接二</a>
</body>
</html>

代码解析:

未访问链接字体颜色命名为 link 、已访问链接字体颜色命名为visited、鼠标滑过时链接字体颜色命名为hover、已选中链接字体颜色命名为active,对链接进行不同操作,显示不同颜色。

使用超链接伪类使得制作出来的页面更加精美,需要注意 hover 必须写再 link 和 visited 之后,active 必须放在 hover 之后,否则无法生效。

三、CSS类和伪类

代码示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS类和伪类配合使用</title>
    <style>
        .highlight{
            color: #ff0000;
        }
    </style>
</head>
<body>
    <h4 class="highlight">我使用了类样式,所以生效了</h4>
    <h4 >我没有使用类样式,所以不生效</h4>
</body>
</html>

代码解析:

当元素h4调用CSS类highlight时,样式生效,如果使用伪类就不需要调用,伪类是提前定义好的。

四、其他伪类

代码示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>其它伪类</title>
    <style>
        ul li:first-child{color:green;}
        p a:last-child{color:hotpink;}
        div p span:first-child{color:yellow}
    </style>
</head>
<body>
    <b>例子一:</b>
    <ul>
        <li>第一项值</li>
        <li>第二项值</li>
        <li>第三项值</li>
    </ul>
    <ul>
        <li>第一项值</li>
        <li>第二项值</li>
        <li>第三项值</li>
    </ul>
    <hr>
    <b>例子二:</b>
    <p>我是p标签</p>
    <p>
        我是 p 元素内容
        <br>
        <a href="http://www.csdn.com">这是 p 元素下的 a 标签1</a>
        <br>
        <a href="http://www.baidu.com">这是 p 元素下的 a 标签2</a>
        <br>
        <a href="http://www.taobao.com">这是 p 元素下的 a 标签3</a>
    </p>
    <hr>
    <b>例子三:</b>
    <div>
        <p>
            p1内容
            <span>span内容1</span>
            <span>span内容2</span>
            p1内容
        </p>
        <p>
            p2内容
            <span>span内容3</span>
            p2内容
        </p>
    </div>
</body>
</html>

代码解析

定义了3种伪类,分别是ul li:first-child{color:green;}、 p a:last-child{color:hotpink;}和div p span:first-child{color:yellow;},其中:

  • first-child------表示父元素指定的第一个子元素,前面介绍过了。
  • last-child------表示父元素指定的最后一个子元素,语法格式和first-child一样都是 父元素+空格+子元素
  • ul li:first-child{color:green;}--------表示ul标签里的第一个元素是li标签时,li标签使用该样式。
  • p a:last-child{color:hotpink;}-------表示p标签里的第一个元素是a标签时,a标签使用该样式。
  • div p span:first-child{color:yellow;}-表示div标签里的第一个元素是lp标签,并且p标签的第一个元素是span标签时,span标签使用该样式。

伪元素

CSS 伪元素用于设置元素指定部分的样式。伪对象语言创造的元素不存在在DOM文档中,是虚拟的元素。伪元素代表某个元素的子元素,这个子元素虽然在逻辑上存在,但却并不实际存在于文档树中。

伪对象用于将特殊的效果添加到某些选择器。

语法规制为:选择器 :: 伪元素{属性:值}

一、伪对象表

伪元素说明
:after与content属性一起使用,定义在对象后的内容
:before与content属性一起使用,定义在对象前的内容
:first-letter定义对象内第一个字符的样式
:first-line定义对象内第一行的样式

CSS中的颜色

常用的有几种方式:

一、十六进制颜色:

#RRGGBB,其中RR:红色,GG:绿色,BB:蓝色;

(注意:所有取值必须在 0 和 FF之间,F是16)

二、RGB颜色

rgb(红,绿,蓝)

(注意:每个参数的取值在0~255之间;例如:rgb(255,255,255)为黑色;rgb(255,0,0)为红色);

三、英语简写颜色

red(红),green(绿),blue(蓝),pink(粉);

四、HSL颜色

其中HSL :(色调,饱和度,亮度)

色调(色相): 是在色轮上的程度(0~360)其中:0是红色,120是绿色, 240是蓝色

饱和度: 百分比计算,0%为灰色;100%的阴影是全彩的哦

亮度: 也是百分比计算,0%是黑色,100%是白色;

五、HSLA颜色

HSLA:(色调,饱和度,亮度,α)

α是透明度:取值范围为0~1之间

字体font-family

设置元素的字体,可以同时指定多个,如果浏览器不支持第一个字体,则会尝试下一个,可以设置字体或字体系列。
如:font-family: Arial, sans-serif;
如果不设置font-family则使用浏览器默认字体,如果设置的font-family无效,也会fallback到浏览器的默认字体。

书写字体规则

在介绍字体规则前,有几点是需要注意的:
1、不同平台,预置的字体并不相同。比如Helvetica和苹方也只有苹果系统内置,微软雅黑只有windows系统内置(由于很多人安装Office的缘故,Mac电脑中也会出现微软雅黑字体),android 和 iOS 系统内置的字体各不相同。
2、字体是有版权的,但是如果没有引用外部字体文件(如 Web font 或者内嵌到 App 中),而仅仅是在 CSS 中指定字体名称,不需要购买授权,因为其只是一段声明,表示期望浏览器优先使用某种字体渲染文本。
3、中文网站涉及两种文字类型:西文字体和中文字体,西文字体包括英文数字等,不包括中文,但是中文字体一般包括英文和数字,我们一般先设置西文字体,后设置中文。
4、如果字体包含空格或者是中文,需要添加引号。
5、大部分字体全名中会包含字体粗细、斜体(italic)、长体(condensed)等具体属性,但一般不建议直接使用,字体的风格应该在 CSS 中通过 font-weight、font-style、font-stretch等属性指定,由浏览器决定实际渲染的字体。
6、font-family属于可继承属性,全局的font-family一般设置在body元素上。\

字体定义大致规则

1、西文在前,中文在后
中文字体大多都包含西文,但西文的部分又不好看,而西文不包含中文,通常先定义西文,后定义中文以达到更优的显示效果。

2、优先使用system-ui
system-ui使用当前系统的默认字体,让web页面和操作系统的风格统一,体验更好。

3、兼顾不同的操作系统
选择字体的时候要考虑不同的操作系统,还需要考虑旧版本操作系统的用户。
即便是同一个字体在不同的操作下也会有细微的差别,我们要尽量做到相同系统使用同一种字体,保证同一个系统下的字体一致性。对于不同系统尽量保证字体风格接近,比如都使用无衬线字体。
为了保证苹果系统中使用更优雅的中文字体,优先声明苹方字体, 对于不支持苹方的低版本macOS,使用Hiragino Sans GB(冬青黑体)字体做兜底。
如果需要兼容Linux系统,还需要添加WenQuanYi Micro Hei(文泉驿微米黑)字体。
如果需要兼容不同平台的表情符号,一般在sans-serif后添加"Apple Color Emoji", “Segoe UI Emoji”, “Segoe UI Symbol”, "Noto Color Emoji"等字体。

4、以serif或sans-serif字体族结尾
为了保证在各种不同环境或条件下显示正常,我们一般将sans-serif放在字体的后面,非衬线字体在显示器中的显示效果更好。

5、简洁实用
字体设置并不是越多越好,在能满足设计需求的情况下尽量简洁。相同系统下中西文字体各有一个fallback即可,不需要太多。

调试CSS

1. 右键点击页面,选择「检查」

2. 使用快捷键

  • Ctrl+Shift+I(windows)
  • Cmd+Opt+I(Mac)