【H2O2|全栈】关于CSS(2)CSS基础(二)

目录

CSS基础知识

前言

准备工作

选择器的组合

盒模型

示例网页代码

后代选择器

亲代选择器

相邻兄弟选择器

后续兄弟选择器

多个元素选择器 

通配符选择器

优先级

其他应用

伪类

锚链接的属性

列表的属性

list-style-type

list-style-position

list-style-image

伪元素

表格的属性

border

border-collapse

caption-side

table-layout

背景属性

background-color

background-image

background-repeat

background-position

background-size

background-attachment

预告和回顾

后话


CSS基础知识

前言

本系列博客将分享层叠样式表(CSS)有关的知识点。

作为本系列的第二篇,本文主要讲解选择器的组合,链接、列表、表格的属性,以及背景属性。

不是专业的科普博主,主打一个分享知识,写的不好,多多包涵(哈哈)。

准备工作

软件:参考版本Visual Studio Code

插件(扩展包):Office Viewer(Markdown Editor)

浏览器版本:Chrome

系统版本: Win10/11/其他非Windows版本

*我的电脑是Win10的版本,仅供参考*

选择器的组合

盒模型

盒模型就是一个几乎没有任何基础样式的块元素标签——div。它自带的样式如下:

就像span标签,实质上就是一个几乎没有任何基础样式的行内元素标签。

其实,所有的标签都只不过是有预设样式的块标签或者行内标签罢了。

关于div的内容暂时了解这么多就可以了,下一期本系列的博客将分享div的相关使用。

示例网页代码

本节中用到的案例的初始主体标签中的代码(无CSS样式的):

<div class="d1"><p class="p1">第一段落</p><p class="p2">第二段落</p><p class="p3">第三段落</p><span class="sp1">第一个文本</span><br /><span class="sp2">第二个文本</span><br /><span class="sp3">第三个文本</span><br /><div class="d2"><p class="p4">第四段落</p><p class="p5">第五段落</p><p class="p6">第六段落</p></div></div>

后代选择器

选择器之间以  空格  分隔,选择所有后代(可以隔代)选择器。

选择案例中class="d1"(以下简称d1,其余同理)的全部后代p标签,可以使用如下代码:

.d1 p {font-size: large;font-weight: 700;color: aqua;}

运行之后的效果如下:

可以看到,d1所有的p后代都被设置了样式。 

亲代选择器

选择器之间以  >  分隔,选择当前元素的直接子代选择器。

如果只想设置d1的直接(第一级)子代,则可以使用如下代码:

.d1>p {font-size: large;font-weight: 700;color: aqua;}

运行之后的效果如下:

这样就不会影响d2的效果了。 

相邻兄弟选择器

选择器之间以  +  分隔,选择某元素同亲代向后相邻同标签元素。

比如,选择p1的下一个同级的p标签p2设置样式,代码如下:

.p1+p {font-size: large;font-weight: 700;color: aqua;}

运行之后的效果如下;

后续兄弟选择器

选择器之间以  ~  分隔,选择某元素同亲代同级的所有同标签元素。

比如,选择d1的子代一级中p1之后的所有p标签,代码如下;

.p1~p {font-size: large;font-weight: 700;color: aqua;}

运行之后的效果如下;

多个元素选择器 

选择器之间以  分隔,选择多个元素。

比如,设置d1中的所有p标签和span标签样式,使用如下代码:

.d1>p,
.d1>span {font-size: large;font-weight: 700;color: aqua;}

运行之后的效果如下:

通配符选择器

格式是一个单独的 * ,选中所有元素,用于清除元素的默认样式(预设为自定义的样式)。 

比如,浏览器中默认的字体大小为16px,黑色,无加粗,现在利用通配符将它们设置为我想要的默认样式:

* {font-size: large;font-weight: 700;color: aqua;}

那么,如果不设置其他属性,那么在示例网页中显示的文本样式默认为:

优先级

对于组合选择器,取对应的选择器类型的权重相加之后再进行比较。

比如,对于下面这两段代码:

.d1 .sp1 {font-size: large;font-weight: 700;color: aqua;}.d1>span {font-size: small;font-weight: 400;color: chartreuse;}

