⭐️CSS常见选择器

本文详细介绍了CSS中的各种选择器,包括ID选择器、通用选择器、标签选择器等,并讲解了它们的使用方法及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CSS常见选择器

一、CSS简介

1.css概念

CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素。

当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染)。


2.css语法

CSS常见选择器

css注释

/*这是注释的写法,随便写,不影响css代码*/

二、CSS选择器介绍

要使用css对HTML页面中的元素实现一对一,一对多或者多对一的控制,这就需要用到CSS选择器。

HTML页面中的元素就是通过CSS选择器进行控制的。


1.CSS选择器简介

每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/code] 在{}之前的部分就是“选择器”。 “选择器”指明了{}中的“样式”的作用对象,也就是“样式”作用于网页中的哪些元素。


2.CSS选择器注意事项

由于对CSS的解释是自上而下的,对于一个元素的相同属性描述,放在下面的会覆盖掉位于上面的属性描述,
因此我们在对元素的选择中一定要注意书写顺序,如:

a:visited {color: #00FF00; text-decoration: none}
a:hover {color: #FF00FF; text-decoration: underline}

采用这样的书写顺序,无论链接有没有被访问过,只要当鼠标移到链接上,链接都会变成蓝色并有下划线。
但是,如果采用下面的书写顺序:

a:hover {color: #FF00FF; text-decoration: underline}
a:visited {color: #00FF00; text-decoration: none}

如果链接被访问过,则当你鼠标移到链接上时不会变成蓝色并有下划线,依然保持绿色。


CSS常见选择器

三、CSS常见选择器

1.id选择器

#id名 { CSS样式 }

#box {
		width:300px;
		height: 50px;
		backgroumd-color: #fff;
}
<div id="box"></div>

id是唯一的,不能重复
尽量不要用标签名做id名


2.通用选择器

给网页元素做一些通用的样式,margin:0和padding:0用来清除自带网页的内外间距。

*{ 
	margin:0;
	padding:0;
 };

3.标签选择器

元素名{ CSS样式 }

div {
		color: #fff;
};

4.类选择器

类选择器也叫class选择器
.class名 { CSS样式 };

.box {
		width:300px;
		height: 50px;
		backgroumd-color: #fff;
}
<div class="box"></div>

一个元素可以有多个class值
尽量不要用标签名做class名


5.属性选择器

1.[attr]

选中有attr属性的元素

[title]:{ color:#fff; }
<div title="name">111<div>

2.[attr=val]

选中attr属性值巧合等于val的元素

[title="name"]:{ color:#fff; }
<div title="name">111<div>

3.[attr*=val]

选中attr属性值包含单词val的元素

/* title属性值包含单词one的元素 */
[title*="one"] { color: #ff0000; }
<div title="one">内容1</div>
<p title="aaaone">内容2</p>
<span title="one-two">内容3</span>

4.[attr^=val]

选中attr属性值以val开头的元素

/* title属性值以单词one开头的元素 */
[title^="one"] { color: #ff0000; }
<div title="one">内容1</div>
<span title="one-two">内容2</span>
<p title="one two">内容3/p>

5.[attr~=val]

选中attr属性值包含单词val的元素(单词之间必须用空格隔开)

/* title属性值包含单词one的元素(单词one与其他单词之间必须用空格隔开) */
/* 效果类似于类选择器 */
[title~="one"] { color: #ff0000; }
<div title="one">内容1</div>
<p title="one two">内容2</p>

6.[attr$=val]

选中attr属性值以单词val结尾的元素

/* title属性值以单词one结尾的元素 */
[title$="one"] { color: #ff0000; }
<div title="two-one">内容1</div>
<p title="two one">内容2</p>

6.后代选择器

选择指定元素下的子元素,包括直接和间接子元素,使用空格进行隔开。

/* 选择div下所有span元素 */
div span { color: #ff0000; }
<div>
  <span>文字内容</span>
  <p>
    <span>文字内容</span>
  </p>
</div>

7.子代选择器

选中指定元素下的直接子元素 使用
选中元素后面的兄弟元素——不要前面的兄弟,也不要子代

/* 选择div元素下的直接span元素 */
div > span { color: #ff0000; }
<div>
  <span>文字内容1</span>
</div>

8.兄弟选择器

+ 指的是相邻的兄弟选择器

选中元素后面紧挨着的相邻兄弟元素——不要前面的,也不要有间隔的,也就是最多选中1个

p+span { } 选中p元素后面紧挨着的那一个span兄弟元素

~ 指的是元素后面的兄弟元素,不需要紧挨着

选中元素后面的兄弟元素——不要前面的兄弟,也不要子代

p~span { }  选中p元素后面的span兄弟元素

9.交集选择器

如果选择器中有元素的选择器,元素选择器必须放在前面

选择器1 选择器2...{}

2.并集选择器

选中可以同时被多个选择器选中的元素

注意: 多个选择器之间不能有空格,必须紧挨着写!

/* 选中span元素且class值为danger*/
span.danger{color:red;}
/* 选中class值同时具有btn与succ的元素*/
.btn.succ {color: green;}

10.结构性伪类选择器

代码 作用
:nth-child(1) :first-child 选中第1个子元素
:nth-child(必须明确子元素的总个数) 或 :last-child【推荐】 选中最后1个子元素
:nth-child(Xn) 倍数子元素
:nth-child(2n) 或 :nth-child(even) 偶数子元素
:nth-child(2n+1) 或 :nth-child(2n-1) 或 :nth-child(odd) 奇数子元素
:nth-last-child(n) 倒数第n个子元素

 /* 选中ol下到第二个孩子 */
        ol li:nth-child(2) {
            color: red;
        }

        /* 选择ul下第1个孩子 */
        ul li:nth-child(1) {
            color: green;
        }
        ul li:first-child {
            border: 1px solid green;
        }

        /* 选中ul下最后1个孩子 */
        ul li:nth-child(5) {
            color: blue;
        }
        ul li:last-child {
            border: 1px solid #00f;
        }

        /* 选中4到倍数 */
        ol li:nth-child(4n) {
            color: purple;
        }

        /* 选中所有的偶数,把背景色改成淡黄色lightyellow */
        /* ol li:nth-child(2n) {
            background-color: lightyellow;
        } */
        ol li:only-child(even) {
            background-color: lightyellow;
        }

        /* 选中所有的奇数,把背景色改成淡黄色lightblue */
        /* ol li:nth-child(2n+1) {
            background-color: lightblue;
        } */
        /* ol li:nth-child(2n-1) {
            background-color: lightblue;
        } */
        ol li:nth-child(odd) {
            background-color: lightblue;
        }

        ol li:nth-last-child(2) {
            color: aqua;
        }




11.元素伪类选择器

a标签常用伪类
标签 作用
:hover{ } 鼠标悬停在元素上方时”的状态
:active{ } 选中”元素被激活时”的状态(鼠标按住元素不松开)
:link{ } 选中”超链接未被访问过”的状态
:visited{ } 选中”超链接已经被访问过”的状态

/* :hover选中元素悬停时的状态 鼠标停在上面不动 */
			.box:hover {
				background-color: red;
			}
			/* :active选中元素激活时的状态 鼠标点击 */
			.box:active {
				background-color: blue;
			}
			/* :link选中超链接未被访问过的状态 */
			a:link {
				color: gray;
			}
			/* :visited选中超链接已被访问过的状态 */
			a:visited {
				color:green;
			}
			a:hover { /* 超链接的悬停状态 */
				color: orange;
			}
			a:active { /* 超链接的激活状态 */
				color: pink;
			}
			/* 如果想要超链接的4个伪类都生效,必须按照上面的顺序写! */
			

注意: 超链接的4个伪类有顺序: :link -> :visited -> :hover -> :active
如果没有按照这个顺序,有的伪类会不生效

input常用的伪类
:focus{ } 选中”输入框获得焦点时”的状态

/* 选中输入框获得焦点(光标)时的状态 */
			input:focus {
				background-color: yellow;
			}

12.否定伪类选择器

:not() 将符号条件的元素去除


13.伪元素选择器(常用两种)

::before 元素开始的位置前
::after 元素结束的位置后
befor和after必须配合contend一起使用 常常用于浮动导致父元素高度坍塌

/*利用伪元素在父元素最后生成一个假孩子清除影响*/
.clearfix::after{ /* 在指定元素的最后生成一个假孩子 */
			content: ''; /* 内容是空白的,宽高为0 */
			display: block; /* 块级元素才可以使用clear属性 */
			clear: both; /* 清除前面所有元素浮动造成的不支撑影响 */
		}

四、选择器优先级

CSS常见选择器

1.不同选择器不同样式

当多个不同的选择器选中同一个元素,发生冲突时,如果设置了不同的样式会叠加效果同时生效

p {color:red;}
.txt {background-color: yellow;}
<div>
	<p class="txt">测试文字</p>
</div>

2.相同选择器相同样式

相同的选择器,会采用顺序读取的原则,后来的会覆盖之前的
但前提:要渲染的样式相同,值不同

.txt {background-color: yellow;}
.txt {background-color: green;}
<div>
	<p class="txt">测试文字</p>  // green
</div>

CSS常见选择器

3.最近的祖先样式要比其他祖先样式优先级高

在CSS中,有一些属性是具有继承特性的,也就是父元素的CSS属性会传递到子元素上
使用的就是就近原则,哪个近,就应用哪个样式

<div style="color: green;">
	<div style="color: blue;">
		<div>测试文字</div>   // blue
	</div>
</div>

4.指定样式大于继承样式

<div style="color: pink;">
	<span style="color:gold">测试文字4</span>  // gold
</div>

5.选择器不同权值(重点)

原则:权值大的优先渲染
!important>行内样式>ID>(类选择器=伪类选择器)>标签名选择器>通用选择器>继承

权值会累加,但不会越级!
比如11个类选择器,值不是10*11=110,而是99.9不会越级到下一级

记忆诀窍:选择器控制范围越大的,优先级越低




👨‍💻博主Python老吕说:如果您觉得本文有帮助,辛苦您🙏帮忙点赞、收藏、评论,您的举手之劳将对我提供了无限的写作动力!🤞

print('Hello,World!')  # 每日一码,用Python跟世界说Hello,World!

🔥精品付费专栏:《Python全栈工程师》《跟老吕学MySQL》《Python游戏开发实战讲解》


🌞精品免费专栏:《Python全栈工程师·附录资料》《Pillow库·附录资料》《Pygame·附录资料》《Tkinter·附录资料》《Django·附录资料》《NumPy·附录资料》《Pandas·附录资料》《Matplotlib·附录资料》《Python爬虫·附录资料》


🌐前端免费专栏:《HTML》《CSS》《JavaScript》《Vue》


💻后端免费专栏:《C语言》《C++语言》《Java语言》《R语言》《Ruby语言》《PHP语言》《Go语言》《C#语言》《Swift语言》《跟老吕学Python编程·附录资料》


💾数据库免费专栏:《Oracle》《MYSQL》《SQL》《PostgreSQL》《MongoDB》


<think>好的,我现在需要帮用户介绍Python中用于将Markdown转换为HTML的库。首先,我得回忆一下常见的相关库,然后整理它们的特点和使用方法。 用户可能希望了解几个不同的库,这样他们可以根据需求选择最合适的。常见的库有markdown、mistune、Python-Markdown等。我需要分别介绍每个库的基本用法、特点和可能的优缺点。 首先,markdown库,这是Python中比较流行的一个,功能全面,支持扩展。需要说明如何安装,给出一个简单的示例代码,比如使用markdown.markdown()函数转换文本。同时提到它的扩展支持,比如表格、代码高亮等,这些可能需要额外配置。 然后是mistune,这个库以速度快著称,适合需要高性能转换的场景。要提到它的安装命令,以及示例代码,可能和markdown库类似,但强调速度优势。不过,mistune可能默认不支持某些扩展功能,需要手动添加或者使用插件。 还有Python-Markdown,可能和之前的库有重复?或者是不是同一个项目?需要确认一下。可能Python-Markdown就是markdown库的全称,所以这里可能需要修正,避免混淆。比如,markdown库的PyPI页面就是Python-Markdown,所以两者可能指的是同一个库。这时候需要避免重复介绍。 另外,可能还有其他库,比如CommonMark-py,这是一个遵循CommonMark规范的解析器。如果用户需要严格的规范支持,这个库可能更适合。同样需要安装方法和示例代码。 还要考虑用户的实际应用场景,比如是否需要扩展功能,如语法高亮、表格、数学公式支持(比如通过MathJax)。这时候可以提到markdown库的扩展,比如使用‘extra’扩展集,或者通过第三方扩展如pymdown-extensions。 另外,可能需要提到如何将转换后的HTML嵌入到完整的网页中,比如添加<html>标签CSS样式。这可能对用户有帮助,特别是如果他们需要生成独立的HTML文件的话。 在安全性方面,如果用户处理的是不可信的Markdown内容,可能需要提醒使用安全的渲染选项,避免XSS攻击。比如,某些库允许过滤HTML标签,这部分需要提及。 还需要检查是否有过时的库,确保推荐的库都是目前维护良好的。比如,mistune的版本是否更新,是否有活跃的社区支持。 最后,总结各个库的适用场景,帮助用户根据自己的需求选择。比如,如果需要扩展和社区支持,选markdown;追求速度选mistune;严格遵循标准选CommonMark等。 在写作过程中,要确保结构清晰,分点介绍每个库,并提供安装命令、示例代码和特点。同时,避免使用复杂术语,保持语言简洁易懂。注意按照用户的要求,行内公式用$...$,独立公式用$$...$$,但在这个问题中可能涉及数学内容较少,不过如果有提到数学公式转换的话需要注意格式。 现在需要组织这些信息,确保每个部分明确,步骤清楚,用户能一步步了解如何选择和使用这些库。</think>在Python中实现Markdown转HTML的常用库及使用方法如下: --- ### 一、`markdown` 库(Python-Markdown) **特点**:功能全面、支持扩展、社区活跃 **安装**: ```bash pip install markdown ``` **基础用法**: ```python import markdown md_text = "## 标题\n这是一段**加粗**文本。" html = markdown.markdown(md_text) print(html) ``` **扩展支持**: - 通过`extensions`参数启用扩展(如表格、代码块等): ```python html = markdown.markdown(md_text, extensions=["extra", "tables"]) ``` - 支持第三方扩展(如数学公式`pymdownx.arithmatex`): ```python html = markdown.markdown(md_text, extensions=["pymdownx.arithmatex"]) ``` --- ### 二、`mistune` 库 **特点**:渲染速度快、轻量级 **安装**: ```bash pip install mistune ``` **基础用法**: ```python import mistune md_text = "## 标题\n列表项:\n- 项目1\n- 项目2" html = mistune.html(md_text) print(html) ``` **自定义渲染器**: ```python from mistune import HTMLRenderer, Markdown class CustomRenderer(HTMLRenderer): def heading(self, text, level): return f"<h{level} class='my-heading'>{text}</h{level}>\n" markdown = Markdown(renderer=CustomRenderer()) html = markdown(md_text) ``` --- ### 三、`CommonMark-py` **特点**:严格遵循CommonMark规范 **安装**: ```bash pip install commonmark ``` **基础用法**: ```python from commonmark import Parser, HtmlRenderer parser = Parser() renderer = HtmlRenderer() md_text = "> 引用文本" ast = parser.parse(md_text) html = renderer.render(ast) print(html) ``` --- ### 四、进阶场景处理 1. **生成完整HTML文档** 手动拼接`<html>`标签CSS: ```python full_html = f"<!DOCTYPE html><html><head><style>{css}</style></head><body>{html}</body></html>" ``` 2. **数学公式支持** 使用`markdown`库 + MathJax扩展: ```python html = markdown.markdown(md_text, extensions=["pymdownx.arithmatex"]) ``` 输出结果需在HTML中引入MathJax脚本: ```html <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script> <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> ``` 3. **安全性处理** 过滤危险标签(如使用`bleach`库): ```python from bleach import clean safe_html = clean(html, tags=["p", "h1", "h2"]) ``` --- ### 五、库对比与选择建议 | 库名 | 适用场景 | 性能 | 扩展性 | |----------------|----------------------------------|--------|-------------| | `markdown` | 复杂文档、需扩展功能(表格/公式) | 中等 | ⭐️⭐️⭐️⭐️⭐️ | | `mistune` | 高性能渲染、轻量级需求 | 高 | ⭐️⭐️ | | `CommonMark-py`| 严格遵循标准规范 | 中等 | ⭐️⭐️⭐️ | **选择建议**: - 优先推荐`markdown`库(功能最全) - 对性能敏感时选`mistune` - 需标准化解析时选`CommonMark-py` --- 通过以上步骤,可根据需求灵活选择工具并实现Markdown到HTML的转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python老吕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值