三十一、css代表着什么,css规则是什么意思?
CSS(全拼是 Cascading Style Sheets,翻译过来就是"层叠样式表"的意思)控制 DOM 元素的视觉外观,css控制的是元素的样式,不然怎么叫样式表呢。下面就是
一条简单的 CSS 样式:
body {
background-color: white;
color: black;
}
css如何书写?
CSS 样式由选择符和属性组成。选择符后面跟着属性,但被一对花括号所包围。属性和值由冒号分隔,每个属性声明以分号结尾。
选择符 {
属性: 值;
属性: 值;
属性: 值;
}
相同的属性可以应用给多个选择符,只要用逗号分隔选择符即可,比如:
选择符A,
选择符B,
选择符C {
属性: 值;
属性: 值;
属性: 值;
}
举个例子,假设你想让段落 p 和列表项 li 拥有相同的文字大小、行高和颜色,可
以这样写:
p,li {
font-size: 12px;
line-height: 14px;
color: orange;
}
所有这些放到一块(选择符和带花括号的属性)就叫做一条 CSS 规则。
CSS 中的选择符用于标识要应用样式的元素,选择符是与使用该选择符的html元素绑定的,你可以通过选择符来选择需要操作的html元素,就像jquery那样,或者像js中的document.getElementById(),为什么通过选择符选择后就选中了html元素,因为元素和其应用的选择符之间是绑定着的,而维护这种绑定关系的就是浏览器,有很多种,我们这里只介绍其中最简单的几种。
1. 类型选择符
这种选择符最简单,就是匹配同名 DOM 元素的标签名:
h1 /* 选择所有一级标题 */
p /* 选择所有段落 */
strong /* 选择所有strong 元素 */
em /* 选择所有em 元素 */
div /* 选择所有div元素 */
2. 后代选择符
后代选择符匹配包含在(或“出身于” )另一个元素中的元素。在应用样式的时候,后代选择符的使用率非常高:
h1 em /* 选择包含在h1 中的em元素 */
div p /* 选择包含在div中的p 元素 */
3. 类选择符
类选择符匹配具有指定类的所有元素。类名之前要加一个英文句点,看下面的例子:
.caption /* 选择带"caption" 类的元素 */
.label /* 选择带"label" 类的元素 */
.axis /* 选择带"axis" 类的元素 */
有些元素可能包含多个类,为此可以把多个类名串起来选择它们,比如:
.bar.highlight /* 选择高亮(hightlight)的条形(bar) */
.axis.x /* 选择x轴(axix) */
.axis.y /* 选择y轴(axix) */
.axis 可以为两个轴应用样式,而 .axis.x 则只能为 x 轴应用样式。
4. ID选择符
ID 选择符匹配具有给定 ID 的一个元素。 (别忘了,一个 ID 只能在 DOM 中出现一次。 )ID 前面要带一个井字号。
#header /* 选择ID 为"header"的元素 */
#nav /* 选择ID 为"nav"的元素 */
#export /* 选择ID 为"export"的元素 */
选择符可以通过各种组合来达到选择特定元素的目的。比如,可以把两个选择符串起来,选择一个更具体的元素:
div.sidebar /* 只选择带有"sidebar"类的div,而不选择带其他类的div */
#button.on /* 只选择带有"on"类,且ID 为"button"的元素 */
在css里面,多个属性和属性值累积起来,就会构成特定的样式:
margin: 10px;
padding: 25px;
background-color: yellow;
color: pink;
font-family: Helvetica, Arial, sans-serif;
虽然大家自己能看明白,但还是多说几句吧。每个属性都应匹配不同的信息,比如color 要有一种颜色值,而 margin 需要一个长度值(这里使用的单位是 px,即像素) ,font-family需要的是字体名字。
顺便说一下,颜色可以使用以下几种格式:
颜色名: orange,这些名字是预定义好的,而不是说你想弄个橘红色,就写成"color:juehongse",哈哈
十六进制值: #3388aa 或 #38a。
RGB 值: rgb(10, 150, 20)。
带透明通道的 RGB 值:rgba(10, 150, 20, 0.5)。
这里,我要表达的意思即是,css属性有很多,而每种属性的可用值又是不一样的,有的css属性的可用值是预定义好的,有的只能是那几个,有的则是你自己定义的。
继承
在没有为某个元素指定样式的情况下,这个元素的很多样式都是从它的祖先元素继承来的。比如,下面的文档给 div 指定了一些样式:
div的兄弟元素p
div的子元素p
这个页面在渲染后,本来是应用给 div 的样式(红色背景、粗体文本等)也被第二个段落元素继承了(如下图所示) ,因为 p 是这个 div 的后代。
继承是 CSS 中一个非常重要的特性,子元素因此会拥有父元素的特征。 (现实当中不是也一样嘛。 )
层叠
最后,我想回答大家在心里憋了很久的一个问题:为什么css被称为层叠样式表?因为选择符会从上到下按照层叠关系匹配。说具体一点,假设多个选择符都给一个元素应用了样式,那么后定义的规则就会覆盖先定义的规则。比如下面的规则会将文档中所有 p 元素中文本的颜色设定为蓝色,但带有 highlight 类的 p 元素中的文本则是黑色,而且带有黄色背景。第一条规则通过选择符 p 首先应用,而第二条规则通过选择符 p.highlight 覆盖了不够具体的 p 规则。
div的兄弟元素p
div的子元素p
后定义的规则一般会覆盖先定义的规则,但也不全是。关键是要看每个选择符的特指度(specificity),也叫做css的优先级 。
css优先级
选择符 p.highlight 即使被放在第一条规则的位置上,它也会覆盖选择符 p,因为它是一个更具体的选择符。假如两个选择符具有相同的特指度,那么这时候后定义的才会胜出。
特指度也是 CSS 中最不好理解的一个地方。
在css中可以通过calc实现样式的简单计算
通过calc函数可以实现,这样还可以使我们的元素自适应,当然计算的值应该是合法的值,如下面这个例子:
无标题文档
我的width是通过calc函数计算出来的
元素的宽度值是父元素宽度减去500像素,如果父元素是body,改变视窗的大小,它的宽度也会随之改变。
缩小窗口后:
默认情况下,HTML 文档里的多个空格和回车会显示为一个空格,或者被忽略。如果要让浏览器显示这些额外的空格,可以使用white-space 属性。
无标题文档
今天 乐之者java 这篇文章说说css里面的空白属性,属性名字叫做white-space。
今天 乐之者java 这篇文章说说css里面的空白属性,属性名字叫做white-space。
今天 乐之者java 这篇文章说说css里面的空白属性,属性名字叫做white-space。
浏览器显示效果为:
可以看到,多个空格、回车被忽略成了一个空格。
修改css样式:
p{
width:400px;
border:1px solid lime;
white-space: pre;
}
结果为:
修改css样式:
p{
width:400px;
border:1px solid lime;
white-space: nowrap;
}
结果为:
总结:
white-space的取值:
pre:以让浏览器显示原文本中所有的空格和回车;
nowrap:确保所有空格不断行,也就是文本全部显示在一行,即使浏览器窗口太窄不足以显示整行文本。这样,页面会添加一个水平滚动条,以便用户能通过滚动查看其余文本。扩展:如果此时添加overflow: hidden; text-overflow:ellipses;,超出元素盒的文本会显示为省略号。
normal,按正常方式处理空格。
html里的多媒体
引用其他视频网站的地址即可
没错,这又是一个相当牛逼的css3案例,再多的废话也抵不住实例来的有力,先看效果图:
当鼠标放上去的时候,可以显示上下左右四个方向的提示(也就是tooltip),怎么实现的呢?html结构很简单,如下:
纯 CSS3 打造的tooltip
css3相关的代码是这样的:
好了,以上就是这个案例的全部代码,完全是基于css(css3)制作的工具提示(tooltip),不需要任何一行的js代码。
css实现如下的样式:
很漂亮的tooltip效果,怎么实现的呢,其实如果你不知道这里面的门道,可能以为还要用h5的convas来画之类的,看到就望而却步了,其实完全没必要,这里面的关键就是我之前写的一篇文章利用css实现三角形,就是底部那个小尖角的实现方式,明白了这一点,其他要用到的无非就是position布局,border-radius之类的。我大致实现了个例子,大家可以参考,先奉上html代码:
纯 CSS3 打造的tooltip
乐之者java
css代码:
好了,就这么多,就可以用css实现上边的提示tooltip效果了,思路是关键。
还记得吗?在css中的calc动态计算实现自适应这篇文章中,我介绍了css实现网格布局、自适应布局使用到了calc()这个类似于css属性值的东西,它叫什么?既然是如此写“calc()”,稍微接触过编程语言的就应该知道,它是一个函数的写法,没错,calc()就是一个"css函数"。
css函数还有不少哩,除了那篇文章里面的calc(),这篇文章再来说个attr(),attr()也是一个css函数,干什么用的呢?看看这篇文章纯CSS3打造的tooltip里面有使用到了attr()这个css函数。
许多网站还是在使用JavaScript来创建Tooltip效果,但实际上通过CSS能更简单的实现。最简单的方法是在你的HTML代码中添加一个带有提示文本的属性,比如data-tip="xxx"。然后你就可以在你的CSS文件中添加如下代码通过attr()这个css函数来显示提示文字:
.tooltip::after {
content: attr(data-tip); //attr()用来获取data-tip属性的值
}
举个简单的例子,有下面这段html:
css函数之attr()
在我后边插入内容
css为:
显示效果如图:
在网页中,如果如果想复制网页中的内容(如果复制没被禁用的话),大部分时候是这样的:
颜色默认的是这种“蓝色”,如何修改这种颜色呢?
可以使用css里面的伪元素选择器::selection来实现,下面是一段要演示的html代码:
z-index
http://www.roadjava.com
我是一段文本,用于乐之者java演示在网页上自定义文本选择样式的功能,我是一段文本,用于乐之者java演示在
网页上自定义文本选择样式的功能,
我是一段文本,用于乐之者java演示在网页上自定义文本选择样式的功能,我是一段文本,用于乐之者java演示在网页上自定
义文本选择样式的功能,
如下定义css:
这样就行了,效果是这样的:
总结:
::selection 这个伪元素选择器,可以设置元素在选定时的样式。如果不组合其他选择器,则样式将在文档根级别应用于任何可选元素。
还记得很早很早以前,我说过一篇文章利用“animation与transform实现魔鬼的步伐”吗?这里面主要介绍了animation结合transform这两个属性以及@keyframes的使用等,我们今天依然使用这些属性来制作一个跳动的小球,属性是这些属性,而你能做的功能确实无尽的,尽情的发挥你的想象躁动起来吧。案例最终的效果是这样的:
html结构:
bouncing英文是“精神饱满的”,这里取其躁动之意。
再看css:
代码并不多,我们来解释一下:
①、1rem是单位,默认就是16px,
②、@keyframes定义了一个具有两种状态的动画,其中元素更改opacity并使用transform: translateY()在2D平面上进行垂直平移
③、.bouncing-loader是弹跳圆圈的父容器,使用display: flex和justify-content: center将它们放置在中心位置。
④、.bouncing-loader > div ,将父级的三个子div作为样式。 div的宽度和高度为1rem ,使用border-radius: 50%将它们从正方形变成圆形。
⑤、margin: 3rem 0.2rem 指定每个圆的上边距/下边距为3rem 和左/右边距0.2rem 以便它们不直接接触对方,给它们一些弹跳的空间。
⑥、animation是各种动画属性的缩写属性:使用animation-name , animation-duration , animation-iteration-count , animation-direction 。
⑦、nth-child(n)目标是其父元素的第n个子元素。
⑧、animation-delay分别用于第二个和第三个div ,以便每个元素不会同时启动动画,从而达到波浪起伏的效果。
box-sizing: border-box用于重置盒子模型的宽度width和高度height,以便width和height并没有受到border以及padding的影响 ,既然不受border以及padding的影响了,也就避免了布局"被错乱"的情况,依稀那是一个大坑。
比如下面的常用写法:
html {
box-sizing: border-box;
}
*,
*::before,
*::after {
box-sizing: inherit;
}
box-sizing: border-box 添加padding 或者border 不影响元素的width 或者height 。
box-sizing: inherit 使元素继承其父元素box-sizing 规则。
当然我们也可以针对单个的元素来写:
div#box{
box-sizing: border-box;
}
这些都没有所谓的。
如下代码:
css
我是一个div,我是一个div我是一个div我是一个div我是一个div
div#box本身只有100px宽高(下图浅蓝色区域),因为padding和border的存在,导致div#box所占有的区域变成了142px。
此时修改css:
div#box{
border:1px solid #222;
width:100px;
height:100px;
color:#f00;
padding:20px;
box-sizing: border-box;
}
效果如下:
使用css的border-radius创建圆形案例效果如图:
实现起来非常简单,思路是这样的:
border-radius: 50% 弯曲元素的边框以创建圆,又因为圆在任何给定点具有相同的半径,因此width 和height 一定是一样的,如果两者不同的值将创建椭圆。
html代码,我就操作这个div了,哈哈:
css:
div#box{
border-radius: 50%;
width: 2rem;
height: 2rem;
background: #333;
}
没错,就这么多。
在之前“浮动的清除”这篇文章中,我概括性的说了清除float浮动的6种方法,总结的优点笼统,今天这篇我们单独来说下使用伪元素::after清除浮动的使用。
下面是要操作的html:
float a
float b
float c
div.clearfix后边的文字
css代码:
好了,执行效果是什么样子的呢,如果浮动未清除的话,“div.clearfix后边的文字”这段文字将会被float a覆盖,展示效果:
可以看到此时浮动已经清除了,注意:伪元素::after默认是行内元素,需要使用display:block使其变为块级元素。
代码释疑:
.clearfix::after 定义伪元素。
content: '' 允许伪元素影响布局。
clear: both 指示元素的左侧、右侧或两侧不能与同一块格式上下文中较早浮动的元素相邻。
需求:使用css创建一个响应式的正方形,即随着浏览器窗口大小的改变而改变,但是始终是一个正方形。
html:
我是一个响应式的正方形
这个div用于构造正方形。
css:
执行结果:
再次理解:
伪元素::before和::after生成的新元素在使用这个伪元素的内部,而不是外部,分别位于内部的头部和内部的尾部,这个内部是必不可少的,即生成的伪元素还是属于div.zhengfangxing的:
padding-top 在...上::before 伪元素使元素的高度等于其宽度的百分比。100% 因此表示元素的高度始终为100% 的宽度,创建一个响应正方形。
前边介绍了几个css的函数,比如attr(),calc(),element()等,我们可能不习惯这个概念,css里面还有函数?其实你早就使用过css函数了,只是不自知罢了,比如,你别跟我说你没有使用过background:url(xxx),这里url()就是一个css函数咯。今天我们来看看另外一个css函数的使用方法,即counters().
如下,给出个测试的例子:
- List item
- List item
- List item
- List item
- List item
- List item
css:
解释说明:
①、counter-reset :用于初始化计数器,值为计数器的名称。默认情况下,计数器从0开始。此属性还可用于将其值更改为任何特定数字。
②、counter-increment 用于可计数的元素中。一次counter-reset 初始化后,计数器的值可以增加或减少。
③、counter(name, style) 显示区段计数器的值。一般用于content 财产。此函数可以接收两个参数,第一个参数作为计数器的名称,第二个参数可以是decimal 或者upper-roman (decimal 默认情况下)。
④、counters(counter, string, style) 显示区段计数器的值。一般用于content 财产。此函数可以接收三个参数,第一个参数作为计数器的名称,第二个参数可以包括在计数器后面的字符串,第三个参数可以是decimal 或者upper-roman (decimal 默认情况下)。
⑤、CSS计数器对于生成大纲列表特别有用,因为计数器的新实例是在子元素中自动创建的。使用counters() 函数,可以在不同级别的嵌套计数器之间插入分隔文本。
首先,我需要说明的是::webkit-scrollbar这个伪元素用来自定义滚动条,因为我们知道浏览器默认的滚动条很丑,而且各个浏览器之间滚动条的显示大相庭径,虽然我们可以使用::webkit-scrollbar来定义滚动条,但是有一点需要知道,就是目前来看,只有在WebKit平台上才支持这个伪元素,因此,并不建议使用css定制滚动条,最好使用js插件,比如我之前介绍过的“mCustomScrollbar定制统一的滚动条”。下面来看看使用::webkit-scrollbar这个伪元素优化滚动条的方法案例。
如下html:
乐之者java官方网址是http://www.roadjava.com/,在这里你能找到我们用心、精心雕琢的编程教程,给你收获
乐之者java官方网址是http://www.roadjava.com/,在这里你能找到我们用心、精心雕琢的编程教程,给你收获
乐之者java官方网址是http://www.roadjava.com/,在这里你能找到我们用心、精心雕琢的编程教程,给你收获
定义css代码:
解释:
::-webkit-scrollbar 定位整个滚动条元素,前边可以组合指定元素的滚动条样式,如:div::-webkit-scrollbar,如果不与指定元素组合使用,就针对所有元素都起作用,下同
::-webkit-scrollbar-track 仅针对滚动条轨道。
::-webkit-scrollbar-thumb 瞄准滚动条拇指。
执行结果:
如题,啥意思呢?:root是个css伪类我们可能知道,但是具体的应用案例可能就不知道了,现在我们就来看下它与css函数var()结合使用的一个例子.
如下html:
乐之者java官方网址是http://www.roadjava.com/,在这里你能找到我们用心、精心雕琢的编程教程,给你收获
乐之者java官方网址是http://www.roadjava.com/,在这里你能找到我们用心、精心雕琢的编程教程,给你收获
乐之者java官方网址是http://www.roadjava.com/,在这里你能找到我们用心、精心雕琢的编程教程,给你收获
css:
效果:
解释说明:
①、:root这个css伪类表示在整个文档里面都起作用,变量定义再:root 与表示文档的树的根元素匹配的CSS伪类。如果在块中定义变量,则变量的作用域也可以限定为选择器。
②、定义个css变量必须以“--”开头 。
③、通过css函数var(变量名)来使用已经定义过的变量。
user-select这个属性当设置其值为none的时候,其效果就是禁止网页中的文本选择。
测试一下,对如下的html:
我是一个段落,内容可以被选中
我是一个段落,内容不可以被选中
编写如下的css:
下面一个段落死活都没办法选择文字了,就这一个css属性在搞鬼,是不是很曹丹。