同样设置了sp1的样式,那么最后到底会显示aqua(天蓝色) 还是chartreuse(亮黄色)的效果呢?

我们知道,类选择器的权重值为10,标签选择器的权重值为1。

那么,第一段样式代码的权重值就是10+10=20,第二段为10+1=11,显然,前者的权重值之和较大,所以最后显示的效果如下:

显然,sp1应用了权重值之和较大的样式。 

那么,如果权重值之和相同,呢?比如,将上面的代码改成:

div>.sp1 {font-size: large;font-weight: 700;color: aqua;}.d1>span {font-size: small;font-weight: 400;color: chartreuse;}

此时它们的权重值之和均为11,显示结果如下:

显然,天蓝色被亮黄色覆盖了,说明权重值之和相同时,将按照解析顺序,下面的样式向上覆盖。 

同级的非组合选择器会出现下覆盖上的现象的原因和这里是相同的,都是由权重值决定了优先级

其他应用

组合选择器还可以类比应用于HTML编写快捷输入操作

比如,如果要快速输入下面这段代码,在VS code中可以怎么做呢?

<div><p></p><p></p><p></p><div><p></p><p></p><p></p></div></div>

方法是,类似亲代选择器,使用最外层div选择直接子代,再由内层div选择直接子代。在子代数量不为1时,需要使用乘号(*)乘以数量。

这样一来,快速生成上面的代码的快捷输入就是(输完直接按回车确认):

div>p*3div>p*3

类似的,也可以用相同的方式快速生成表格、列表等嵌套形式的HTML结构。 

该方法在HBuilderX中也可以使用,其他的我没试过,诸位可以自行尝试。

伪类

伪类也是选择器的一种,格式是选择器伪类名

常见的伪类写法如下:

伪类作用
:link常见于锚链接,设置未访问时的属性
:visited常见于锚链接,设置访问之后的属性
:hover设置鼠标悬浮(移入)时的属性(所有元素可用)
:active设置元素激活时的属性(所有元素可用)

 emmm,除了锚链接,使用active设置激活状态在这里暂时不好举例,之后可以利用JS将某个元素直接置换为常态激活状态,如一些小图标的激活效果等。

这里举一个:hover的例子吧,我现在拿出我的头像,初始HTML代码如下:

<img src="https://profile-avatar.csdnimg.cn/4b2a87ef8c5d4789a6b8fb88457350a2_zc13786305863.jpg!1" alt="H2O2的头">

设置初始状态和鼠标悬浮状态的CSS代码如下:

img {width: 80px;height: 80px;}img:hover {width: 160px;height: 160px;}

鼠标未移入图片和移入图片的效果对比如下:

 

其实,伪类还有更多的形式,这里主要是为了引出锚链接而拓展的一小部分内容,更多伪类的使用可能会在CSS进阶篇或JS系列博客去分享。 

锚链接的属性

锚链接的默认样式如下:

状态样式
未访问/光标移入蓝色,下划线
访问后紫色,下划线
光标点击(激活)红色,下划线

由于锚链接有不同的实时状态,所以可以使用伪类选择器对每个状态的样式进行单独设置。

但是,需要注意的是,由于伪类选择器之间是同类选择器,解析有自上而下的顺序。 

所以当伪类:hover(移入)和:active(激活)同时设置样式时,注意要先设置:hover再设置:active,否则:hover将覆盖:active的属性效果。

特别的,visited在访问后将保持该状态。即使刷新界面也不会重置这个状态。

列表的属性

列表的属性为list-style,按顺序依次简写下面三个属性的属性值,以空格分开:

list-style-type

该属性用于设置列表的标记

什么是标记呢?还记得HTML入门中提到过的ul和ol的type属性吗,与这个属性的功能是相同的。

来看list-style-type的常见属性以及对应样式描述或举例:

