CSS(第二章)

    技术2022-07-10  99

    Emmet语法

    Emmet语法的前身是Zen coding,它是用来缩写,来提高html/css的编写速度,VScode内部已经集成该语法

    快速生成HTML结构语法快速生成CSS样式语法

    快速生成HTML结构语法

    生成标签,直接输入标签名,按tab键即可,比如 div 然后 tab 键,就可以生成 如果想要生成多个相同标签,加上 * 就可以了,比如 div*3 就可以快速生成3个div如果有父子级关系的标签,就可以用 > ,比如 ul> li 就可以如果有兄弟关系的标签,用 + 就可以了,比如 div + p如果生成带头类名或者id名字的,直接写 .demo 或者 #demo ,按tab键就可以了如果生成的div类名室友顺序的,可以用自增符号 $如果想要在生成的标签内部写内容可以用 {} 表示

    快速生成CSS样式语法

    CSS基本采取简写形式即可

    比如 w200 按 tab 可以生成 width: 200px;比如 lh26 按 tab 可以生成 line-height: 26px;

    快速格式化代码

    VScode 快速格式化代码:shift + alt + f

    也可以设置当我们保存页面的时候自动格式化代码:

    文件 —> 【首选项】 —> 【设置】

    搜索 emmet.include

    在 settings.json 下的【用户】中添加一下语句:

    “edito.formatOnType”:true;“editor.formatOnSave”:true;

    只需要设置一次即可,以后都可以自动保存格式化代码

    1. CSS 的复合选择器

    1.1 什么是复合选择器

    在 CSS 中,可以根据选择器的类型把选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基本选择器进行组合形成的。

    复合选择器可以更准确,更高效的选择目标元素(标签)复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的常用的复合选择器包括:后代选择器、子选择器、并集选择器、伪选择器等等

    1.2 后代选择器(重要)

    后代选择器又称为包含选择器,可以选择父元素里面的子元素。其写法就是把外层标签写在前面,内层标签写在后面,中间空格分隔。当标签发生嵌套时,内层标签就成为外层标签的后代。

    语法:

    元素1 元素2 { 样式声明 }

    上述语法表示选择元素1 里面的所有元素2(后代元素)

    例如:

    ul li { 样式声明 } /* 选择 ul 里面所有的 li标签元素 */ 元素1 和 元素2 中间用 空格 隔开元素1 是父级,元素2 是子级,最终选择的是元素2元素2 可以是儿子,也可以是孙子等,只要是元素1 的后代即可元素1 和 元素2 可以是任意基础选择器

    1.3 子选择器(重要)

    子元素选择器(子选择器)只能选择作为某元素的最近一级子元素,简单理解就是选亲儿子元素

    语法:

    元素1 > 元素2 { 样式声明 }

    上述语法表示选择元素1 里面的所有直接后代(子元素)元素2.

    例如:

    div > p { 样式声明 } /* 选择 div 里面所有最近一级 p 标签元素 */ 元素1 和 元素2 中间用 大于号 隔开元素1 是父级,元素2 是子级,最终选择的是元素2元素2 必须是亲儿子,其孙子、重孙之类的都不归他管,你也可以叫他 亲儿子选择器

    1.4 并集选择器(重要)

    并集选择器可以选择多组标签,同时为他们定义相同的样式。通用于集体声明。

    并集选择器是各选择器通过英文逗号(,)连接而成,任何形式的选择器都可以作为并集选择器的一部分

    语法:

    元素1,元素2 { 样式声明 }

    例如:

    ul,div { 样式声明 } /* 选择 ul 和 div标签元素 */ 元素1 和 元素2 中间用 逗号 隔开逗号可以理解为 和 的意思并集选择器通常用于集体声明

    1.5 伪类选择器

    伪类选择器用于向某些选择器添加特效的效果,比如给链接添加特殊效果,或选择第1个,第n个元素。

    伪类选择器书写最大的特点是用好猫(:)表示,比如 :hover、:first-chidl

    因为伪类选择器有很多,比如有链接伪类、结构伪类等等

    选择器描述a:link选择所有未被访问的链接a:vieited选择所有已被访问的链接a:hover选择鼠标指针位于其上的链接a:active选择活动链接(鼠标按下未弹起的链接)

    1.6 链接伪类选择器

    一、链接伪类选择器注意事项

    二、链接伪类选择器实际开发中的写法

    链接伪类选择器注意事项: 为了确保生效,请按照 LVHA 的顺序声明记忆法: lover hate 或者 lv 包包 hao因为 a 链接在浏览器中具体默认样式,所以我们实际工作中都需要给链接单独指定样式

    链接伪类选择器实际开发中的写法:

    /* a 是标签选择器 所有的链接 */ a { color: red; } /* :hover 是链接伪类选择器 鼠标经过 */ a:hover { color: gray; /* 鼠标经过的时候,由原来的 红色 变成了 灰色 */ }

    1.7 :focus 伪类选择器

    :focus 伪类选择器用于选取获得焦点的表单元素

    焦点就是光标,一般情况类表单元素才能获取,因此这个选择器也只要针对表单元素来说。

    input:focus { background-color:yellow; }

    1.8 复合选择器总结

    选择器作用特征使用情况隔开符号以及用法后代选择器用来选择后代元素可以是子孙后代较多符号是空格 .nav a子代选择器选择最近一级元素只选择亲儿子较少符号是大于 .nav > p并集选择器选择某些相同样式的元素可以用于集体声明较多符号是逗号 .nav,.header链接伪类选择器选择不同状态链接跟链接相关较多重点记住a{} 和 a:hover 实际开发的写法:focus选择器选择获取光标的表单跟表单相关较少input:focus 记住这个写法

    2. CSS的元素显示模式

    了解元素的显示模式可以更好的让我们布局

    什么是元素的显示模式元素显示模式的分类元素显示模式的转换

    2.1 什么是元素显示模式

    作用:网页的标签非常多,在不同地方会用到不同类型的标签,了解他们的特征可以更好的布局我们的网页

    元素显示模式就是元素(标签)以什么方式进行显示,比如

    自己占一行,比如一行可以放多个

    HTML元素一般分为块级元素和行内元素两种类型

    2.2 块级元素

    常见的块级元素欲偶

    ~

    、 、 、 等,其中 标签是 最典型的块级元素

    块级元素的特点:

    比较霸道,自己独占一行高度、宽度、外边距一级内边距都可以控制宽度默认是容器(父级宽度)的100%是一个容器及盒子,里面可以放行内或者块级元素

    注意:

    文字类的元素内不能使用块级元素

    标签主要用于存放文字,因此

    里面不能放块级元素,特别是不能放 div

    同理:

    ~

    等都是文字类块级标签,里面也不能放其他块级元素

    2.2 行内元素

    常见的行内元素有、、、、、、、、、等,其中标签是最典型的行内元素,有的地方也将行内元素成为内联元素。

    行内元素的特点:

    相邻行内元素在一行上,一行可以显示多个高、宽直接设置是无效的默认宽度就是它本身内容的宽度行内元素只能容纳文本或其他行内元素

    注意:

    链接里面不能再放链接特殊情况链接里面可以放块级元素,但是给转换以下块级模式最安全。

    2.3 行内块元素

    在行内元素中有几个特殊的标签 、、,他们同时具有块级元素和行内元素的特点。

    有些资料称他们为行内块元素

    行内块元素的特点:

    和相邻行内元素(行内块)在一行上,但是他们之间会有空白缝隙,一行可以显示多个(行内元素特点)默认宽度就是它本身的宽度(行内元素特点)高度、行高、外边距以及内边距都可以控制(块级元素特点)

    2.4 元素显示模式总结

    元素模式元素排列设置样式默认宽度包含块级元素一行只能放一个块级元素可以设置宽度高度容器的100%容器级可以包含任何标签行内元素一行可以放多个行内元素不可以直接设置宽度、高度它本身内容的宽度容纳文本或则其他行内元素行内块元素一行放多个行内块元素可以设置宽度和高度它本身内容的宽度

    2.5 元素显示模式的转换

    特殊情况下,我们需要元素模式的转换,简单理解:一个模式的元素需要另外一种模式的特性,比如想要增加链接的触发范围

    转换为块级元素:display:block;转换为行内元素:display:inline;转换为行内块元素:display:inline-block;

    2.6 一个小工具的使用 snipaste

    Sinpsate 是一个简单但强大的截图工具,也可以让你截图贴回到屏幕上

    常用快捷方式:

    F1可以截图,同时测量大小,设置箭头、书写文字等F3在桌面置顶显示点击图片,alt可以取色(按下shift可以切换取色模式)按下esc取消图片显示

    案例:简洁版小米侧边栏

    案例的核心思路分为两步:

    把链接a转换为块级元素,这样链接就可以单独占一行,并且有宽度和高度鼠标经过a给链接设置背景颜色

    HTML代码:

    <a href="#">手机 电话卡</a> <a href="#">电视 盒子</a> <a href="#">笔记本 平板</a> <a href="#">出行 穿戴</a> <a href="#">只能 路由器</a> <a href="#">健康 儿童</a> <a href="#">耳机 音响</a>

    CSS代码:

    <style> a,body { margin: 0; padding: 0; } a { display: block; width: 200px; height: 40px; background-color: #55585a; text-decoration: none; color: #fff; line-height: 40px; padding-left:30px; } a:hover { background-color: #ff6700; } </style>

    2.8 单行文字垂直居中的原理

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JqtOkHhA-1593531329600)(C:\Users\user\AppData\Roaming\Typora\typora-user-images\image-20200612191240281.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oBSZbY4S-1593531329602)(C:\Users\user\AppData\Roaming\Typora\typora-user-images\image-20200612191256201.png)]

    简单理解:行高的上空隙和下空隙把文字挤到中间了,是如果行高小于盒子高度,文字会偏上,如果行高大于盒子高度,则文字偏下。

    3. CSS的背景

    通过CSS背景属性,可以给页面元素添加背景样式

    背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图片固定等

    3.1 背景颜色

    background-color 属性定义了元素的背景颜色

    background-color: 颜色值;

    一般情况下元素背景颜色默认值是transparent(透明),我们也可以手动指定背景颜色为透明色

    3.2 背景图片

    background-image 属性描述了元素的背景图像,实际开发常见于logo 或者一些装饰性的小图片或者是超大的背景图片,优点是费查那个便于控制位置(精灵图也是一种运用场景)

    background-image: none | url(url路径) 参数值作用none无背景图片(默认值)url使用绝对路径或者相对路径指定背景图像

    3.3 背景平铺

    如果需要在HTML页面上对背景图像进行平铺,可以使用 background-repeat 属性

    background-repeat: repeat | no-repeat | repeat-x | repeat-y 参数值作用repeat背景图像在纵向和横向上平铺(默认值)no-repeat背景图像不平铺repeat-x背景图像在横向上平铺repeat-y背景图像在纵向上平铺

    3.4 背景图片位置

    利用 background-position 属性可以改变图片在背景中的位置

    background-position: x y;

    参数代表的意思是:x坐标和y坐标,可以使用单位标识符组成的长度值

    参数值说明length百分数 | 由浮点数字和单位标识符组成的长度positiontop | center | bottom | left | center | right 方位名词

    参数是方位名词

    如果指定的两个值都是 方位名词,则两个之前后顺序无关,比如 left top 和 top left 效果一致

    如果只指定了一个方位名词,另一个值省略,则第二个值默认居中对齐

    参数是精确单位 如果参数值是精确坐标,那么第一个肯定是x坐标,第二个一定是y坐标如果只指定一个数值,那么该数值一定是x坐标,另一个默认垂直居中

    参数是混合单位

    ​ 如果指定的两个值都是精确单位和方位名词混合使用,则第一个值是x坐标,第二个值是y坐标

    3.5 背景图像固定(背景附着)

    background-attachment 属性设置背景图像是否固定或者随着页面的其余部分滚动

    background-attachment 后期可以制作视差滚动的效果

    background-attachment: scroll | fixed; 参数作用scroll背景图像时随着对象内容滚动(默认值)fixed背景图像固定

    3.6 背景复合写法

    为了简化背景属性的代码,我们可以将这些属性合并并简写在同一个属性 background 中,从而节约代码量

    当使用简写属性时,没有特定的书写顺序,一般习惯约定顺序为:

    background: 背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置;

    backghround: transparent url(image.jpg) repeat-y fixed top;

    这是实际开发中,我们更提倡的写法。

    3.7 背景色半透明

    CSS3为我们提供了背景颜色半透明的效果。

    background: rgba(0, 0, 0, .3); 最后一个参数时 alpha 透明度,取值范围在 0 ~ 1 之间。我们习惯把 0.3 的 0 省略掉,写为backgropund: rgba(0, 0, 0, .3);注意:背景半透明是指盒子背景半透明,盒子里面的内容不受影响。CSS3 新增属性,是IE9+版本浏览器才支持的但是现在实际开发,我们不太关注兼容性写法了,可以放心使用。

    3.8 背景总结

    属性作用值background-color背景颜色预定义的颜色值/十六进制/RGB代码background-image背景图像url(图像路径)backgroun-repeat是否平铺repeat/no-repeat/repeat-x/repeat-ybackground-position背景位置length/position 分别是 x 和 y 坐标background-attachment背景附着scroll(背景滚动)/ fixed(背景固定)背景简写书写更简单背景颜色 背景图片地址 背景平铺 背景滚动 背景位置背景色半透明背景颜色半透明background: rgba(0, 0, 0, .3); 后面必须是4个值

    背景图片:实际开发中常见于logo 或者一些装饰性的小图片或者是超大的背景图片,优点是非常便于控制位置。

    4.综合案例

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RmZx7Ti0-1593531329634)(C:\Users\user\AppData\Roaming\Typora\typora-user-images\image-20200612213907822.png)]

    练习价值:

    链接属于行内元素,但是此时需要宽度高度,因此需要模式转换里面文字需要水平居中和垂直居中,因此需要单行文字垂直居中的代码链接里面需要设置背景图片,因此需要用到背景的相关属性设置鼠标经过变化背景图片,因此需要用到链接伪类选择器

    HTML代码:

    <div class="nav"> <a href="#" class="bg1">五彩导航</a> <a href="#" class="bg2">五彩导航</a> <a href="#" class="bg3">五彩导航</a> <a href="#" class="bg4">五彩导航</a> <a href="#" class="bg5">五彩导航</a> </div>

    CSS代码:

    <style> a { display: inline-block; width: 120px; height: 58px; background-color: pink; text-align:center; line-height:58px; text-decoration: none; color: #fff; } .nav .bg1 { background: url(images/bg1.png) no-repeat; } .nav .bg2 { background: url(images/bg2.png) no-repeat; } .nav .bg3 { background: url(images/bg3.png) no-repeat; } .nav .bg4 { background: url(images/bg4.png) no-repeat; } .nav .bg5 { background: url(images/bg5.png) no-repeat; } .nav .bg1:hover { background: url(images/bg3.jpg) no-repeat; } .nav .bg2:hover { background: url(images/bg11.png) no-repeat; } .nav .bg3:hover { background: url(images/bg22.png) no-repeat; } </style>
    Processed: 0.026, SQL: 9