本页面旨在于帮助写手初步了解维基点的前端技术,以便于写手在进行文章创作时更好地布置版式、美化页面。由于前端技术本身较为硬核,本页面仅对实用性较高的css语法作运用层面的讲解,同时涉及到部分html内容。本章节会对前端及css和html的基础知识进行简要介绍,粗略讲解JS的基础知识。教程目前处于初版阶段,存在部分问题,有疑惑或建议请联系作者进行更改。
声明:本教程仅对前端技术进行入门级别的介绍,为了便于读者理解,本教程存在部分不严谨、不准确的用语,因此本教程最终教学效果仅在于让读者基本能看得懂代码,想要具体、透彻、全面地学习前端开发技术请移步别处。
前端基础
前端是指创建和设计用户可以直接交互的网页或应用界面的部分。它运行在PC端、移动端等浏览器上,直接面向用户,负责展示内容和提供交互功能。
HTML、CSS和JavaScript(JS)是构建网页的基础代码类别,其中HTML(HyperText Markup Language)是用于创建网页的标记语言,通过不同的标签来定义网页的结构和内容,可以理解为是构造网站具象内容的重要语言(网站上大部分的内容包括文字、图片、媒体都要通过HTML代码来呈现)。CSS(Cascading Style Sheets)是用于设置网页布局和样式的语言,通过选择器来定位HTML元素,并应用各种样式规则,要通过HTML来呈现(网站排版的重要代码)。JavaScript是一种用于实现网页动态功能的编程语言,其通常不会大量运用于文章,在本页面中仅作简单介绍。
HTML和维基点代码
HTML的代码主要由“标签”组成,标签是由尖括号包围的关键词比如 <html>、<p>、<a>,通常标签是成对的(部分标签如划分水平线的<hr>仅有开放标签),由开始/开放标签和结束/闭合标签,仅有尖括号加上英文字符构成的标签是开放标签如<head>、<title>,而闭合标签会在对应标签的括号中的英文字符前加上一个左斜杠符号如</head>、</title>(<br>是用于换行的空元素在使用时也需要关闭,其闭合方式是直接在开始标签中加斜杠,即直接输入<br />)。一组对应的开放和闭合标签内有着相同的英文字符,与其中所包含的内容构成一组元素,简而言之元素的格式就是:<标签>内容</标签>。另外HTML元素对大小写不敏感,例如<P>等同于<p>。需注意的是元素是由内及外有顺序性的。例如如下实例中标有同样颜色的字符就互为一对元素。
<div>
<div>
这是一个块级元素实例。为了美观我们会在部分标签后换行。
</div>
</div>
此外,很多元素的括号中除了表示元素种类的一串英文字符还有一串或者多串附加信息,这些附加信息被称为属性,用于定义元素的行为、样式、内容或其他特性。属性总是以 name="value" 的形式写在标签内,name 是属性的名称,value 是属性的值。比如说<a href="https://cr-universe.wikidot.com/css-guide">中 href="https://cr-universe.wikidot.com/css-guide" 就是属性,部分元素存在多个属性如<img src="image.jpg" alt="An example image">。
HTML从初期的网络诞生后,已经迭代了许多版本,HTML5是目前大部分主流浏览器(Web浏览器,如谷歌、Edge,是用于读取HTML文件,并将其作为网页显示的工具,不直接显示HTML标签,但HTML标签决定了页面的展示内容。)使用的版本,后文中的绝大部分涉及HTML的内容都基于该版本。如下是一个HTML5的代码实例。(#后面是对代码的注释)
<!DOCTYPE html> # 声明此代码为HTML5文档
<html> # HTML页面的根元素
<head> # 此部分包含脚本、CSS样式、meta 信息,此部分内容通常不可见
<meta charset="utf-8"> # 规定文档的字符编码,不必要
<title>这是页面的标题</title> # 文档的标题,页面的名称,是必要的
</head>
<body> # 正文内容,包含了可见的页面内容
<h1>这是一个标题</h1> # 定义一个大标题,是页面中的文字标题而不是文档的标题
<p>这是一个段落。</p> # 定义一个段落,相当于换行
</body>
</html>
(你无需完全理解以上代码的含义,仅需要知道HTML文件由head和body两大板块构成即可)
而维基点的代码,即作者在该站点创作文章时使用的代码相对于如上实例已进行了大幅简化,省略了声明和<html>等元素,将<head>元素中的内容隐藏,其中<title>元素更改为编辑器中的页面标题一栏,meta信息编辑安置于页面底部选项。写手真正编辑的其实是<body>元素中的内容,并且维基点对HTML中的常用元素代码也进行了简化,例如<h1>元素简化为一个"+"符号,而<p>直接省略,或者说在编辑器中换行就相当于增加了一组<p>元素,用于引用超链接的<a>元素被三对方括号代替,用于划分水平线的<hr>被用"----"代替,其他诸多元素例如<div><tab>维基点语法将元素的尖括号换成了方括号表示,即表示为[[div]][[tab]]。具体内容详见"顶栏-指导-语法指南"。
功能名称 | HTML代码 | 维基点代码 |
---|---|---|
注释 | @!--...--@ | [!-- ... --] |
链接 | <a> | [[[ ]]] |
倾斜 | <em> | // // |
加粗 | <strong> | ** ** |
下划线* | <span style="text-decoration: underline;"> | __ __ |
删除线* | <span style="text-decoration: line-through;"> | -- -- |
等宽 | <tt> | {{ }} |
上标 | <sup> | ^^ ^^ |
下标 | <sub> | ,, ,, |
大小 | <span style="font-size:10px;"> | [[size 10px]] [[/size]] |
标题 | <h1>~<h6> | +~++++++ |
有序列表 | <ol>+<li> | # |
无序列表 | <ul>+<li> | * |
引用块 | <blockquote> | > |
块 | <div> | [[div]][[/div]] |
列表 | <tr>、<th>+<td> | ||~ || || |
段落 | <p> | 省略 |
水平线 | <hr> | ---- |
换行 | <br /> | 省略 |
在HTML5中,编辑者可以<!— 内容 —>的形式做注释,而维基点代码中注释的格式为[!-- 内容 --]。注释内容即使在<body>元素中也不会显示在正文。但是查看网页源代码(Ctrl+U)时可以看见注释内容。
在维基点代码中你可以使用[[html]]代码引入纯HTML代码,由于维基点的人性化设计部分html代码在转为维基点代码会存在排版错误、无法正常识别的情况,此时你可以尝试使用HTML代码对内容进行修正。
CSS基础知识及其在维基点的使用
CSS也称层叠样式表,用于定义HTML元素的显示方式,其代码置于样式表中。CSS样式表通常在HTML中被使用<style>元素引入,CSS样式也可以成为独立文件,独立CSS文件可以在<style>元素中使用通过“ @import url(文件地址); ”引用。同一个HTML文件在使用不同CSS样式时可以显示出不同的效果,所以我们只需要编辑一个简单的CSS文档就可以改变整个页面的布局和外观。
CSS代码的语法由两个主要的部分构成即选择器以及一条或多条声明。声明又由属性和值构成。如下是一个CSS代码实例,其中选择器用红色标出,属性标为蓝色,值标为绿色。
p {
color:red;
text-align:center;
}
选择器表示的是这串代码的编辑对象,可以是一类HTML元素或者是定义的一个新块级元素等。属性则是对这一类元素的某一个特性进行的定义。(可以理解为将所有同类项的外观进行某个改动)
此外CSS代码对于换行没有要求,因此如上代码等价于如下代码,但通常情况下编辑者会在每个声明及选择器后选择换行便于后期编辑。但需注意的是CSS代码中声明结尾必须要带有分号,必须要用大括号括起来,否则会导致代码出现问题。
p {color:red;text-align:center;}
另外,CSS代码的注释方式是以 /* 开始, 以 */结束,例如/*这是个注释*/。
维基点对于CSS代码并没有做太多特殊修改,只是如果你要在正文中使用CSS代码,你应当在代码前使用[[module css]],在代码结束时使用[[/module]]而非<style>元素。
HTML代码下的CSS引用段:
<style>
p {color:red;text-align:center;}
</style>
维基点代码下的CSS引用段:
[[module css]]
p {color:red;text-align:center;}
[[/module]]
你对CSS文件的改动会影响到HTML文件内容的呈现,例如上文中CSS代码的选择器是p,效果是将文字显示为红色并置中,将该代码引用至页面后再使用<p>元素(在维基点代码中相当于直接换行)效果就是红色置中。
同一段维基点代码:
+++ 这是一串代码!
CSS代码1:
[[module css]]
h3 {color:red;text-align:center;}
[[/module]]
效果1:
CSS代码2:
[[module css]]
h3 {color:green;text-align:right;}
[[/module]]
效果2:
无CSS效果:
这是一串代码!
JavaScript基础知识
JavaScript简称JS,是互联网上最流行的脚本语言,是一种轻量级的编程语言,相对于其他编程语言非常容易学。使用JS可以增加文章的可交互内容,增强文章的代入感。JS根据特定行为改变HTML文件的内容显示,有着较高的开拓性。尽管JS不是本页面的教学重点,本页面会向读者介绍JS的一定基础知识,便于写手在文章中增加一定的可交互性内容。
这是一串运用在维基点的含有JS代码的代码片段:
[[html]]
<script>
function darkness(a){
alert("当你在凝视深渊的时候,深渊也在凝视着你。");
}
</script>
<span style="color: red;text-align:center;">
<p onclick="darkness(this)">深渊</p>
</span>
[[/html]]
这是它的输出效果,你可点击如下文字。
JS代码与CSS不同,同时可放置在HTML页面的<body>和<head>部分中。JS脚本位于 <script> 与 </script> 标签(即脚本标签)之间,也可通过外部文件引用至页面,引用方法是输入代码"<script src="文件地址"></script>"。通常JS和CSS文件都会被置于<head>部分(或维基点页面的顶部)以便于查询、更改,同时你可以在HTML文档中放入不限数量的JS脚本。
本教程不涵盖JS的具体语法知识。
本篇目会讲解CSS根文件的使用及修改方式。
根文件
根文件即 ":root选择器" ,用于匹配文档的根元素。之前的篇目中我们了解到选择器在CSS文件中用于选定编辑对象,其中:root选择器下的属性通常用于替换CSS和HTML代码中的重复或特定内容(通常是文字、图片以及rgb颜色)。需注意的是在:root选择器替换项属性前要加上 两个减号即" -- "用于区分,否则代码将无效,而在引用该属性时要以"var(属性名)"的形式替换原有的同类内容。
:root选择器极大地简化了修改的工作量,因此被广泛运用于维基点的版式制作(貌似在一定程度上算是Sass的代替品)。其效果可见如下示例。
如下是一个含:root选择器的代码示例,将其引入到页面中
<style>
:root {
--p-color: 213, 23, 25;
}
p {
color: rgb(var(--p-color));
}
</style>
<p>这是一串字符!</p>
其展现出的效果如下
这是一串字符!
颜色代码
在CSS中常用的颜色代码有RGB颜色和16进制颜色(HEX)。
RGB颜色通过修改红(Red)、绿(Green)、蓝(Blue)三个颜色通道并进行叠加来得到各式各样的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是运用最广的颜色系统之一。RGB颜色的格式为 x, x, x 三项与三个颜色通道对应,每个颜色通道的数值在0~255之间。
此外,部分代码中存在RGBA颜色就是在RGB的标准上增加了Alpha一项译为透明度,RGBA颜色格式为 x, x, x, α 其中α的值在0~1之间,即透明度0%~100%。
16进制颜色是另一种在计算机中广泛使用的颜色表示方法,其原理与RGB颜色一致但是将三个颜色通道的数值转为了16进制格式,即十进制的0~255转为十六进制00~FF,因此十六进制颜色格式为 #XXXXXX 其中每一个X代表一位字母(常用大写但也可使用小写)或数字。
通常来说CSS中设置颜色是同时支持16进制和RGB两种颜色代码的,但是在输入颜色时RGB颜色必须rgb(x, x, x)来表示以增强区分(同理RGBA颜色表示为rgba(x, x, x, α)),而十六进制颜色没有此要求。
HSL(色相、饱和度、亮度)是另一类广泛应用于工业界的颜色模型,该模型下的颜色与GRB颜色也是一一对应的并且其比RGB颜色更加直观,但是其不常使用于CSS,在此仅作科普。(如果你也要用也行它的格式是hsl(x, x%, x%),其中第一项的x数值在0~360,并且hsla(x, x%, x%, α)也是能用的)
顺带一提,你可能发现这些颜色代码的格式都是英文简称加上括号[xxx( )],这些代码被称为CSS 函数,前文中所提及的var( )和用于引用连接的url( )都是CSS函数,它们的共同特点就是带括号。CSS函数并不是本页面的重点讲解内容,在此仅作科普,便于初学者理解。
在CSS代码中除了用如上格式表示颜色,你也可以直接用一个单词来表示颜色,例如red就相当于#FF0000,目前共有147颜色名称可以识别,这些颜色名称被称为合法颜色,陈列如下。
更改版式颜色
根文件在维基点最常用的功能是修改默认版式颜色、版头logo及标题文字。你可以通过在页面中引用含:root选择器的CSS段落使页面的主题颜色发生巨大改变。
如下是本站点默认版式中的根文件目录含有的部分颜色属性及其修改对象。
[[module css]]
:root {
--white-monochrome: 背景版及版头文字主要颜色;
--light-gray-monochrome: 表格表头和部分键背景颜色;
--gray-monochrome: 顶栏背景横条、搜索框和深色块;
--dark-gray-monochrome: 顶栏目展开背景板色和底部按键悬浮触发颜色;
--black-monochrome: 文字颜色、顶栏展开条目框颜色和侧栏竖条颜色;
--medium-accent: 顶栏背景板、侧栏表格表头和分页边框颜色;
--dark-accent: 页面底部按键背景及底部横条颜色;
--pale-gray-monochrome: 引用块的浅色白色及分页栏目头背景色;
--bright-accent: 顶栏栏目选中条纹颜色及勾选文字背景浅色;
--link-color: 链接颜色;
--hover-link-color: URL链接颜色;
--visited-link-color: 已访问链接颜色;
--newpage-color: 不存在的链接颜色;
--swatch-background: 背景板次要颜色;
--swatch-primary: 次要勾选文字背景颜色;
--swatch-primary-darker: 次要深色;
}
[[/module]]
在引用颜色替换代码时,请将颜色内容替换为rgb颜色代码(格式为xxx, xxx, xxx),并且仅选用你需要修改的选项颜色,否则你的页面可能会出现一片空白的情况。
你可以通过该拾色器获取合适的rgb颜色。
例如在你的页面输入如下代码,你页面的背景就会变为一篇白色。
[[module css]]
:root {
--white-monochrome: 255, 255, 255;
}
[[/module]]
更改版头文字及logo
你可以通过在页面中引用css段落使版头的文字和logo,详细代码如下。
[[module css]]
:root {
--logo-image: url("LOGO图片的URL");
--header-title: "主标题";
--header-subtitle: "副标题";
}
[[/module]]
例如默认版式的版头代码如下。
[[module css]]
:root {
--logo-image: url("http://brsandbox-pro.wikidot.com/local--files/wu-ze/logo2.png");
--header-title: "Cr宇宙档案馆";
--header-subtitle: "潜身于虚妄之中";
}
[[/module]]
如果你想将版头的背景替换为图片,那么你可以使用如下代码。注意,你应选择高度为135的长图。
[[module css]]
div#container-wrap {
background: url("图片url") top left repeat-x;
}
[[/module]]
该篇目将具体介绍选择器的种类,详细介绍ID选择器。此外,该篇目将陈列一些常用于CSS版式创作的代码模块,供作者参考。
属性选择器
前文中我们以及讲解了直接以元素名称开头的元素选择器(Element Selector)如 p ,和特殊的:root选择器。实际上CSS选择器数量远不止于此,其它较常用的选择器有以#开头的ID选择器(ID Selector)、以方括号开头的属性选择器(Attribute Selector)、由多个元素共同构成的后代选择器(Descendant Selector)、由 . 开头的分类选择器(Class Selector)等。此外,有一种选择器以 * 开头,这类选择器的属性会修改所有元素,被称为通用选择器(Universal Selector),在版式中比较少见(你应该也不会用上,还是在此仅作科普)。
属性选择器的常规格式为 element[name="value"] 即 元素[属性=值] 。该选择器将选择所有含有选定属性且选定属性为特定值的选定元素(比如说p[class="test"]将会选中所有含有<p class="test">的元素包括<p class="test" style="text-align:center;">等)。属性选择器中 元素 和 值 可省(省略后为[name],会选中所有含有name属性的元素)。如下是一个属性选择器实例,该选择器会选择所有带有属性target的<a>元素并将其背景改为黄色。
a[target] {
background-color:yellow;
}
属性选择器还存在几种特殊符号的变式(这个其实没必要专门记,一般现用现查)。格式为 [attribute~="value"] 的属性选择器会选择属性值中包含指定词的元素(可用于选择命名方式相似的Class类)。格式为 [attribute|="value"] 的属性选择器会选择具有指定值或者以指定值开头并紧跟着连字符 - 的属性值的元素(不是那么常用)。格式为 [attribute^="value"] 的属性选择器会选择属性值以指定值开头的元素(可用于选择以https开头的链接)。格式为 [attribute$="value"] 的属性选择器会选择属性值以指定值结尾的元素(可用于选择制定格式的文件)。格式为 [attribute*="value"] 的属性选择器会选择属性值中包含指定值的元素。
有时你也会见到 element , element 选择器即 元素A , 元素B 。这类选择器的选择对象同时包括元素A和元素B。
ID选择器和分类选择器将会在后文介绍,部分不常用于维基点CSS制作的选择器在此省略。
ID选择器
ID选择器以 # 开头,后面跟着 ID 名称,选择器格式为 #id 。id是HTML代码元素的一个属性,规定HTML元素的唯一的id,即同一id不能用于多个元素。在元素属性中id必须以大/小写字母开头、不得包含特殊字符但可包含数字,需注意的是id是对大小写敏感的。
ID选择器的本质就是[id=" … "]的属性选择器,但比起该格式仅仅一个 # 会简单得多。如下是一个ID选择器的实例。(有时候维基点代码ID选择器无法识别,建议是直接换成HTML代码用[[html]]转一下就行了)
这是一段位于<body>元素中的代码。
<style>
#test {
color:green;
}
</style>
<p id="test"> !!! </p>
<p> 这段字没有被选中! </p>
其输出效果为
你将会在下文的版式实例中大量看见ID选择器。
组合选择符
前文中我们提及到了后代选择器,这是一种特殊的选择器,其由两个选择器共同构成。像这种多个选择器共同构成的选择器称作组合选择器,连接两者的符号称为组合选择符。
后代选择器的选择符为空格,的格式为 element element 即 元素A 元素B ,会选中在所有元素A中的元素B。例如 div p 选择器就只会选中下列代码中的second和third而不会选择first。
<p> first </p>
<div>
<p> second </p>
<p> third </p>
</div>
<p> fourth </p>
<p> fifth </p>
<div>
<p> sixth </p>
</div>
子元素选择器是另一种组合选择器,其选择符为">",即格式为 元素A>元素B 。该选择器与后代选择器不同的是它之会选中元素A中的首个元素B,例如如上实例中 div>p 选择器会选中代码中的second而不会选择third。
紧邻兄弟选择器的选择符为"+",即格式为 元素A+元素B 。该选择器会选择紧接在元素A后的元素B,例如如上实例中 div+p 选择器会选择代码中的fourth而不会选择fifth。
后续兄弟选择器的选择符为"~",即格式为 元素A~元素B 。该选择器会选择在元素A后的所有元素B(不包括不同级别的元素),例如如上实例中 div~p 选择器会选择代码中的fourth、fifth而不会选择sixth。
CSS的几种长度
CSS有几个不同的单位用于表示长度,一个数字和一个单位共同构成一个长度数据。CSS的长度单位分为相对长度和绝对长度。当多个不同类型的设备查看同一个页面时相对长度通常更适用。
常用的相对长度单位有em、rem。em是描述相对于应用在当前元素的字体尺寸,一般浏览器字体大小默认为16 px,所以通常情况下1 em = 16 px(合约0.42 厘米)。rem则是根 root em 的缩写,其对象是选择器选中的元素时会以选中元素字体大小为参照,而作用于根元素(例如<html>)时,将以初始字体大小为参照。
相对长度单位还包括ex(以英文字母小 x 的高度为参照)、ch(以数字 0 的宽度为参照)、vw(1vw=视窗宽度的1%)、vh(1vh=视窗高度的1%)、vmin(vw和vh中较小的一者)、vmax(vw和vh中较大的一者)、%(没错,就是百分比)。
常用的绝对长度有px和cm。px即像素,是一个标准的长度单位,1px = 1 in / 96 (1/96英寸)≈ 0.26 毫米。1 cm就是标准的1 cm。其他绝对长度单位还有mm(毫米)、in(英寸,一英寸合2.54cm)、pt(1pt大约1/72英寸)、pc(1 pc = 12 pt)。
这串字的字体大小为50 px!
需注意的是在输入代码时值和单位之间不能有空格,例如CSS代码可以识别 1px ,但不能识别 1 px 。
常用版式代码实例
下面我将会展示一些常用的版式代码实例,供读者参考。
横向条纹
使用如下代码可以让页面上出现覆盖全屏的横向条纹。你需要自定义条纹的颜色、宽度及模糊度,将如下示例中的汉语文字内容替换为对应数值。
#extrac-div-1 {
position: fixed;
width: 100vw;
height: 100vh;
pointer-events: none;
background: repeating-linear-gradient(180deg,rgba(rgb颜色代码,0),rgba(rgb颜色代码,.15) 50%,rgba(rgb颜色代码,0));
background-size: auto 线条宽度(以px为单位);
opacity: 模糊度(0.0~1.0);
}
这是一个橙色条纹的代码示例。
#extrac-div-1 {
position: fixed;
width: 100vw;
height: 100vh;
pointer-events: none;
background: repeating-linear-gradient(180deg,rgba(255,14,2,0),rgba(255,14,2,.15) 50%,rgba(255,14,2,0));
background-size: auto 10px;
opacity: 0.8;
}
这条代码的原理其实很简单,如果你将维基点默认页面的源代码翻出来并检索该id就可以找到这一串代码。
<div id="extrac-div-1"><span></span></div><div id="extrac-div-2"><span></span></div><div id="extrac-div-3"><span></span></div>
<!-- These extra divs/spans may be used as catch-alls to add extra imagery. -->
<div id="extra-div-1"><span></span></div><div id="extra-div-2"><span></span></div><div id="extra-div-3"><span></span></div>
<div id="extra-div-4"><span></span></div><div id="extra-div-5"><span></span></div><div id="extra-div-6"><span></span></div>
你不需要理解这一串代码是什么意思,你只需要知道维基点页面自带id属性为 extrac-div-1 到 extrac-div-6 的<div>元素,所以在使用该CSS代码时就不需要再往页面添加特定属性的元素了。
扫描线
使用如下代码可以让页面上出现由上到下的扫描线。你需要自定义扫描线的颜色、宽度,将如下示例中的汉语文字内容替换为对应数值。
#extrac-div-2 {
position: fixed;
width: 100vw;
height : 线的宽度(单位为rem);
top: 0;
pointer-events: none;
background: linear-gradient(to bottom, rgb(rgb颜色代码) 0%,rgb(rgb颜色代码) 50%,rgb(rgb颜色代码) 51%,rgb(rgb颜色代码) 100%);
opacity : .1;
animation: scanm 刷新频率(单位为s) linear infinite;
}
@keyframes scanm {
0% { top: -1rem; opacity : .05;}
25% { top: 50%; opacity: .03;}
37.5% { top: 75%; opacity: 0.06;}
50% { top: 100%; opacity: .03;}
100% { top: 100%;}
}
这是一个黑色扫描线的代码示例。
#extrac-div-2 {
position: fixed;
width: 100vw;
height : 1rem;
top: 0;
pointer-events: none;
background: linear-gradient(to bottom, rgb(0,0,0) 0%,rgb(0,0,0) 50%,rgb(0,0,0) 51%,rgb(0,0,0) 100%);
opacity : .1;
animation: scanm 3s linear infinite;
}
@keyframes scanm {
0% { top: -1rem; opacity : .05;}
25% { top: 50%; opacity: .03;}
37.5% { top: 75%; opacity: 0.06;}
50% { top: 100%; opacity: .03;}
100% { top: 100%;}
}
这串代码运用到了CSS动画技术,我将会在后文进阶内容中进行讲解。
彩色氛围
使用如下代码可以让页面上出现渐变的彩色氛围。你需要自定义氛围的颜色及强度,将如下示例中的汉语文字内容替换为对应数值。
#extrac-div-3 {
position: fixed;
width: 100vw;
height: 100vh;
pointer-events: none;
background-image: radial-gradient(circle, rgba(rgb颜色,0) 0%, rgba(rgb颜色,0) 60%, rgba(rgb颜色,0.45) 100%);
opacity: 0.5;
mix-blend-mode: color-dodge;
background-repeat: no-repeat;
background-size: cover;
z-index: 3;
}
这是一个红色氛围的代码示例。
#extrac-div-3 {
position: fixed;
width: 100vw;
height: 100vh;
pointer-events: none;
background-image: radial-gradient(circle, rgba(255,0,0,0) 0%, rgba(255, 0, 0,0) 60%, rgba(255,0,0,0.45) 100%);
opacity: 0.5;
mix-blend-mode: color-dodge;
background-repeat: no-repeat;
background-size: cover;
z-index: 3;
}
漂浮方块
使用如下代码可以让页面上出现下落方块。你需要自定义方块的颜色、速度及频率,将如下示例中的汉语文字内容替换为对应数值。(ps:box-shadow属性后的代码内容应当多次复制并改用不同的横向属性长度值,否则页面仅会出现少量的悬浮方块)
#container-wrap:before,
#container-wrap:after {
animation: notes 漂浮速度(单位为s) linear infinite;
background: transparent;
box-shadow: 起点横向长度1(单位为px) 起点竖向高度1(单位为px) 16进制颜色代码, 起点横向长度2(单位为px) 起点竖向高度2(单位为px) 16进制颜色代码, ......;
border-radius: 3px;
content: " ";
height: 方块高度(单位为px);
position: fixed;
width: 方块宽度(单位为px);
z-index: 1;
transparent: 0;
opacity: 0.6;
}
@keyframes notes {
from {
transform: translateY(-2000px);
}
to {
transform: translateY(0px)
}
}
这是一个瘆人血雨的代码示例。(ps:将代码中“-2000px”和“0px”调换就可以使漂浮方块自下而上行进)。
#container-wrap:before,
#container-wrap:after {
animation: notes 10s linear infinite;
background: transparent;
box-shadow: 0px 800px #FF0000, 150px 500px #FF0000, 300px 300px #FF0000, 450px 900px #FF0000, 600px 1200px #FF0000, 750px 1100px #FF0000, 900px 100px #FF0000, 1050px 1500px #FF0000, 1200px 700px #FF0000, 1350px 900px #FF0000, 1500px 100px #FF0000, 1650px 300px #FF0000, 1800px 30px #FF0000, 1950px 800px #FF0000, 2100px 150px #FF0000;
border-radius: 3px;
content: " ";
height: 15px;
position: fixed;
width: 10px;
z-index: 1;
transparent: 0;
opacity: 0.6;
}
@keyframes notes {
from {
transform: translateY(-2000px);
}
to {
transform: translateY(0px)
}
}
这是一个开发性极高的代码内容,通过此代码片段你还可以在页面中制作出雨、雪、灰烬、群星等诸多浮块效果。
背景替换
使用如下代码可以让页面的背景被图片替换。
div#container-wrap {
background-image: url("图片URL");
background-attachment: fixed;
background-size: cover;
background-position: center center;
}
效果如Region 3的现版版式
另一种版头
如果你想要把logo放在版头文字的左边,这串代码可以帮到你。
#header, #top-bar {
background-attachment: scroll;
}
#header {
background-image: none;
}
#header::before {
content: "";
position: absolute;
height: 100%;
width: 100%;
right: 2.5rem;
top: -0.3rem;
background-size: auto 5rem;
background-position: left;
background-repeat: no-repeat;
opacity: 0.8;
}
#header h1, #header h1 a {
position: absolute;
left: 4.8rem;
top: 0.8rem;
margin: 0;
width: 100%;
display: flex;
justify-content: left;
z-index: 0;
}
#header h2, #header h2 span, #header h2 span::before {
position: absolute;
left: 3.3rem;
top: 1.8rem;
margin: 0;
width: 100%;
display: flex;
justify-content: left;
}
改变你的编辑选项
通过以下代码你的页面编辑选项会变得更宽敞。
div[id*=page-options-bottom]:not(.page-rate-widget-box):not(#search-top-box-form)>a.btn {
padding: 3px;
box-shadow: none;
flex-basis: 7rem;
}
div[id*=page-options-bottom]>a:after {
content: none;
}
使用端兼容
你在查阅部分版式/组件的源代码时可能会发现带有 @media 标识的选择器,该选择器是用于兼容不同媒体的不同显示方式的。举例而言电脑端窗口的宽度大多在1000px以上,而手机端的窗口宽度通常小于600px。因此部分较宽的模块在电脑端上显示正常到了手机端可能就会挤得变形。
在如下实例中页面宽度少于600px的媒体(竖屏手机端)显示的文字将为黄色,而大于600px(常规电脑端)显示的文字为红色。通常情况下你不会使用该代码(但是有时候做组件或者特殊排版要用),在此仅作科普。
@media screen
{
p {color:red;}
}
@media (max-width:600px)
{
p {color:yellow;}
}
本篇目将告诉读者如何在文章中正确地使用字体以及@import代码的用法。
样式表
样式表(可以简单理解为CSS代码堆),分为外部样式表(External style sheet)、内部样式表(Internal style sheet,即用<style>或[[module css]]引入的样式表)和内联样式(Inline style,用style属性引入的样式)三类,本段落主要讲解外部样式表的使用。
通常当同一样式需要应用于多个页面时,外部样式表实用性较高。在使用外部样式表的情况下,你可以通过改变一个文件来改变多个页面的外观。外部样式表的应用方法之一是使用<link>元素(出于该标签特性,该标签没有闭合标签),代码置于<head>部分中,示例如下。(不过在维基点代码中该方法不常用,在此仅作科普)
<link type="text/css" href="CSS文件链接">
更常用的一种方法是CSS的@import 规则,其代码如下。需注意的是该代码必须置于内部样式表中的最开始的位置。
@import url("引用文件的链接")
此外,如果要引用的是维基点站点的一个界面中已有的样式你可以使用代码[[include :页面名称]],例如你要引用https://cr-universe.wikidot.com/themeregion1的代码时就可以输入如下代码。该代码无位置要求。
[[module CSS]]
:root {
--theme-base: "black-highlighter";
--theme-id: "Region1";
--theme-name: "Region1 Theme";
--logo-image: url("http://brsandbox-pro.wikidot.com/local--files/wu-ze/logo2.png");
--header-title: "废弃仓库";
--header-subtitle: "肮脏,腐败,潮湿";
--white-monochrome: 109,109,109;
--very-light-gray-monochrome: 92,92,92;
--pale-gray-monochrome: 140,140,140;
--light-pale-gray-monochrome: 96,96,96;
--light-gray-monochrome: 42,42,42;
--gray-monochrome: 32,32,32;
--dark-gray-monochrome: 14,14,14;
--black-monochrome: 18,18,18;
--bright-accent: 37,37,37;
--medium-accent: 33,33,33;
--dark-accent: 41,41,41;
--pale-accent: 51,51,51;
--swatch-topmenu-border-color: var(--gray-monochrome);
--link-color: var(--bright-accent);
--hover-link-color: 96,96,96;
--alt-accent:140,140,140;
--background-gradient-distance: 20rem;
}
[[/module]]
字体使用
在维基点中使用字体需要分两步。第一步是将字体文件引入至页面,第二步是将字体运用至特定文字。如下是字体文件(其他css文件也可以通过此方式引入页面)引用的通用代码。
[[module css]]
@import url('你想使用字体的url');
[[/module]]
你可以在谷歌字体库中搜索你想要的字体。(ps:国内可能无法正常访问)
例如,你若需要使用钟齐志莽行书,你就需要在页面中引用该字体文件,代码如下。
[[module css]]
@import url('https://fonts.googleapis.com/css2?family=Zhi+Mang+Xing&display=swap');
[[/module]]
并且在需要改变字体的文段使用span元素,代码示例如下。其中font-family选项后接的是字体文件的“字体家族名称”,你可以在特定的字体页面查询到该信息。
[[module css]]
[[span style="font-family:'Zhi Mang Xing'"]]钟齐志莽行书[[/span]]
[[/module]]
需注意的是,中文字体文件体积巨大,写手不应在同一个页面引入大量字体文件造成卡顿。
字体库
该条目会展示文章中部分常用的特殊字体效果并注明字体家族名和引用方式。(这也是这个页面加载很卡的原因)
需注意,谷歌字体库的默认字体文件链接为“https://fonts.googleapis.com/css2?family=**家族名空格用加号替代**&display=swap”,例如ZCOOL XiaoWei字体的家族名就是ZCOOL XiaoWei,其链接为“https://fonts.googleapis.com/css2?family=ZCOOL+XiaoWei&display=swap”。为便于展示,下文中将以家族名一次代替长连接。
字体名称 | 分类 | 家族名 | 中文效果 | 数字符号 | 英文效果 |
---|---|---|---|---|---|
站酷小薇 LOGO 体 | 艺术字体 | ZCOOL XiaoWei | 这是一段中文文本 | ~!@#$%^&*()_+{}|":><?[]\;',./-= | This is an English text |
站酷庆科黄油体 | 艺术字体 | ZCOOL QingKe HuangYou | 这是一段中文文本 | ~!@#$%^&*()_+{}|":><?[]\;',./-= | This is an English text |
站酷快乐体 | 艺术字体 | ZCOOL KuaiLe | 这是一段中文文本 | ~!@#$%^&*()_+{}|":><?[]\;',./-= | This is an English text |
马善政毛笔楷体 | 手写字体 | Ma Shan Zheng | 这是一段中文文本 | ~!@#$%^&*()_+{}|":><?[]\;',./-= | This is an English text |
钟齐志莽行书 | 手写字体 | Zhi Mang Xing | 这是一段中文文本 | ~!@#$%^&*()_+{}|":><?[]\;',./-= | This is an English text |
有字库龙藏体 | 手写字体 | Long Cang | 这是一段中文文本 | ~!@#$%^&*()_+{}|":><?[]\;',./-= | This is an English text |
钟齐流江毛草体 | 手写字体 | Liu Jian Mao Cao | 这是一段中文文本 | ~!@#$%^&*()_+{}|":><?[]\;',./-= | This is an English text |
思源黑体 | 印刷字体 | Noto Sans SC | 这是一段中文文本 | ~!@#$%^&*()_+{}|":><?[]\;',./-= | This is an English text |
思源宋体 | 印刷字体 | Noto Serif SC | 这是一段中文文本 | ~!@#$%^&*()_+{}|":><?[]\;',./-= | This is an English text |
从该篇目开始,我将向你讲述一些更硬核的CSS和HTML代码知识,这可能需要一定的理解能力和代码基础,如果你无法理解部分文中内容,借助工具网站是个不错的选择。我推荐初学者使用该网站,当然如果你有其他选择也很好。
盒子模型
Div元素,即块级元素,是文章中常见的版式构成部分,是定义一样来容纳文字、span及其他Web对象的标准Web容器(可以理解为大小框子)。正如你所见这段话就在一个块级元素之中。使用Div能够让你创建方框和其他不同种类的形状来配合你文章的需要。
在页面中引入一个块元素你需要分两步完成。第一步,通过CSS代码定义div块的样式(包括颜色、边框、大小和位置等)。第二步,是通过维基语法引用代码块,将定义的块样式呈现在正文中。块级元素的引用代码默认为[[div]],如果你在页面中使用了纯HTML代码那么你需要使用<div>来加入块级元素,<div>元素经常与 CSS 一起使用,用来布局网页。
我们先从块元素的CSS设计说起。在学会使用块级元素之前你需要HTML元素在CSS中的本质即盒子模型。简单来说CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:Margin(外边距),Border(边框),Padding(内边距)和Content(内容)。其中外边距指清除边框外的区域是透明的,边框介于内外边距之间,内边距介于内容模块与边框之间也是透明的,内容模块是真正的存放文本和图片的区域,其关系正如下图所示。