属性值样式举例
none\
disc实心圆\
circle空心圆\
square实心方块\
decimal 标记为数字1 2 3 4
decimal-leading-zero0开头的数字标记01  02  03
upper-roman大写罗马数字I II III IV V
lower-roman小写罗马数字i ii iii iv v
upper-alpha大写英文字母A B C D
lower-alpha小写英文字母a b c d
lower-greek小写希腊字母alpha, beta, gamma
lower-latin小写拉丁字母a, b, c
upper-latin大写拉丁字母A, B, C, D
hebrew传统的希伯来编号方式\
armenian传统的亚美尼亚编号方式\
georgian传统的乔治亚编号方式an, ban, gan
cjk-ideographic简单的表意数字\
hiragana日文平假名字符a, i, u, e, o, ka, ki
katakana日文片假名字符A, I, U, E, O, KA, KI
hiragana-iroha日文平假名序号i, ro, ha, ni, ho, he, to
katakana-iroha日文片假名序号I, RO, HA, NI, HO, HE, TO

对HTML中的type而言,ul的标记只能是实心圆点、实心方块和实心圆圈等图形,且各li的图形相同;ol的标记只能是数字、英文大小写和罗马数字大小写等序号

现在,我们可以将两类形式混合使用了。只需要单独定义li元素的list-style-type即可。

list-style-position

该属性用于定义列表项目标记放置位置,默认标记位置在文本以外。

该属性的值和对应的含义如下:

属性值含义
outside默认  标记在文本外
inside标记在文本内

用于比较两种效果的代码如下:

<ul><li>我的标记在文本外</li><li style="list-style-position: inside;">我的标记在文本内</li></ul>

 在浏览器中显示的效果如下:

看起来,设置了值inside的列表项比默认的情况稍稍后移了一些。

想要知道他们的区别,则需要使用F12快速检查代码。

可以看出两个列表项的文本内容的区别,后者的标记确实包含在文本中了:

list-style-image

该属性用于插入图片作为列表项目标记。

如果觉得列表的标记不太好看,种类不够丰富,那么就可以使用图片作为列表项的标记了。

默认值为none,即不引入图片。

或者使用url("图像的地址/路径")的方式引入图片,注意这里的图片不能自定义大小,需要提前调整好图片的大小再引入。

伪元素

如果想调整图片的大小,其实也是有办法的,这个时候就需要提出一个新的CSS3中的概念——伪元素

之所以称之为“伪”,是因为它实质上是在浏览器渲染CSS时才加上的。

W3C文档中,为了区别伪元素和伪类,将伪元素规范为以  ::  开头的形式。

常见的两个伪元素是::before::after,分别用于将伪元素的内容添加至当前元素之前之后

伪元素必须指定内容属性content,否则将不起作用可以为空

具体的内容就不展开说了,这里只讲述如何调整图片大小。

比如,默认字体大小为16px,我们利用::before将图片缩小到16*16的大小放到列表项之前。

*注意把ul自带的标记给设置为none!*

CSS代码如下:

ul {list-style-type: none;
}ul li::before {content: '';background-image: url("https://profile-avatar.csdnimg.cn/4b2a87ef8c5d4789a6b8fb88457350a2_zc13786305863.jpg!1");background-size: 100% 100%;background-repeat: no-repeat;display: inline-flex;width: 16px;height: 16px;
}

HTML代码如下:

<ul><li>列表项1</li><li>列表项2</li></ul>

在网页中的效果如下:

display属性暂时不需要了解,background相关的属性将在背景属性中讲述。 

表格的属性

border

该属性按顺序依次简写下面三个属性的属性值:

border-width

该属性用于设置表格的边框宽度,常用单位为px,%,rem,em,和其他使用这些单位的使用方法类似,不再赘述。

border-style

该属性用于设置表格的边框样式,类似text-decoration-style,不再赘述。

border-color

该属性用于设置表格的边框颜色,常用形式为颜色名、十六进制、rgb表示和rgba表示,类似text-decoration-color,不再赘述。

border-collapse

该属性用于设置表格的内外边框之间的间距,一般对table标签使用,类似于已经弃用的cellspacing属性。

它的属性值和对应的含义如下:

属性值含义
separate默认值  内外边框分离
collapse内外边框合并(塌陷)

可能有朋友注意到,我使用了类似这个词,说明其实这两者之间还是有一些差别的。 

