认识前端--CSS(二)
这是我参与「第四届青训营 」笔记创作活动的第3天
CSS整体语法结构
CSS的顶层样式表由两种规则组成的规则列表构成,一种是at-rule即at规则,另一种是qualified rule,也就是普通规则。
at规则
-
@charset
- @charset 用于提示 CSS 文件使用的字符编码方式,它必须是样式表中的第一个元素,而前面不得有任何字符。
-
@charset"UTF-8"
-
@import
- @import 用于引入一个 CSS 文件,除了 @charset 规则不会被引入,@import 可以引入另一个文件的全部内容。
-
@import "mystyle.css"; @import url("mystyle.css");
-
@media
- media 能够对设备的类型进行一些判断。在 media 的区块内,是普通规则列表。
-
@media print { body { font-size: 10pt; }
-
@page
- page 用于分页媒体访问网页时的表现设置,页面是一种特殊的盒模型结构,除了页面本身,还可以设置它周围的盒。
-
@page { size: 8.5in 11in; margin: 10%; @top-left { content: "Hamlet"; } @top-right { content: "Page " counter(page); } }
-
@counter-style
- counter-style 产生一种数据,用于定义列表项的表现。
-
@counter-style triangle { system: cyclic; symbols: ‣; suffix: " "; }
-
@keyframes
- keyframes产生一种数据,用于定义动画关键帧。
-
@keyframes diagonal-slide { from { left: 0; top: 0; } to { left: 100px; top: 100px; } }
-
@fontface
- fontface 用于定义一种字体,icon font 技术就是利用这个特性来实现的。
-
@font-face { font-family: Gentium; src: url(http://example.com/fonts/Gentium.woff); } p { font-family: Gentium, serif; }
-
@supports
- support 检查环境的特性,它与 media 比较类似。可以进行特性查询,。该规则可以放在代码的顶层,也可以嵌套在任何其他条件组规则中。
-
@supports (display: grid) { div { display: grid; } } @supports not (display: grid) { div { float: right; } }
-
@namespace
- 用于跟 XML 命名空间配合的一个规则,表示内部的 CSS 选择器全都带上特定命名空间。
-
/* 默认命名空间 */ @namespace url(XML-namespace-URL); @namespace "XML-namespace-URL"; /* 命名空间前缀 */ @namespace prefix url(XML-namespace-URL); @namespace prefix "XML-namespace-URL";
普通规则
普通规则主要是由选择器和声明区块构成。声明区块由属性和值构成。
CSS的选择器
基础选择器
-
标签选择器
与html元素进行匹配的
<p> 今天学习CSS选择器,标签选择器 </p><style> p { font-size:14px; background-color:#411; padding:2em; } </style> -
类选择器
匹配到html元素中有class属性的,每个元素可以有多个class属性,多个用空格分隔开
<p class="p_class_selector"> 今天学习CSS选择器,类选择器 </p><style> .p_class_selector{ font-size:14px; background-color:#003399; padding:2em; } </style> -
id 选择器
匹配到htm元素中有 id 属性的,id 选择器只能用在一个html元素,每个元素仅能有一个 id 属性
<h1 id="logo"> CSS 文档 <h1><style> #logo { font-size: 60px; font-weight: 200; color: #663366; } </style> -
通配选择器
即对各个元素通用的,可以结合组合器进一步扩展
<div id="footer"> <h1>HTML5 文档</h1> <p>今天学习CSS选择器,通配符选择器</p> </div> <div> <h1>HTML5 文档</h1> <p>今天学习CSS选择器,通配符选择器</p> </div><style> div#footer ~ * { font-size:1.2em; color: blue; } </style>
属性选择器
匹配html元素定义的属性
-
[attr]匹配存在属性的元素
<p>今天学习CSS选择器,属性选择器</p> <label> <input type="radio" id="check_radio"/><span>完成了吗?</span> </label><style> [id] + span{ font-size:18px; color:white; background-color:#003366; } </style> -
[attr=val]匹配属性值等于val的元素
<p>今天学习CSS选择器,属性选择器</p> <a href="http://demo1.com">网址1</a> <a href="http://demo2.com">网址2</a><style> a[href="http://demo2.com"] { display:inline-block; color: red; border: 1px solid gray; padding: 14px; text-decoration:none; } </style> -
[attr^=val]匹配属性值以val开头的元素
<p>今天学习CSS选择器,属性选择器</p> <a href="http://demo1.com">网址1</a> <a href="http://demo2.com">网址2</a><style> a[href^="http"] { display:inline-block; color: red; border: 1px solid gray; padding: 14px; text-decoration:none; } </style> -
[attr$=val]匹配属性值以val结尾的元素
<p>今天学习CSS选择器,属性选择器</p> <a href="http://demo1.com">网址1</a> <a href="http://demo2.com">网址2</a><style> a[href$="demo1.com"] { display:inline-block; color: red; border: 1px solid gray; padding: 14px; text-decoration:none; } </style> -
[attr*=val]匹配属性值存在val的元素
<p>今天学习CSS选择器,属性选择器</p> <a href="http://demo1.com">网址1</a> <a href="http://demo2.com">网址2</a><style> a[href*="demo"] { display:inline-block; color: red; border: 1px solid gray; padding: 14px; text-decoration:none; } </style> -
[attr|=val]匹配属性值存在以val开头, ”-“ 为连字符的元素,典型的应用场景是用来匹配语言简写代码(如 zh-CN,zh-TW 可以用 zh 作为 value)。
<p>今天学习CSS选择器,属性选择器</p> <p id="my-Address">I live in Duckburg</p> <p id="myabc">I have many friends:</p><style> [id|="my"] { color: white; background-color: #333300; } </style> -
[attr~=val]表示带有以 attr 命名的属性的元素,并且该属性是一个以空格作为分隔的值列表,其中至少有一个值为 val。
<p>今天学习CSS选择器,属性选择器</p> <p id="my-Address">I live in Duckburg</p> <p id="my abc">I have many friends:</p>p{ padding: 10px; } p[id~="my"] { color: white; background-color: #333300; }
伪类选择器
针对选择元素具备某种状态进行修饰,是一系列由 CSS 规定好的选择器,它们以冒号开头。
-
树结构关系伪类选择器
:root匹配文档树的根元素。对于 HTML 来说,:root表示<html>元素,除了优先级更高之外,与html选择器相同。<p>今天学习CSS选择器,属性选择器</p> <p id="my-Address">I live in Duckburg</p> <p id="myabc">I have many friends:</p><style> :root { --main-color:hotpink; } p#myabc { color: var(--main-color); } </style>:emptyCSS伪类代表没有子元素的元素。子元素只可以是元素节点或文本 (包括空格) 。注释或处理指令都不会产生影响。<div class="container"> <div class="box"></div> <div class="box">I will be pink</div> <div class="box"> <!-- I will be pink because of the whitespace around this comment --> </div> </div><style> .container { display: flex; justify-content: space-between; } .box { background: pink; height: 80px; width: 80px; } .box:empty { background: hsl(48, 100%, 55%); } </style>:nth-child和:nth-last-child两个函数型的伪类,CSS的An + B 语法基本用法(MDN有个很不错的示例可以体验一下):<h3><code>span:nth-child(2n+1)</code>, WITHOUT an <code><em></code> among the child elements.</h3> <p>Children 1, 3, 5, and 7 are selected.</p> <div class="first"> <span>Span 1!</span> <span>Span 2</span> <span>Span 3!</span> <span>Span 4</span> <span>Span 5!</span> <span>Span 6</span> <span>Span 7!</span> </div> <br> <h3><code>span:nth-child(2n+1)</code>, WITH an <code><em></code> among the child elements.</h3> <p>Children 1, 5, and 7 are selected.<br> 3 is used in the counting because it is a child, but it isn't selected because it isn't a <code><span></code>.</p> <div class="second"> <span>Span!</span> <span>Span</span> <em>This is an `em`.</em> <span>Span</span> <span>Span!</span> <span>Span</span> <span>Span!</span> <span>Span</span> </div> <br> <h3><code>span:nth-of-type(2n+1)</code>, WITH an <code><em></code> among the child elements.</h3> <p>Children 1, 4, 6, and 8 are selected.<br> 3 isn't used in the counting or selected because it is an <code><em></code>, not a <code><span></code>, and <code>nth-of-type</code> only selects children of that type. The <code><em></code> is completely skipped over and ignored.</p> <div class="third"> <span>Span!</span> <span>Span</span> <em>This is an `em`.</em> <span>Span!</span> <span>Span</span> <span>Span!</span> <span>Span</span> <span>Span!</span> </div>html { font-family: sans-serif; } span, div em { padding: 5px; border: 1px solid green; display: inline-block; margin-bottom: 3px; } .first span:nth-child(2n+1), .second span:nth-child(2n+1), .third span:nth-of-type(2n+1) { background-color: lime; }:nth-last-child从兄弟节点中从后往前匹配处于某些位置的元素。:first-child、:last-child分别表示第一个和最后一个元素。:only-child匹配没有任何兄弟元素的元素<div class="first"> <p>今天学习CSS选择器,伪类选择器1</p> <p>今天学习CSS选择器,伪类选择器2</p> <p>今天学习CSS选择器,伪类选择器3</p> <p>今天学习CSS选择器,伪类选择器4</p> <span>今天学习CSS选择器,伪类选择器4.1</span> <p>今天学习CSS选择器,伪类选择器5</p> </div> <div class="third"> <span>今天学习CSS选择器,伪类选择器8</span> </div>p,span{ padding: 10px; } /* span不能匹配到,没有作用 */ .first p:nth-last-child(2) { color: white; background-color: #6699CC; } /* 匹配 3 */ .first p:nth-last-of-type(3) { color: white; background-color: hsl(48, 100%, 55%); } /* 匹配 1 */ .first p:first-child { color: white; background-color: #CCCC66; } /* 匹配 5 */ .first p:last-child { color: white; background-color: #663366; } span:only-child { color: white; background-color: #99CCFF; } -
链接与行为伪类选择器
:link表示未访问过的链接,:visited表示已经访问过的链接。:hover表示鼠标悬停在上的元素。:active表示用户正在激活这个元素,如用户按下按钮,鼠标还未抬起时,这个按钮就处于激活状态。:focus表示焦点落在这个元素之上。:target用于选中浏览器 URL 的 hash 部分所指示的元素。:any-link表示任意的链接,包括 a、area 和 link 标签都可能匹配到这个伪类。
-
逻辑伪类选择器
如
:not 伪类用来匹配不符合一组选择器的元素。由于它的作用是防止特定的元素被选中,它也被称为反选伪类(negation pseudo-class)。
伪元素选择器
::before选择器在被选元素的内容前面插入内容::after选择器在被选元素的内容后面插入内容::first-letter用于选取指定选择器的首字母::first-line选取指定选择器的首行
复合选择器
多个基础选择器连接(不使用空格或者其他组合器)组成一个复合(compound)选择器(例如:h1.page-header)。 复合选择器选中的元素将匹配其全部基础选择器。 例如,.dropdown.is-active 能够选中<div class="dropdown is-active">,但是无法选中<div class="dropdown">
组合器
- 空格( )——匹配属于指定元素后代的所有元素。例如
div p - 子组合器(>)——匹配的目标元素是其他元素的直接后代。例如:
.parent > .child。 - 相邻兄弟组合器(+)——匹配的目标元素紧跟在其他元素后面。例如:
p + h2。 - 通用兄弟组合器(~)——匹配所有跟随在指定元素之后的兄弟元素。注意,它不会选中目标元素之前的兄弟元素。例如:
li.active ~ li。
声明区块
声明部分是一个由“属性: 值”组成的序列。
属性是由中划线、下划线、字母等组成的标识符,CSS 还支持使用反斜杠转义。我们需要注意的是:属性不允许使用连续的两个中划线开头,这样的属性会被认为是 CSS 变量(如下)。
:root {
--main-color: #06c;
--accent-color: #006;
}
/* The rest of the CSS file */
#foo h1 {
color: var(--main-color);
}
值的部分,主要在标准 CSS Values and Unit,根据每个 CSS 属性可以取到不同的值,这里的值可能是字符串、标识符。
CSS 属性值可能是以下类型。
- CSS 范围的关键字:initial,unset,inherit,任何属性都可以的关键字。
- 字符串:比如 content 属性。
- URL:使用 url() 函数的 URL 值。
- 整数 / 实数:比如 flex 属性。
- 维度:单位的整数 / 实数,比如 width 属性。
- 百分比:大部分维度都支持。
- 颜色:比如 background-color 属性。
- 图片:比如 background-image 属性。
- 2D 位置:比如 background-position 属性。
- 函数:来自函数的值,比如 transform 属性。
参考文章
www.w3schools.com/cssref/trys…