分类选择器
在维基点中块级元素常与CSS代码的分类选择器连用。分类选择器以 . 开头,后面跟着 class 属性值。与ID选择器类似,class也是HTML代码的一个属性,但不同的是class可以用于多个元素,而is只能用于单一元素。分类选择器的本质就是[class=" … "]的属性选择器,但比起该格式仅仅一个 . 会简单得多。如下是一个分类选择器的实例,它会选中[[div class="my-div"]]。
.my-div {
border: 5px;
padding: 10px;
margin: 10px;
}
制作你的块级元素
(ps: 懒人不会做块级元素可以借助该网站点击跳转)
制作一个块级元素首先要考虑到块的体积,以及其是否会影响到整体排版的美观。你需要有选择地设置块级元素的内外边距、边框和宽度。需注意的是,我们建议作者不要将选择器选项设为全体块级元素,作者应使用分类选择器搭配分类属性制作特定的块级元素。如下是一个维基点代码块级元素的实例,# 后面是对代码的注释。
代码内容:
[[module css]]
.my-div { # 表示该选择器的对象为"class"属性为"my-div"的元素
width: 300px; # 表示该块级元素宽度强制锁定在300 px
border: 2px solid red; # 表示该块级元素的边框宽度为2 px,外观为红色实线
padding: 10px; # 表示该块级元素的内边距为10 px
margin: 10px; # 表示该块级元素的外边距为10 px
}
[[/module]]
[[div class="my-div"]]
这是一个块级元素!
[[/div]]
输出内容:
这是一个块级元素!
事实上,一个块级元素的代码段并非要求完全具有以上属性,在编辑块级元素的CSS样式时我们可以省略部分不需要的属性内容。例如,去除width属性那么该块级元素就占满整行,去除border属性该块级元素就会失去边框,去除padding属性该块级元素的内边距就会设为零,去除margin属性该块级元素外边距就会设为零。
如下是一个实例。
这个块级元素没有width属性!
这个块级元素没有border属性!
这个块级元素没有padding属性!
这个块级元素没有margin属性!
此外在编辑块级元素时应注意,width属性和height属性(设定元素的高度,我们很少在块级元素中使用该属性因为固定属性很容易导致块装不下块内的文字导致文字超出块出现格式错乱)都是针对于内容模块(Content部分)而言的,因此实际上一个块级元素的总宽度=宽度+左填充+右填充+左边框宽+右边框宽+左边距+右边距(我们通常将内边距称为填充,外边距称为边距),同理一个块级元素的高=高度+顶部填充+底部填充+上边框+下边框+上边距+下边距。因此在设置一个块级元素的边框、填充和边距时应提前考虑到整个块级元素所占体积是否合理。如下是两个错误示例。
块的边框
如果你仅设置一个块级元素边距、填充和边框的宽度,实际上这个块级元素不会显示出任何明显的样式(即该块级元素的边框、填充、边距都完全透明)。你需要对该块级元素的各部分进行颜色、类别等属性的设置,我们先从边框的属性设置讲起。
首先,你需要明确一个块级元素的边框由顶部(top)、底部(bottom)、左部(left)、右部(right)四个板块构成,默认的border属性的对象同时包含四个部分的边框。通过属性你可以改变边框的颜色(color)、宽度(width)和样式(style)。因此边框属性由三部分构成,格式为"border(-部位)(-对象)",括号中内容是选填项。如下是一个块的示例。
.border-div{
border-top-color:red; # 定义顶部边框为红色
border-left-color:blue; # 定义左侧边框为蓝色
border-right-color:yellow; # 定义右侧边框为黄色
border-bottom-color:green; # 定义底部边框为绿色
border-top-width:9px; # 定义顶部边框宽度为9px
border-left-width:8px; # 定义左侧边框宽度为8px
border-right-width:8px; # 定义右侧边框宽度为8px
border-bottom-width:9px; # 定义底部边框宽度为9px
border-top-style:ridge; # 定义顶部边框为脊边样式
border-bottom-style:ridge; # 定义底部边框为脊边样式
border-left-style:groove; # 定义左侧边框为沟槽样式
border-right-style:groove; # 定义右侧边框为沟槽样式
padding: 20px; # 设置块的内边距为20px
margin: 20px; # 设置块的外边距为20px
}
该块级元素效果如此。
如下是CSS中可用的样式列举:
none:默认无边框样式。
solid:实线样式。
dotted:点线样式。
dashed:虚线样式。
double:双层样式。
groove:沟槽样式。
ridge:脊边样式。
inset:嵌入样式。
outset:突出样式。
你会发现用这种方式定义一个块级元素会导致代码冗长,实际上我们在进行代码编辑时并不会将代码的每一项都完整的列举出来,你可以将CSS代码进行简写,即输入简化代码。如果你细心的话可以发现在前文的实例中一个块级元素定义边框的代码是"border: 2px solid red;",这段代码的意义为将元素的四个边框都设置为2px的宽度、实现样式、红色颜色,用一句代码就代替了三段(甚至十二段)代码。
简化代码的格式有两种,一种是同类的简化,具体示例如下:
以border-color属性为例,该属性可以同时有1-4个值:
同时附有四个值:
- border-color:red yellow blue green;
- 上边框是红色
- 右边框是黄色
- 底边框是蓝色
- 左边框是绿色
同时附有三个值:
- border-color:red yellow blue;
- 上边框是红色
- 左、右边框是黄色
- 底边框是蓝色
同时附有两个值:
- border-color:red yellow;
- 上、底边框是红色
- 左、右边框是黄色
仅附有一个值:
- border-color:red;
- 四面边框都是红色
样式、宽度同理,接遵循如上顺序规则
你会发现这种代码书写方式很难记,不易区分,因此更多时候我们会使用如下方式书写代码,即指定四面边框中的一面再设置宽度、样式、颜色:
简写属性代码的格式十分简单,即"border-left/right/top/bottom:宽度 样式 颜色",则上一个块级元素的实例代码可以简化如下:
.border-div{
border-top:9px ridge red;
border-left:8px groove blue;
border-right:8px groove yellow;
border-bottom:9px ridge green;
padding: 20px;
margin: 20px;
}
块的填充
块的填充(内边距)的设置与边框类似,但由于填充本身是透明的,所以填充属性只存在一个宽度值(填充也可以使用百分比设置宽度)。与边框一致,填充也分为上下左右四个部分。如下是一个填充实例。
代码内容:
.padding-div{
border:9px ridge red;
padding-top:25px;
padding-bottom:25px;
padding-right:50px;
padding-left:50px;
margin: 20px;
}
效果如下:
这个块级元素的左右内边距为50px,上下内边距为25px。
同理,内边距设置的简化代码中四边的顺序也类似于边框设置四边的顺序。
外边距与轮廓
首先,你应当明确轮廓(outline)不等于边框,而是在边框之外的与边框贴合的一个元素部分(可以理解为第二层边框)。与边框类似轮廓的属性也分颜色、样式和宽度,其中轮廓的样式和边框完全一致,因此轮廓可当作第二次边框使用。如下是一个轮廓实例。
.outline-example{
border: 4px ridge red;
outline-color: yellow;
outline-width: 5px;
outline-style: groove;
padding: 10px;
margin: 10px;
}
效果如下:
如你所见,这个块级元素有着红色的边框和黄色的轮廓。
同理,轮廓也可以使用"outline:宽度 样式 颜色"的简化代码,但是需注意的是轮廓不能单独设置四边的宽度、样式和颜色,因此单独使用轮廓多用于文字元素的描边。
外边距位于轮廓之外,与内边距即填充一致都是透明的,只有宽度属性且可单独设置每一边的宽度。但与内边距不同的是外边距的宽度属性可以设置为auto,这样该元素的外边距宽度就会依赖于浏览器。
块的背景
除了改变元素的边距和边框、轮廓,你还可以设置元素的背景。最基础的,你可以设置元素背景板为纯色,这需要用到属性background-color(如果你将background-color属性作用于<body>元素上就会改变整个页面背景的颜色),如下是一个纯色背景实例。
代码内容:
.colorful-background{
background-color:#b0c4de;
padding: 10px;
margin: 10px;
border: 3px ridge red;
}
输出效果:
你可以发现默认情况下背景就是指边框内的区域(含边框不含轮廓),包括边框、内容和填充。
并且你可以用图片作为元素的背景,这需要你使用background-image属性,属性后接图片的链接(URL)(或者是渐变,我会在后文中介绍)。在以图片为元素背景时你需要确定图片上的文本是否异读取,通常浅色图片背景要使用深色文字,深色图片背景要使用浅色文字,有关文字颜色的设置我会在后文讲解。如下是一个背景图片的实例。
代码内容:
.bg-img-exa{
background-image: url(http://backroomssandboxcn.wikidot.com/local--files/wuze/re0_pic1.png);
padding: 10px;
margin: 10px;
border: 5px dotted red;
}
你会发现,默认情况下图片会以原比例平铺在元素背景中。
如果你使用的不是可衔接的循环拼图背景,那你可以选择将图片的比例进行调整。你需要使用background-repeat属性,为图片背景选择合适的铺展方式。常见的属性值及实例如下。
repeat:默认值,图片以原比例平铺在元素背景中。
repeat-x:图片竖以原比例横向平铺在元素背景中,且只会平铺一排。
repeat-y:图片竖以原比例竖向平铺在元素背景中,且只会平铺一列。
no-repeat:图片不会进行平铺。
你会发现在如上实例中,图片的比例都是一致的,实际上背景图片的比例也可以更改。你可以通过background-size属性来设定背景图片的比例,该属性的值可设为两个长度或两个百分比,前者的对象是背景图片宽度相对于元素宽度的比例,后者则是背景图片的高度相对于元素高度的比例。需注意这些属性不适用于纯色图片,如下是代码实例。
此外,你可以通过background-origin属性选定背景图片的起始位置,该属性的值可以设为content-box(内容区)、padding-box(填充区,默认值)或border-box(边框区),选择对应的值最左边上端的图片的左上角会和该区的左上角重合。
很多情况下background-origin属性会和background-clip属性连用,background-clip属性的作用是将某个区域外的图片部分裁剪掉,其设值与background-origin属性一致。一下是该属性的实例。
此外,你还可以设置背景图片的位置,这需要使用background-position属性。该属性的值有两个,前者是横向距离,后者是纵向距离。需注意的是该属性的值既可以是长度、比例,也可以是关键字,包括left、right、center、top、bottom、center,如果仅指定一个关键字,其他值将会是center。如下是几个图片位置实例。
left bottom:图片位于元素的左下角。
200px 100px:图片距左边框200px,距上边框100px。
20% 35%:图片在元素横向长度的20%处,竖向高度的35%处。
你还可以通过此方式将图片与文字放在同一个块中。
[[/civ]]
另外,如果你想要背景图片不随着页面的滚动而滚动,你可以将元素的background-attachment属性设定为fixed,具体效果可以看电脑端(或手机端横板)左侧的侧栏展开。
此外,背景也有简写属性,格式为"background: 颜色 图片地址 重复性 位置"。如下是一个背景简写实例。
.ba-div-test{
background:#ffffff url(http://cr-sandbox.wikidot.com/local--files/wu-ze/background) no-repeat right top;
border: 4px ridge red;
padding: 10px;
margin: 10px;
}
这是一个简写背景的块。
除此之外,同一个元素可以拥有多个背景,用法就是在每个属性后按顺序将多个背景的各个值用逗号隔开,示例如下。
.ba-div-test2{
background-image: url(http://cr-sandbox.wikidot.com/local--files/wu-ze/logo-p), url(http://cr-sandbox.wikidot.com/local--files/wu-ze/background);
background-position: right bottom, left top;
background-repeat: no-repeat, repeat;
border: 4px ridge red;
padding: 10px;
margin: 10px;
}
这个块有两个背景元素。
其实,在CSS代码中你还可以使用 filter 属性对图片进行滤镜效果设置,但效果不如自己P图好,所以不在此详细介绍,有硬需求请自行查阅相关网站。
块的圆角
在CSS代码中你可以使用border-radius制作圆角,圆角属性的值是一个或多个长度,即圆角范围的正方形边长。如下是几个圆角实例。
代码内容
.radius-1{
border: 2px solid red;
padding: 10px;
border-radius: 10px;
margin: 20px;
}
.radius-2{
border: 2px solid red;
padding: 10px;
border-radius: 10px 20px;
margin: 20px;
}
.radius-3{
border: 2px solid red;
padding: 10px;
border-radius: 10px 20px 30px;
margin: 20px;
}
.radius-4{
border: 2px solid red;
padding: 10px;
border-radius: 10px 20px 30px 40px;
margin: 20px;
}
只设置一个值时该值会作用在块的每一个角上。
只设置两个值时,第一个值会作用在块的左上角和右下角,第二个值会作用在块的右上角和左下角。
只设置三个值时,第一个值会作用在块的左上角,第二个值会作用在块的左下角和右上角,第三个值会作用在块的右下角。
设置四个值时,第一个值会作用在块的左上角,第二个值会作用在块的右上角,第三个值会作用在块的右下角,第四个值会作用在块的左下角。
块的阴影
在CSS代码中你可以使用box-shadow属性制作阴影,最基础的阴影属性值由三个部分构成即"横向距离 竖向距离 阴影颜色",但这样的阴影仅相当于将块换了个颜色进行平移(具有廉价感),因此更多情况下我们会使用四个值的阴影属性即"横向距离 竖向距离 阴影深度 阴影颜色",你可以将深度理解为模糊度。具体示例如下。
代码内容:
.shadow-1{
border: 2px solid red;
padding: 10px;
box-shadow: 20px 10px #888888;
margin: 30px;
}
.shadow-2{
border: 2px solid red;
padding: 10px;
box-shadow: 20px 10px 10px #888888;
margin: 30px;
}
.shadow-3{
border: 2px solid red;
padding: 10px;
box-shadow: -20px -10px 10px #888888;
margin: 30px;
}
这是一个无模糊度的阴影实例。
这是一个模糊阴影实例。
阴影属性的长度值可以为负数。
拓展内容
不止<div>元素,大部分的排版元素都可以视为一个"盒子",因此如上所述的大部分属性也可以运用在其他元素中,如下是一些实例"盒子"。
文章节将对常见的文字属性及行内样式运用进行讲解。(ps: 本教程作为中文站点教程,不考虑作者大量使用英语进行创作的情况,因此省略有关英语单词换行及裁剪属性的介绍)
style属性和span标签
在HTML中你可以在大部分元素的开放标签中使用style属性,style属性的功能就是对该元素进行CSS样式的设置。通常选择器选择元素的CSS代码串都可以通过该属性直接调用至HTML代码(无需使用module引入)。因此,在对元素进行简单的样式编辑(例如只改个文本颜色、加个文本样式)时,我们更多情况下会直接使用style属性。这正是前文中所说的内联样式。
style属性的赋值方式就是将CSS代码对选择器的属性赋值排成一排作为元素的属性赋值,如下一个style属性的实例。可以理解为对ID选择器的二次简化。由于内联样式的作用对象本身就是选定的元素,所以使用style属性时无需列出选择器。
CSS代码样式:
<style>
#test {
text-align: right;
color:red;
}
</style>
<p id="test">测试文本</p>
内联样式:
<p style="text-align: right;color: red;">测试文本</p>
输出效果:
除了前文所提及的块级元素,在HTML中行内元素也很常见,<span>标签用于整合行内元素。在维基点写作中<span>标签通常会与style属性连用用于改变部分文字的外观样式,最常见的用法就是改变文字的颜色。但需注意的是部分CSS属性不适用于行内元素(例如如上实例中的text-align属性,但前文中所提到的块级元素属性大部分也适用于<span>标签),在使用时应将该属性赋值给段落标签即<p>。
文字颜色及方向
从最简单的文字颜色说起,在"顶栏-指导-语法指南"中我们说过你可以通过[[span]]代码来设置文字的颜色,实际上这种方法的本质就是通过内联样式对文字的color属性(color属性默认就是指文字颜色,而不是text-color)进行更改从而改变文字的外观。如下是改变文字颜色的维基点代码实例。
代码内容:
[[span style="color:red;"]]红色[[/span]]
输出效果:
红色
文字还有一个比较小众的属性即direction,使用该属性你可以更改文字的书写方向(详见实例),默认情况下文字是从左往右书写即属性赋值为ltr,部分语言存在着从右至左书写文字(如阿拉伯语、希腊语)的情况即赋值rtl。(不常使用,仅作科普)
字间距设置
在CSS代码中,你可以通过letter-spacing属性(部分教程可能会说word-spacing属性是设置字间距的,实际上该属性适用于设置英文单词间的词与词之间的距离,对中文来说没什么用处)设置字间距,该属性的赋值为长度,可以为负数。
对应的,你可以用line-height属性来设置文字的行高,及上下两排文字的顶部/底部间的距离。该属性的赋值通常为长度或百分比(需注意的是大多数浏览器的默认行高约为110%至120%),但也可以使用单独的数字,这种情况下行间距等于字体高度的倍数。
代码内容:
[[span style="letter-spacing:3px;line-height:200%;"]]这是一个测试文本:意识坠入无止境的黎虹光火,被人世间的绚烂所困。我们被困了一生,被骗了一生。这个世界,或者说“现实”,已然被无意义的意义充填。眼前的黎虹灯光被单一的白色替换,我们脱离,终于面对了自己的内心。冇需告别,这便是我们亦无意义的告别之所。这里是另一个世界,这里除了长相奇特的实体,各种各样的物品以及被随机分割的区域以外什么都没有。这里的生存环境也比较苛刻,如果你来到了这,但愿你能活下来。[[/span]]
输出效果:
这是一个测试文本:意识坠入无止境的黎虹光火,被人世间的绚烂所困。我们被困了一生,被骗了一生。这个世界,或者说“现实”,已然被无意义的意义充填。眼前的黎虹灯光被单一的白色替换,我们脱离,终于面对了自己的内心。冇需告别,这便是我们亦无意义的告别之所。这里是另一个世界,这里除了长相奇特的实体,各种各样的物品以及被随机分割的区域以外什么都没有。这里的生存环境也比较苛刻,如果你来到了这,但愿你能活下来。
文本对齐
在CSS代码中你可以使用text-align属性进行文本对齐。注意,该属性只能用于段落而不能用于行内。默认情况下(即direction属性为ltr),该属性值为left,但如果direction属性为rtl,则该属性默认值为right。此外该属性可以赋值justify和center。实例如下。
此外你可以使用vertical-align属性将段落中的文字和段落中的图片等高度不同的元素的顶端/底部对齐,如下是对齐的实例。注意,该属性仅用于内联样式不用于段落
文本划线与自然段空格
在CSS代码中,你可以使用text-decoration属性给文本添加自定义划线,包括underline(下划线)、overline(上划线)和line-through(删除线),其中下划线和删除线在维基点语法中皆有凭替(__下划线__和--删除线--),因此该属性不常用于文章。
此外,你可以使用text-indent在每个段落开头制造空格,在部分条件下增强表达效果。该属性的赋值为一个长度,选择器不能为行内元素。
代码内容:
<p style="text-indent:50px;">这是一个实例。</p>
效果:
文本阴影
设置文本阴影的属性为text-shadow,其赋值格式与块级元素赋值格式一致皆为"横向距离 竖向距离 深度 颜色",在此不赘述。
代码内容:
<p style="text-shadow: 2px 2px 2px #ff0000;">这是一个实例。</p>
效果:
文字大小和粗细
在CSS代码中你可以使用font-size来指定文本的大小,其使用赋值方式与维基点的[[size]]代码完全一致,在此不赘述。
另外你可以使用font-weight属性来指定文本的粗细,该属性可赋值bold(粗体)、bolder(二级粗体)、lighter(细体)、normal(默认值)、100~900的整百数字(由细到粗,400等同于normal而700等同于bold)。实例如下。
光标图案
在CSS代码中,你可以使用cursor属性定义鼠标指针放在一个元素边界范围内时所用的光标形状。该属性可赋的值如下,或者你可以给该属性赋值一个url使光标为自定义形状。
本章节讲解CSS中伪类和伪元素的使用方法。
链接样式
通过CSS代码你可以改变页面中链接的样式,你可以通过a:link选择器选中所有未访问的链接,通过a:visited选择所有访问过的链接,通过a:active选择器改变链接点击后的样式,a:hover选择器改变光标停留在链接上的样式。
代码内容:
[[module css]]
a:hover{
text-decoration:underline;
letter-spacing:1px;
font-size:120%;
}
[[/module]]
输出效果:
需注意的一点是,a:hover 必须跟在 a:link 和 a:visited 后面,并且 a:active 必须跟在 a:hover后面。你可能发现,以上的这些选择器都由元素加上冒号和另一串单词构成,这类特殊的选择器被称为伪类,前文中所提及的 :root 也是伪类。
此外,伪类不一定要使用在链接元素上,将伪类使用在其他元素上可以呈现出诸如光标悬停检测的效果。
伪类和伪元素
你可能发现,以上的这些选择器都由元素加上冒号和另一串单词构成,这类特殊的选择器被称为伪元素。伪类可以改变元素在特定状态下的样式。
除此之外,CSS代码中还存在着一些选择器,它们可以在不改变HTML结构的情况下对页面元素的特定部分进行内容设置(看起来就像在页面中增添了HTML元素),它们被称为伪元素。常用的CSS伪元素还有 ::before、::after、::first-line、::first-letter 等。
通常伪类只有一个冒号,伪元素有两个冒号。伪类和伪元素的最大区别在于伪类只是该别元素特定状态下的样貌,而伪元素是增加了新的内容。
另外一点,你可能发现某些代码中的伪元素使用了单个冒号(如:before),有些则使用双冒号(如::before)。其实,这是因为早期版本的CSS中伪元素都是用的单个冒号,但在CSS3也就是当前主流版本中伪元素的格式规范为双冒号(注:链接的伪元素仍然使用单冒号且改用双冒号后不可识别),但当前版本单冒号的伪元素依然可被识别。因此,单冒号和双冒号的伪元素在输出效果上没有区别,在后文中我会规范格式使用双冒号的伪元素。
文前和文后
在CSS代码中你可以在选择器后增加::before和::after选择器对选择内容的文前文后部分进行更改。这两个伪元素通常搭配content属性使用,通过该属性你可以在文前文后部分增加文字、图片等元素,如下是两个实例。(伪元素也可以和ID选择器、Class选择器等一同使用)
[[module css]]
h1::before{
content:"!!! ";
}
[[/module]]
+ 这是一个标题
输出效果:
!!! 这是一个标题
[[module css]]
p::after{
content:" 喵~";
}
[[/module]]
这是一个段落
输出效果:
这是一个段落 喵~
当然,伪元素的用途远不止于此。你可以将在块级元素中介绍过的属性与伪元素搭配使用,从而实现不可思议的效果。其实文前和文后的伪元素实际位置不一定在选择对象的左部或者右部。例如,如下就是网站版头logo的代码。
#header::before {
content: "";
position: absolute;
height: 100%;
width: 100%;
left: 0;
top: 0;
background-image: var(—logo-image);
background-size: auto 16rem;
background-position: center;
background-repeat: no-repeat;
opacity: 0.4;
}
你可能不能完全理解如上代码,但你可以发现版头logo并非位于版头前(实际上这串代码将logo设为版头的背景并将其强行锁定在版头中央)。这说明通过使用伪元素我们可以对维基点的强制锁定样式内容做出外观上的改动。
首行和首个字母
通过伪元素::first-line你可以对段落的第一行的外观进行更改。如下是一个实例。
[[module css]]
.first-line-exa::first-line{
background-color:red;
}
[[/module]]
[[div class="first-line-exa"]]
这是第一行文字,它的背景变红了。
这是第二行文字,他的背景不受影响。
[[/div]]
输出效果:
这是第一行文字,它的背景变红了。
这是第二行文字,他的背景不受影响。
通过伪元素::first-letter你可以对段落的第一个子的外观进行更改。如下是一个实例。
[[module css]]
.first-letter-exa::first-letter{
font-size:180%;
}
[[/module]]
[[div class="first-letter-exa"]]
这是第一个字,它比别的字要大一些。
[[/div]]
输出效果:
这是第一个字,它比别的字要大一些。
本章节介绍元素在页面中的显示与位置。
显示
在CSS代码中,你可以使用 visibility:hidden; 代码或者 display:none; 代码使目标元素隐藏。两者的区别在于 visibility:hidden ; 代码在隐藏元素后元素仍然会占位影响布局,即元素只是外观上变得完全透明不可视单并没有消失。而 display:none; 代码则是完全意义上的隐藏元素,且隐藏的元素不会占用任何空间。
两者通常不会用于页面内容的创作,但可用于改变维基点页面的强制布局,以移除默认的页面元素。例如,使用如下代码就可以消除顶栏的分类显示。
[[module css]]
#top-bar {
display:none;
}
[[/module]]
此外,你还可以通过opacity属性来更改元素的透明度,该属性的赋值为一个0.0到1.0的数值,其中0.0代表完全透明,1.0代表完全不透明。如下是透明度效果。
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
位置设置
在CSS代码中,你可以通过left、right、top、bottom四个属性设置元素的外边距边框与其所在元素块的边框间偏移的距离。这些属性的赋值可以是auto(默认值,根据浏览器自行设置距离)、百分比或长度。如下是一个代码示例。
代码内容:
<div style="left:100px;position:relative;"> 这段文字距离所在块的左边界有100px的距离</div>
<div style="margin-left:50px;left:100px;position:relative;">这段文字的左外边距边界距离所在块的左边界有100px的距离,因此这段文字距离所在块的左边界有150px的距离</div>
输出效果:
(该代码中position属性的使用会在下文提到)
你可能会思考如果同一个元素同时具有left和right两个属性,且该元素的宽度不支持同时满足两属性的情况下,该块元素会如何显示。实际上在CSS中left属性比right属性优先级更高,因此出现上述情况时浏览器会忽视right属性,即left属性和right属性同时存在于同一选择器时right属性会失效。同理,top属性和bottom属性同时存在于同一选择器时bottom属性会失效。(ps:当相对立的两属性中一者赋值为initial时两者可同时存在,因为该赋值适用于任何属性,作用是将其设置为默认值)
在排版时你可能发现上述代码中存在着字体被遮挡的现象,其原因是元素的定位与文档流(文档中可显示对象在排列时所占用的位置)无关,所以元素可以覆盖页面上的其它元素。具体的解决方法我会在下文指出。
position属性
position属性指定了元素的定位类型,是改变元素位置的必要属性,如果不设置元素的position属性,如上改变元素位置的属性都会失效。这是因为position属性的默认赋值为static,该赋值状态下静态元素遵循正常的文档流规则,不受定位属性影响。除此之外position还存在多种赋值,下文中我将展开具体介绍。
当position属性赋值为fixed时,选择的元素位置相对于浏览器窗口是固定位置,即使窗口是滚动的它也不会移动(该元素的位置仅相对于浏览器窗口,与上级元素无关)。如下是一个固定位置的板块实例。
.fixed-box {
position: fixed;
right: 30px;
bottom: 12rem;
border: 2px solid red;
height: 300px;
}
当position属性赋值为relative时,其位移效果说相对于其正常状态下的位置。需注意的是该赋值情况下,位移元素所占的空间不会改变,但是元素所包含的内容会随元素产生位移。如下是一个实例。
代码内容:
<p>这是段落的正常位置</p>
<p style="position:relative;left:-10px;">这个段落相对于正常情况向左移了10px</p>
<p style="position:relative;left:50px;">这个段落相对于正常情况向右移了50px</p>
<p>占位</p>
<p style="position:relative;top:-20px;">这个段落相对于正常情况向上移了20px</p>
<p>然而它并没有改变其原本的占位空间</p>
输出效果:
当position属性赋值为absolute时,元素的位置相对于最近的已定位上级元素(的内边距内边界),若元素没有已定位的上级元素其位置相对于<html>元素。也就是说该赋值条件下的元素它的位置设定是相对于最近的已设置position属性的上级元素。相对定位元素经常被用来作为绝对定位元素的容器块。
代码内容:
[[div]]
[[div style="position:relative;border: 2px solid red;padding: 10px;margin: 10px;"]]
[[div style="position:absolute;left:20px;top:15px;"]]
这是一个绝对定位元素,它的位置相对于最近的上级元素。
[[/div]]
[[div style="position:relative;border: 2px solid blue;padding: 10px;margin: 10px;"]]
[[div style="position:absolute;left:30px;top:22px;"]]
这是一个绝对定位元素,它的位置相对于最近的已定位上级元素(即上上级元素)。
[[/div]]
[[/div]]
[[/div]]
[[/div]]
输出效果:
这是一个绝对定位元素,它的位置相对于最近的上级元素。
这是一个绝对定位元素,它的位置相对于最近的已定位上级元素(即上上级元素)。
当position属性的赋值为sticky时(也称作粘性定位),元素会基于用户的滚动位置来定位。粘性定位的元素是依赖于用户的滚动,在 position:relative 与 position:fixed 定位之间切换。默认情况下元素的定位为 position:relative 定位,但当页面滚动超出目标区域时它的定位方式切换至 position:fixed 定位。需注意,只有指定 top, right, bottom 或 left 四个阈值其中之一,才可使粘性定位生效,否则其效果与 position:relative 无异。如下是一个粘性定位实例。(ps:Safari浏览器使用粘性定位时要增加 position: -webkit-sticky; 属性)
代码内容:
div.sticky {
position: -webkit-sticky;
position: sticky;
top: 0;
padding: 5px;
background-color: #cae8ca;
border: 2px solid #4CAF50;
}
输出效果:
元素叠加
在如上实例中你会发现有些字被上方的元素遮挡。前文中我们说过这是因为元素的定位与文档流无关。解决该问题,你需要给元素设置z-index属性,该属性的赋值为一个正整数/负整数,默认值为auto即与其上级元素的同属性赋值相同。你可以将该属性理解为图层,当两元素重叠时该属性的赋值大的元素会显示在上方。如果两个定位元素重叠,没有指定z-index属性,在HTML代码中靠后的元素将被显示在最前面。 (如果你使用该属性时发现该属性不生效请检查以下你的代码中是否遗漏了位置属性)
代码内容:
[[module css]]
.behind{
position:relative;
left: 0px;
top: -50px;
z-index:2;
}
[[/module]]
[[span style="position:relative;z-index:3;color:red;"]]因为图像元素设置了 z-index 属性值小于该段文本, 所以它会显示在文字之后。[[/span]]
[[div class="behind"]]
[[image http://cr-sandbox.wikidot.com/local--files/wu-ze/logo-p]]
[[/div]]
输出效果:
因为图像元素设置了 z-index 属性值小于该段文本, 所以它会显示在文字之后。
本章节介绍CSS代码的overflow属性及浮动相关内容。
overflow属性
在前文使用高度属性和位置属性的部分实例中,你会发现部分文本超出了元素块的范围,即内容溢出元素框。通过使用overflow属性你可以对溢出元素块的内容进行显示方式的设置。
overflow属性的默认值为visible,该赋值情况下溢出的元素将会直接呈现在元素框外,但溢出的元素不会占排版空间。如下是一个实例。
这是一段文本。
这是一段文本。
这是一段文本。
如果你将overflow属性赋值为hidden则溢出的内容会被隐藏,效果如下。
这是一段文本。
这是一段文本。
这是一段文本。
如果你将overflow属性赋值为scroll则溢出的内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。注意,该赋值状态下即使元素没有溢出,滚动条也会显示。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
如果你将overflow属性赋值为auto则溢出的内容会被修剪,浏览器同样会显示滚动条以便查看其余的内容。但是,该赋值状态下若元素没有溢出,滚动条则不会显示。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这是一段文本。
这个块级元素中使用了 resize:both; 属性代码,因此你可以改变它的宽高,查看溢出的效果。
浮动
浮动属性会改变元素在页面中的显示位置,使元素向左/向右移动并改变其周围元素的排版(或出现在页面的左端/右端)。因此浮动常作用于图片元素,文章中常见的右/左置图片就是浮动元素的常见应用。
区域的光源主要为本区域天花板上的荧光灯。荧光灯的并不稳定,通常每三十分钟左右就会出现故障甚至熄灭。荧光灯熄灭时,区域内的可见度会急剧下降,但不至于令人无法行动。在熄灯情况下可以看清小范围内的环境。区域内的荧光灯还存在一些其他的故障。
在正常光照下突然发出嗡嗡声(多见)
在正常光照下突然闪烁,持续时间较短(多见)
在正常光照下突然熄灭,持续时间有长有短(少见)
在正常光照下亮度在一瞬间急剧提升,其亮度甚至可以使人眼短暂致盲(极少见)
根据多次报告记载,C.R.T.X.流浪者总结出了一些应对策略:如果灯光突然熄灭,流浪者需要停下来并找到合适的地面坐下,闭眼直到适应环境光线并可以看清,在行走的过程中请放松心态可以适当饮用能量饮料。如果灯光亮度在一瞬间急剧提升,流浪者应当立即低头,闭眼或用手遮眼,但不要尝试刺激眼球试图恢复视力,这种行为可能会进一步伤害到眼球。保持以上行为直到初步恢复视力后,轻快速离开此区域并联系Region 1的医疗组织进行治疗。
区域的光源主要为本区域天花板上的荧光灯。荧光灯的并不稳定,通常每三十分钟左右就会出现故障甚至熄灭。荧光灯熄灭时,区域内的可见度会急剧下降,但不至于令人无法行动。在熄灯情况下可以看清小范围内的环境。区域内的荧光灯还存在一些其他的故障。
在正常光照下突然发出嗡嗡声(多见)
在正常光照下突然闪烁,持续时间较短(多见)
在正常光照下突然熄灭,持续时间有长有短(少见)
在正常光照下亮度在一瞬间急剧提升,其亮度甚至可以使人眼短暂致盲(极少见)
根据多次报告记载,C.R.T.X.流浪者总结出了一些应对策略:如果灯光突然熄灭,流浪者需要停下来并找到合适的地面坐下,闭眼直到适应环境光线并可以看清,在行走的过程中请放松心态可以适当饮用能量饮料。如果灯光亮度在一瞬间急剧提升,流浪者应当立即低头,闭眼或用手遮眼,但不要尝试刺激眼球试图恢复视力,这种行为可能会进一步伤害到眼球。保持以上行为直到初步恢复视力后,轻快速离开此区域并联系Region 1的医疗组织进行治疗。
浮动即float属性的默认值为none,该赋值状态下元素不浮动,并会显示在其在文本中出现的位置。你可以将该属性设置为left/right,这样元素就会在页面左端/右端浮动。实例如上。
如果你将几个浮动的元素放到一起且页面有剩余空间,浮动元素将彼此相邻。效果如下。(尝试缩小窗口宽度查看浮动元素在空间不够的情况下的排版方式)
代码示例:
[[module css]]
p:first-letter{
float:left;
width:1.2em;
font-size:300%;
line-height:80%;
[[/module]]
输出效果:
意识坠入无止境的黎虹光火,被人世间的绚烂所困。我们被困了一生,被骗了一生。这个世界,或者说“现实”,已然被无意义的意义充填。眼前的黎虹灯光被单一的白色替换,我们脱离,终于面对了自己的内心。冇需告别,这便是我们亦无意义的告别之所。这里是另一个世界,这里除了长相奇特的实体,各种各样的物品以及被随机分割的区域以外什么都没有。这里的生存环境也比较苛刻,如果你来到了这,但愿你能活下来。
清除浮动
在CSS代码中你可以使用clear元素清楚元素周围的浮动。该属性默认值为none,可更改为left、right或both,分别对应清除左侧浮动、右侧浮动和两侧浮动。具体效果如下。
本章节讲解CSS代码中优先级的判定机制。
常规优先级
通常情况下,同级的两个选择器中放在代码后面的选择器属性比放在前面的选择器属性权重要大,简而言之就是写在后面的代码如果和前面的代码冲突了会直接覆盖前面的代码。例如,在如下实例中,存在着两个选择器为<p>元素的CSS代码段,且两者的color属性有冲突,在这一类情况下CSS代码会选取相对靠后的代码段作为实际显示内容的属性也就是说最终段落显示的文字会是绿的而不是红的。但是两段代码中background-color属性没有冲突,因此浏览器读取CSS代码时会直接保留该属性赋值,所以最终两段代码的实际效果就是:p {color:green;background-color:blue;} 。
p {color:red;background-color:blue;}
p {color:green}
此外,ID选择器的优先级比Class选择器要高,而Class选择器的优先级比元素选择器要高,具体效果可以看如下示例。
代码内容:
<style>
div{background-color: red;}
.imp{background-color: blue;}
#imp{background-color: green;}
</style>
<div>
这是一个无ID无Class的块。
</div>
<div class="imp">
这是一个无ID有Class的块。
</div>
<div class="imp" id="imp">
这是一个有ID又有Class的块。
</div>
输出效果:
这是一个无ID无Class的块。
这是一个无ID有Class的块。
这是一个有ID又有Class的块。
基于以上特性,你在页面中引用别的CSS代码段落时,你若相对代码内容进行更改无需将代码全部复制粘贴一遍,直接在页面中增加新的代码段落将源代码覆盖就行了。
!important
!important规则与优先级无关,但它与最终的结果直接相关,使用一个 !important 规则时,此声明将覆盖任何其他声明。也就是说无论前后只要有任意一个属性带有 !important ,该属性一定会覆盖同类同选择器的没有 !important 规则的属性。如下是一个实例。
代码内容:
<style>
div{background-color: red !important;}
.imp{background-color: blue;}
#imp{background-color: green;}
</style>
<div>
这是一个无ID无Class的块。
</div>
<div class="imp">
这是一个无ID有Class的块。
</div>
<div class="imp" id="imp">
这是一个有ID又有Class的块。
</div>
输出效果:
这是一个无ID无Class的块。
这是一个无ID有Class的块。
这是一个有ID又有Class的块。
需注意的是当两条相互冲突的带有 !important 规则的声明被应用到相同的元素上时,拥有更大优先级的声明将会被采用。(即遵循常规规则,但你应该不会遇见这种情况)
使用 !important 是一个坏习惯,应该尽量避免,这种行为破坏了CSS的固有的级联规则使调试代码更加困难了。因此,使用 !important 规则你需要注意以下几点:
- 一定要优先使用CSS默认的优先级来解决问题而不是 !important
- 只在需要覆盖全站的CSS特定页面中使用 !important
- 尽量不要在你的组件中使用 !important
- 永远不要在全站的 CSS 代码中使用 !important
本章节会介绍CSS3转换中的2D转换和3D转换效果。
2D转换
转换可以让某个元素改变形状,大小和位置。2D转换可以帮助你对元素进行移动、缩放、转动、拉长或拉伸。2D转换效果的属性名皆为transform,赋值是一个(不能多个,关于一个元素如何同时拥有多个转换效果见下文)CSS函数(前文中顺带提了一嘴)。需注意的是旧版IE 9浏览器要使用-ms-transform属性,旧版Chrome 和 Safari浏览器要使用-webkit-transform属性。
当该属性的赋值为translate(x,y)函数时,元素会进行在X轴和Y轴上平移,效果和position属性差不多,同样平移后元素占的空间位置不变。例如赋值为 translate(50px,100px) 时元素会向右移动50px,向下移动100px。
当该属性赋值为rotate(x)函数时,元素会旋转。括号内的数值应为一个角度,例如30deg(即30度)。且如果该赋值为正数元素会顺时针旋转指定读数,否则会逆时针旋转。需注意的是旋转可能会导致元素错位,所以请提前规划好元素的位置。
代码内容:
[[div class="lightblock" style="transform:rotate(45deg);width:150px;height:50px;"]]
这是一些文本。
[[/div]]
输出效果:
这是一些文本。
当该属性赋值为scale(x,y)函数时,元素的宽度会被放大至x被,高度会被放大至Y被。
代码内容:
[[div style="transform:scale(1.5,2);height:50px;width:150px;"]]
@@ @@这是一段文本
[[/div]]
输出效果:
这是一段文本
当该属性赋值为skewX(x)函数时,元素只在X轴(水平方向)倾斜;同理,当该属性赋值为skewY(y)函数时,元素只在Y轴(垂直方向)倾斜。你也可以使用skew(x,y)函数进行赋值,效果与上述内容一致。
无倾斜时。
水平倾斜30度。
垂直倾斜20度。
水平倾斜30度,垂直倾斜20度。
如果你想给一个元素赋予多个2D效果,你需要使用matrix(n,n,n,n,n,n)函数,该函数的六个值对应了旋转,缩放,移动和倾斜(但不是一一对应的因此设置起来很复杂,我建议你还是直接用div套娃来实现多个效果)。
3D转换
3D转换和2D转换语法基本一致,属性皆为transform,使用方法与上文基本一致,因此可用函数在此以一张表格简要概括。
函数 | 解析 |
---|---|
matrix3d(n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n) | 3D转换矩阵,相信我,你不会想用这玩意的 |
translate3d(x,y,z) | 三维平移,三个字对应三个维度 |
scale3d(x,y,z) | 三维缩放,三个字对应三个维度 |
rotateX(x) | 元素在X轴上的旋转 |
rotateY(y) | 元素在Y轴上的旋转 |
rotateZ(z) | 元素在Z轴上的旋转 |
translateX(x) | 元素在X轴上的平移 |
translateY(y) | 元素在Y轴上的平移 |
translateZ(z) | 元素在Z轴上的平移 |
scaleX(x) | 元素在X轴上的缩放 |
scaleY(y) | 元素在Y轴上的缩放 |
scaleZ(z) | 元素在Z轴上的缩放 |
本章节介绍CSS地过渡属性和动画效果。
过渡属性
前文中我们提过使用伪类(例如:hover)可以在特定条件下改变元素的外观,过渡属性可以让元素外观改变的过程更平滑。如下是一个过渡属性的展示。
尝试将光标移动至如下块级元素上。
这是一个没有过渡的块。
这是一个有过渡的块。
设置一个过渡效果,你至少需要设置这两个属性:transition-property属性,赋值为需要设置过渡的属性名称,例如如上实例中设置过渡的属性就是width;transition-duration属性,赋值为时间(单位为s或ms)默认值为0,其作用是改变过渡动画的耗时,默认情况下没有动画也就没有耗时。
如果你想要改变过渡动画的速度变化,你需要设置transition-timing-function属性,该属性设置的是过渡效果的时间曲线也就是动画速度的变化情况,默认值为ease(渐入渐出),可更改为 linear(线性,即匀速变化)、ease-in(渐入)、ease-out(渐出)、ease-in-out(渐入渐出,效果和ease差不多)。如果你追求更高级的效果可以将该属性设置为一个贝塞尔曲线函数,格式为cubic-bezier(x1,y1,x2,y2),你应该用不上这个函数,如果一定要用的话直接这个网站生成就行了。
此外,你可以改变transition-delay属性以改变过渡动画的开始时间,即设置延时,单位也是时间(你一般也用不上)。
过度的简化代码为 transition: property duration timing-function delay; 四个赋值分别对应选择属性、动画时长、速度曲线、延时,后两项可省略。如果要设置多个属性不同的过渡效果,则需要用逗号将不同赋值隔开,例如 transition: property1 duration1 , property2 duration2 ; 。
如下是一个实例。
代码内容:
.red-bl-exa3{
width:100px;
height:100px;
background:red;
transition:width 2s ease-in 1s;
}
.red-bl-exa3:hover{
width:300px;
}
输出效果:
尝试将光标移动至如下块级元素上。
这是一个有延时的过渡块。
动画属性
在前文版式进阶的实例中,我们提及过使用 @keyframes 代码可以制作CSS动画效果。制作一个动画我们首先需要在对应的元素中设置动画的名称(自行命名)和时长。你需要使用 animation 属性,通常该简写属性有两个赋值,前者是动画的名称后者是时长单位为时间。例如,代码 animation: action 5s; 的意义为该元素会执行名为action的动画持续时间为5s。
如果你追求更细致的动画效果,你可以对动画属性进行更详细的设置。你可以通过 animation-name 属性和 animation-duration 属性分别设置动画的名称和时间,animation-timing-function 属性设置动画的速度曲线(与前文的曲线一致),animation-delay 属性设置动画延时。
你也可以通过 animation-iteration-count 属性设置动画的播放次数,默认值为1,如下是该属性的效果。如果要循环执行动画可赋值为infinite。
代码内容:
.red-bl-exa4{
width:100px;
height:100px;
background:red;
position:relative;
animation:move 3s;
animation-iteration-count:3;
}
@keyframes move{
from {top:0px;}
to {top:200px;}
}
输出效果:
这个动画执行了三次。
通过设置 animation-direction 属性可以改变动画的播放方向,默认值为normal,即正常播放,可更改为 reverse (反向播放,本质上就是将动画代码的from和to对调)、alternate (奇数次动画时正向播放,偶数次动画时反向播放)或alternate-reverse (奇数次动画时反向播放,偶数次动画时正向播放)。注意动画一正一反算两次,具体呈现效果与 animation-iteration-count 属性相关。
你可以使用 animation-fill-mode 属性规定在动画结束后元素的行为,该属性的默认值为none即动画结束后会使用默认样式(既不使用from中的样式,也不使用to中的样式),该属性还可以设为 forwards (动画结束后元素将保持为结束时的样式)。
在部分情况下你可以在元素代码中 animation-play-state: paused; 这样元素的动画就会失效。
animation代码的完全形式有8个赋值(animation: name duration timing-function delay iteration-count direction fill-mode play-state;)与上文的属性分别对应,但通常我们只会使用其前两个或四个赋值。
@keyframes
CSS动画的本质是使元素从一种样式逐渐变化为另一种样式,这样式可以是任意元素的颜色、长度、高度、位置等诸多属性(这些属性被称为可动画属性)。首先,动画会统一置于 @keyframes 代码中,统一格式为 "@keyframes 动画名称{ 动画内容 }"。动画名称与动画属性中名称一项对应,而动画内容中你需要设置在一定时间点下的特定属性的样式(可以理解为关键帧),在动画执行时元素的特定属性会在这几个样式中平滑过渡。
设置样式需要你使用一个百分数规定动画的时间和动画对象的属性。如下是一个动画实例。运用这个动画实例(即名称为color-anim的实例)的元素的背景颜色会从红色逐渐变为黄色、蓝色和绿色。在前文中你会发现有的动画是用from和to关键词领导的,这两个关键词相当于0%和100%。
@keyframes color-anim{
0% {background: red;}
25% {background: yellow;}
50% {background: blue;}
100% {background: green;}
}
这是该动画的效果。
本章节介绍CSS的渐变效果及其代码。
渐变介绍
CSS渐变是指两个或多个指定的颜色之间显示平稳的过渡,在早期CSS版本中这一效果只能由图片实现,但是现在你可以通过函数实现此效果。CSS的渐变效果由浏览器生成,相比图片更加平滑,并且在放大时不会出现像素块的问题。
渐变效果一般使用于前文中提及的 background-image 属性,分为线性渐变(有方向的)和径向渐变(辐射性的)。如下是两者的直观实例。
你可以从这个网站中找到一些有用的实例。
线性渐变
线性渐变函数的格式为 linear-gradient() ,创建一个线性渐变,你必须定义至少两种颜色节点。线性渐变的默认方向是由上至下,例如在该代码 linear-gradient(#cb5cff, #5ce4ff) 的效果就是由上至下从紫色逐渐变为蓝色。如果你想要设置更多颜色节点在赋值后面添加并用逗号隔开即可。你当然也可以使用RGB或者RGBA颜色。
这是它的效果。
你也可以自行设置渐变的方向,这需要你在该函数的颜色赋值前增加一项"to+方向"的赋值,例如 linear-gradient(to right, red , yellow) 就是从左至右由红变黄。或者你可以使用两个位置指示词例如"to bottom right"就是从左上角到右下角。
如果你相对方向进一步控制,你可以将方向设置为一个角度值。这里角度是指水平线和渐变线之间的角度,按逆时针方向计算。例如0deg将创建一个从下到上的渐变,90deg将创建一个从左到右的渐变。该属性中负数角度是被允许的,例如-90deg的效果与90deg就是相反的。(0deg与180deg相对)
在CSS代码中你还可以通过 repeating-linear-gradient() 函数来重复线性渐变。该函数的方向设置与上文一致,但是该函数的赋值中每项颜色节点后都应有长度注明。例如, repeating-linear-gradient(to right,red,yellow 5%,orange 10%) ,这个函数的渐变效果为从左至右红到黄到橘的循环渐变,这个渐变的单次渐变宽度为元素宽度的10%(也就是最后一个颜色节点的长度赋值),其中0-5%的长度是由红到黄的渐变,5-10%的长度是有黄到橘的渐变。需注意这种渐变不是无缝衔接的,也就是说如上实例中橘和红之间没有渐变。
repeating-linear-gradient(to right,red,yellow 5%,orange 10%)
repeating-linear-gradient(to right,red,yellow 5%,orange 10%,red 15%
径向渐变
径向渐变比线性渐变更复杂但可编辑性更高。创建一个径向渐变,你必须定义至少两种颜色节点渐变的中心、形状、大小。径向渐变的函数是 radial-gradient() ,格式为 radial-gradient(形状 尺寸 at 位置, 颜色一, 颜色二, …); 。
形状的赋值默认为 ellipse 即椭圆形,可更改为 circle 即圆形。
尺寸的赋值可以是closest-side、farthest-side、closest-corner或farthest-corner(默认)。具体效果如下。
位置由两个长度值构成分别是中心点的横向距离(距离左边的长度)和竖向距离(距离顶边长度),默认值为center,即50% 50%。
颜色节点默认是均匀分布的,你也可以增加一个百分比来改变颜色节点的分布。例如 radial-gradient(red 5%,orange 20%,yellow 50%) 代码的效果就是在距离中心5%距离以内就是红色,5-20%是红到橘的渐变,20-50%是橘到黄色的渐变,在50%以外就是纯黄色。
这是该代码的效果。
重复径向渐变使用 repeating-radial-gradient() 函数,与线性渐变重复函数颜色规则一致,不在此赘述。
本章节介绍CSS中的多列布局和网格设计。
多列属性
在CSS代码中,你可以将文本内容设计成像报纸一样的多列布局,这会使你的文字在特定情况下更加美观。例如如下示例。
你需要先试用column-count属性设置列数,例如如上实例中列数为3。column-gap属性指定了列与列间的间隙,其赋值为一个长度。通过这两个属性你可以制作一个基础的多列栏目,例如如上实例的内联CSS代码如下。(ps:多列内容建议使用纯HTML代码,维基点代码显示可能存在空行影响排版)
style="background-color:white;border:2px solid black;column-count: 3;column-rule-style:dotted;column-gap:40px;padding: 10px;"
在如上实例中你会发现每个分列之间都存在着分割线(分裂的边框),我们可以通过column-rule-style属性指定分割线的样式,其赋值与前文块级元素边框样式赋值一致。同理,使用column-rule-width和column-rule-color属性可以指定分割线的宽度和颜色,column-rule则是以上属性的简写,赋值方式与前文中边框的简写属性一致。
你还可以使用column-width属性指定列的宽度,通常使用该属性将列宽设定为定值后就不会专门设置列的数量。
对于其他元素,你可以使用column-span属性设置元素横跨列的数量。通常,我们会将标题元素赋予column-span: all;属性,让其横跨所有分列,其效果如下。
网格
在CSS3中你可以使用代码创建一个网格布局并定义网格的宽高以及单元格的大小,使用网格布局可以帮助我们更轻松地制作网站排版。
创建一个网格容器你需要使用 display 属性,当一个 HTML 元素将 display 属性设置为 grid 或 inline-grid(该赋值会显示为行内元素,即表格与其他文本位于同一行) 后,它就变成了一个网格容器,这个元素的所有直系子元素将成为网格元素。(前文中我们提到过使用该属性还可以隐藏元素,实际上该属性的实际作用是改变一个元素地显示方式例如使其以行内元素或块级元素地方式显示)
接着,你需要通过 grid-template-columns 和 grid-template-rows 属性来定义网格中的列和行。列和行统称为网格的轨道。这两个属性的赋值都是一个或多个长度,当赋值为多个长度时网格会被划分为与赋值数量相等的轨道并且每个轨道的宽/高度与之对应赋值的长度相等。
轨道可以用任意长度单位来定义,但是我们通常会用fr单位对轨道的宽度进行定义。fr是一个相对,一个fr单位代表网格容器中可用空间的一等份。例如,当元素的属性为grid-template-columns: 1fr 2fr 1fr,那么该元素会被划分为3列,而宽度会被划分为四(1+2+1)份,第一、三列各占其中一份,第二列占两份。
一个网格单元是在一个网格元素中最小的单位,一旦一个网格元素被定义在一个父级元素当中,那么他的子级元素将会排列在每个事先定义好的网格单元中。如下是一个网格实例。
代码内容:
<style>
.grid-exa {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
grid-gap: 10px;
background-color: #2196F3;
padding: 10px;
}
.grid-exa > div {
background-color: rgba(255, 255, 255, 0.8);
text-align: center;
padding: 20px 0;
font-size: 30px;
}
</style>
<div class="grid-exa">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
</div>
输出效果:
前文中我们提到垂直(竖)方向上的网格单元组成列(Column),水平(横)方向上的单元格组成行(Row),在CSS代码中我们可以使用grid-column-gap属性来设置列之间的网格间距,和grid-row-gap属性来设置行之间的网格间距。grid-gap有两个赋值,先后对于行间距和列间距。
网格元素可以向行或着列的方向扩展一个或多个单元,但是网格元素必须是一个矩形。想要做到跨间距你需要了解间距的排号方式,简单来说垂直间隔线排号从左至右,水平间隔线排号从上至下,效果如下图。(默认书写模式的情况下)

在设定一个单元格的大小时,你可以指定单元格上下左右相接的线。你需要规定 grid-column-start, grid-column-end, grid-row-start 和 grid-row-end 属性来设置单元格的起始和终止行/列线。例如如下示例中一号单元格就是从一行开始到第三行,从一列开始到第三列。
代码内容:
<style>
.grid-exa {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
grid-gap: 10px;
background-color: #2196F3;
padding: 10px;
}
.grid-exa > div {
background-color: rgba(255, 255, 255, 0.8);
text-align: center;
padding: 20px 0;
font-size: 30px;
}
.item{
grid-column-start: 1;
grid-column-end: 3;
grid-row-start: 1;
grid-row-end: 3;
}
</style>
<div class="grid-exa">
<div class="item">1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>
输出效果:
网站布局
网页布局有很多种方式,但大多数的网站都由这几个部分组成:头部区域、菜单导航区域、内容区域、底部区域,在维基点网页布局中这几个部分分别对应版式的版头、顶栏/侧栏、正文、底部工具栏。如下是这几个板块的划分情况。
在维基点站点中如果不使用CSS代码内容,通常情况下你只能编辑中央的内容区域(正文部分),想要对网页进行进一步的自定义样式编辑你需要了解网站本身的代码结构。如果你点击页面下方的"页面源代码"选项只会显示正文部分的维基点代码,使用"Ctrl+U"你才可以查看网页的源代码(包括维基点本身的和写手输入的HTML、CSS以及JS代码,皆为纯代码形式不使用维基点代码,但是引用的代码不会自动展开)。
网站的头部区域位于整个网页的顶部,用于设置网页的标题和logo,维基点的版头是一个id为header的块级元素。
顶栏和侧栏包含了通向其他页面的链接,便于读者快速查阅其他页面,维基点顶栏和侧栏分别是一个class为top-bar的块级元素和一个class为side-block的块级元素。
内容区域是作者文章文字、媒体等内容存放的区域,是一个id为page-content的块级元素。在电脑端内容区域的布局由左中右三部分构成,左侧是给侧栏预留的空间所以通常不会陈列内容,右侧在部分页面中会用于安置目录。但是手机端内容区域排版仅由一个部分构成,因此作者在排版时应考虑右侧内容是否兼容手机端显示布局。
底部区域在网页的最下方,一般包含版权信息和联系方式等。维基点的底栏还包含页面编辑选项,是一个class和id皆为page-options-bottom的块级元素。
你可能会发现部分版式的排版方式与维基点的默认排版存在较大差异,但其实万变不离其宗,绝大多数版式都是由前文中所说的四大板块构成,通常只是改变其中个部分的空间比例。
CSS引用
在进行文章创作时我们通常会直接使用站点内已有的版式与组件样式,维基点代码中最常用的两类CSS代码引用内容是版式和组件。版式原指书刊的版面格式,在web开发中意为图文在页面中的编排形式。维基点的版式由一系列CSS代码共同组成,作用效果是改变页面的主题氛围并增加特定的模块、板块,提升读者阅读文章的沉浸感。组件则是特定的文章部分代码片段、模块,可以提升文章的表达效果和高级感。例如生存难度模块、环境音模块就是常用的组件。
前文中我已经介绍了版式工作原理、基础的版式颜色修改和常用的版式代码内容,在此不赘述版式内容。组件与版式的区别在于组件是一个局部的代码片段,不会改变页面的整体样式,接下来我将向你介绍组件的制作方法。
组件的原理实际上很简单,在这里我将以实体文章的勘探报告组件为例讲解组件制作的原理(这个组件的代码真的是简单到不能再简单了,如果这个组件的CSS代码你都无法理解我建议你回去把前面的内容仔细再看一遍)。
首先,你应了解与版式(代码储存在theme:分类下)相似,组件代码都应储存在(component:分类页面下)。虽然两者都是使用[[include]]代码,但是与版式不同,组件的引用代码需要赋值多个变量。例如在勘探报告组件中的变量就有backgroundcolor、textcolor、image、number等,在引用组件时你需要按照如下格式分别定义每一个变量。
[[module css]]
.entity-box {
background-color: 十六进制颜色;
color:rgb(15, 15, 15);
padding: 0.01rem 1rem;
margin: 0.5rem 0.25rem 0.5rem 0.25rem;
box-shadow: 0 2rem 3rem rgba(0,0,0,.55);
border: solid 0.3rem rgb(0,0,0);
}
[[/module]]
[[div class="entity-box"]]
[[f>image 图片URL style="width:200px;"]]
[[size 200%]][[span style="color: #000000;"]]**实体编号:**//实体编号//[[/span]][[/size]]
* [[size 130%]][[span style="color: 文字颜色;"]]**危险等级:实体危险等级**[[/span]][[/size]]
* [[size 130%]][[span style="color: 文字颜色;"]]**智慧程度:实体智慧程度**[[/span]][[/size]]
* [[size 130%]][[span style="color: 文字颜色;"]]**分布地点:实体分布地点**[[/span]][[/size]]
* [[size 130%]][[span style="color: 文字颜色;"]]**广居程度:实体广居程度**[[/span]][[/size]]
* [[size 130%]][[span style="color: 文字颜色;"]]**攻击意识:实体攻击意识**[[/span]][[/size]]
[[/div]]
[[iftags +组件]]
+ 使用教程
使用该组件请加以下代码
> @@[[include component:entity-box@@
> |backgroundcolor=十六进制颜色
> |textcolor=文字颜色
> |image=图片URL
> |number=实体编号
> |one=实体危险等级
> |two=实体智慧程度
> |three=实体分布地点
> |four=实体广居程度
> |five=实体攻击意识
> ]]
[[/iftags]]
制作组件时你可以通过{$变量名称}的格式来引用变量,例如textcolor变量的引用格式为{$textcolor},其功能类似于CSS的var()函数。你可以查看前文中组件的源代码来理解其原理。
在制作一个组件时你应该附上组件的使用说明,这一部分应放在[[iftag]]代码中,这样在组件被引用时说明内容就不会显示。
更多内容
在学习完本教程的内容后,你可以去尝试将CSS代码运用到之前写过的文章中。你如果想进一步学习CSS代码技术,你可以学习不局限于本站点的一些常用版式和组件的代码。
如果你对前端开发感兴趣,在学习完CSS后你应当去学习JavaScript,JS是最流行的语言之一,是属于web的语言。(默认你学习CSS前已经基本掌握了HTML技术,如果没有那我建议你去补习一下相关知识)本站点目前还没有JS的教程,推荐查阅该网站。