比如,对于两个完全相同的、规格为3*3且边框粗2px的表格来说,使用collapse的效果和使用cellspacing的效果对比如下:

可以看到后者比前者稍粗一些,这是因为前者是将内外边框完全合并,而后者只是将内外边框的间距设置为0罢了。 

caption-side

该属性用于设置表格标题的位置,也就是caption标签元素的位置。

它的属性值和对应的效果如下:

属性值效果
top默认值  标题在表格顶部
bottom标题在表格底部

table-layout

该属性用于设置表格单元格的列宽的展现方式。

它的属性值和对应的含义如下:

属性值含义
auto默认  自动由内容撑开  由当前列最宽的单元格决定列宽
fixed各个单元格的列宽独立设定且为固定值,与内容无关

利用这个属性,我们再想实现HTML入门章节中说过的列对齐不规则表格,就十分简单了。只需要给每一行的列设置独立的width即可,不再需要繁琐的列合并操作。 

背景属性

背景属性使用的是background系列的属性,该属性在CSS3中出现,这里仅供了解。具体有下面几种:

background-color

该属性的作用是定义背景色。

除了常规的使用颜色名、十六进制、rgb和rgba四种属性值之外,还可以设置transparent,即透明效果。

不设置前四种属性,则默认为透明颜色。

background-image

该属性的作用是将图像设置为元素背景

默认值为none(无效果),也可以使用ul("路径")调用图片。

background-repeat

该属性的作用是设置背景图片是否重复。

默认为repeat重复,可以设置为no-repeat不重复。

还可以单独设置repeat-xrepeat-y,即仅在水平或者仅在垂直方向重复。

出现在图片不足以覆盖所在元素背景的情况。

background-position

该属性用于设置显示的背景图像的起始位置。初始的位置是左上角(大概率)

该属性有两个值,分别对应水平位置和垂直位置,对应属性值如下:

水平位置垂直位置
left/center/righttop/center/bottom
px(x轴正方向向右)px(y轴正方向向上)
%(50%为相对背景居中)%(50%为相对背景居中)

注意,如果只设置一个属性值,另一个值将默认为center。 

雪碧图(精灵图)

可以这么理解这个属性,我们现在有 一个窗口,也就是我们的可见部分,背景图的默认位置是左上角大致与窗口左上角对齐。通过移动窗口,使得背景图显示的区域发生变化,以达到显示指定区域的特定大小的图片的效果。

窗口左上角的点的位置坐标,就是background-position的值。

该坐标符合笛卡尔坐标系

background-size

该属性用于设置背景图片的大小。

填数值时,由水平尺寸垂直尺寸组成,单位为px或%。只设置一个,另一个等比变化(auto)。

不填数值,则为单属性,属性值和含义如下:

属性值含义
cover覆盖,最小边占满背景,最大边会超出
contain容器,最大边占满背景,最小边会压缩

特别的,对于cover属性,可以设置overflow属性,值为hidden(隐藏),将超出父元素的部分隐藏起来。 

background-attachment

该属性用于设置背景图片是否伴随滚动

它的属性值和对应的效果如下:

属性值效果
scroll默认值  背景图像随页面滚动而滚动
local背景图像随内容滚动而滚动
fixed背景图像相对背景静止

平时我们看到的背景图不动的网页,很多都可以由fixed完成。 

预告和回顾

在下一期博客中,我将会开始写CSS的盒模型的具体内容。

对CSS文件感兴趣的朋友,可以看下面的CSS专栏,当前为第二期:

专栏 | CSS入门icon-default.png?t=O83Ahttp://t.csdnimg.cn/4bvCJ当然,也欢迎对全栈项目感兴趣的朋友查看我的其他专栏。

后话

在全栈领域,博主也只不过是一个普通的萌新而已。本系列的博客主要是记录一下自己学习的一些经历,然后把自己领悟到的一些东西总结一下,分享给大家。

文章全篇的操作过程都是笔者亲自操作完成的,一些定义性的文字加入了笔者自己的很多理解在里面,所以仅供参考。如果有说的不对的地方,还请谅解。

==期待与你在下一期博客中再次相遇==

——疑似有点缺氧的【H2O2】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/424314.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

a√斗地主之顺子

题目描述 在斗地主扑克牌游戏中&#xff0c;扑克牌由小到大的顺序为:3,4,5.6,7.8,9,10,J,Q,K,A,2&#xff0c;玩家可以出的扑克牌阵型有:单张、对子、顺子、飞机、炸弹等。 其中顺子的出牌规则为:由至少5张由小到大连续递增的扑克牌组成&#xff0c;且不能包含2。 例如:(3.4.…

【JavaEE】IP协议 应用层协议

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【Java】登神长阶 史诗般的Java成神之路 &#x1f576;️一.IP地址 IP协议&#xff08;Internet Protocol&#xff09;是TCP/IP协议族中最核心的协议之一&#xff0c;它定义了数据包在网络中传输的标准…

快速使用react 全局状态管理工具--redux

redux Redux 是 JavaScript 应用中管理应用状态的工具&#xff0c;特别适用于复杂的、需要共享状态的中大型应用。Redux 的核心思想是将应用的所有状态存储在一个单一的、不可变的状态树&#xff08;state tree&#xff09;中&#xff0c;状态只能通过触发特定的 action 来更新…

测试工程师学历路径:从功能测试到测试开发

现在软件从业者越来越多&#xff0c;测试工程师的职位也几近饱和&#xff0c;想要获得竞争力还是要保持持续学习。基本学习路径可以从功能测试-自动化测试-测试开发工程师的路子来走。 功能测试工程师&#xff1a; 1、软件测试基本概念&#xff1a; 学习软件测试的定义、目的…

微信小程序开发——比较两个数字大小

在这里我们使用的工具是 需要自行安装和配置。 在微信小程序中比较两个数字大小有以下几种方式&#xff1a; 一、普通条件判断 在小程序的.js 文件中&#xff0c;先定义两个数字&#xff0c;如let num1 5; let num2 3;。通过if - else if - else语句&#xff0c;根据num1与…

【测试报告】博客系统

1.项目背景 在互联网高度发达的今天,越来越多的人开始学习编程,诞生了越来越多的程序员,但他们没有可以互相交流学习、分享经验的平台。本项目旨在为更多的程序员以及新手小白提供一个能够促进学习、共同进步&#xff0c;让小白也能成为大神的交流学习平台 1.1测试目标以及测试…

【数据结构】8——图3,十字链表,邻接多重表

数据结构8——图3&#xff0c;十字链表&#xff0c;邻接多重表 文章目录 数据结构8——图3&#xff0c;十字链表&#xff0c;邻接多重表前言一、十字链表结构例子 复杂例子 二、邻接多重表&#xff08;Adjacency Multilist&#xff09;例子 前言 除了之前的邻接矩阵和邻接表 …

Vue 第三方调用若依系统实现系统单点登录

应用场景 甲方现有平台系统拟集成我方新开发系统&#xff0c;实现单点登录功能&#xff0c;即用户登录主平台后&#xff0c;无需重复登录即可无缝访问新系统&#xff0c;提升用户体验与操作效率。 解决方案 实现代码 前端 Step:1 新建ssoLogin.vue页面 <template><d…

视觉SLAM ch5——相机与图像

一、单目模型 前言&#xff1a;本大标题下1~4部分讲述的都是单目针孔相机 SLAM的数学本质可以抽象为运动方程&#xff08;x&#xff09;和观测方程&#xff08;z&#xff09;&#xff08;书上的第二部分&#xff09; 教材第二章截图 书中P24页截图 其中的未知量为xk&#xff…

TiDB从0到1学习笔记(精华篇)

历时四个月&#xff0c;恭喜赵老师的《TiDB从0到1》 系列文章顺利完结&#xff0c;小编再次梳理一遍文稿&#xff0c;并附注解分享给大家。 整体架构 从 TiDB 1.0 到 8.0&#xff0c;TiDB 的体系结构一直在不断演进。接下来让我们一起看看整体架构的变化。 TiDB v1 TiDB v1&…

通过C# 裁剪PDF页面

在处理PDF文档时&#xff0c;有时需要精确地裁剪页面以适应特定需求&#xff0c;比如去除广告、背景信息或者仅仅是为了简化文档内容。 本文将指导如何使用免费.NET控件通过C#实现裁剪PDF页面。 免费库 Free Spire.PDF for .NET 支持在 .NET (C#, VB.NET, ASP.NET, .NET Core)…

AI 加持的云端 IDE——三种方法高效开发前后端聊天交互功能

以下是「豆包 MarsCode 体验官」优秀文章&#xff0c;作者努力的小雨。 豆包 MarsCode 豆包MarsCode 编程助手支持的 IDE: 支持 Visual Studio Code 1.67.0 及以上版本&#xff0c;以及 JetBrains 系列 IDE&#xff0c;如 IntelliJ IDEA、Pycharm 等&#xff0c;版本要求为 22…

告别繁琐粘贴,CleanClip Mac 版,让复制粘贴变得简单快捷!粘贴队列功能太强大了!

告别繁琐粘贴&#xff0c;CleanClip Mac 版&#xff0c;让复制粘贴变得简单快捷&#xff01; CleanClip for Mac &#x1f4cb; 是一款专为Mac用户设计的高效剪贴板管理工具。它解决了传统复制粘贴过程中的繁琐问题&#xff0c;让你的工作流程更加顺畅和高效。 &#x1f504;…

jenkins流水线+k8s部署springcloud微服务架构项目

文章目录 1.k8s安装2.jenkins安装3.k8s重要知识1.简介2.核心概念3.重要命令1.查看集群消息2.命名空间3.资源创建/更新4.资源查看5.描述某个资源的详细信息6.资源编辑7.资源删除8.资源重启9.查看资源日志10.资源标签 4.k8s控制台1.登录2.界面基本操作1.选择命名空间2.查看命名空…

一些写leetcode的笔记

标准库中的string类没有实现像C#和Java中string类的split函数&#xff0c;所以想要分割字符串的时候需要我们自己手动实现。但是有了stringstream类就可以很容易的实现&#xff0c;stringstream默认遇到空格、tab、回车换行会停止字节流输出。 #include <sstream> #incl…

六、二分搜索-算法总结

文章目录 六、二分搜索6.1 简介6.2 典型实例 -- 二分查找6.2 模板6.3 常见题目6.3.1 搜索插入位置6.3.2 搜索二维矩阵6.3.3 寻找旋转排序中数组中的最小值6.3.4 寻找旋转排序数组中的最小值 II6.3.5 搜索旋转排序数组6.3.6 搜索旋转排序数组 II 总结 六、二分搜索 6.1 简介 给…

电学基础概念详解及三相电公式汇总

​​​​​​​ 本文全面介绍了电路的基本组成、电学核心概念以及三相电的常用公式。首先&#xff0c;通过水力学中的现象类比&#xff0c;生动解释了电路中电池、开关、电阻和灯泡等元素的功能&#xff0c;帮助读者更好地理解电压、电流和电阻之间的关系。随后&#xff0c;详…

【笔记】进制转换

文章目录 一、任意进制转十进制1、整数转化成十进制&#xff08;1&#xff09;二进制转十进制&#xff08;2&#xff09;八进制转十进制 2、小数转化成十进制&#xff08;1&#xff09;二进制转十进制&#xff08;2&#xff09;八进制转十进制 3、代码1、整数转化成十进制2、小…

OpenCV-Python笔记(上)

安装 全局安装 pip install opencv-python项目虚拟环境安装 # 进入项目根路径执行 .venv/bin/pip install opencv-python计算机眼中的图像 一张图片由大小比如&#xff08;100*100&#xff09;决定&#xff0c;说明存在100*100的像素点&#xff0c;每个像素点存在颜色通道&…

Neo4j入门案例:西游记

创建一个基于《西游记》中“孙悟空”的黑神话版本的知识图谱。这个图谱将会包括《西游记》中的一些主要角色、地点、事件以及它们之间的关系。我们将创建至少10个节点和20个关系&#xff0c;并提供相应的Cypher语句。 数据模型定义 实体类型&#xff08;节点&#xff09; 角色…