博客列表 >css基础、选择器、模块化组件

css基础、选择器、模块化组件

大宇
大宇原创
2021年03月23日 14:13:29629浏览

作业内容:1. 实例演示选择器的优先级,id,class,tag; 2. 实例演示前端组件样式模块化的原理与实现; 3. 实例演示常用伪类选择器的使用方式,并用伪类来模块化元素组件(例如表单或列表
三种css的写法:

<style></style> 内部样式表 只作用于当前html

<p style=""> 行内样式表 只作用于当前标签
还有一种可以写到外部css文件中。

一 选择器的优先级:id class tag

结论一:相同优先级下,由书写顺序决定优先级,后写的优先级高。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <style>
  8. li {
  9. background-color: yellow;
  10. }
  11. li {
  12. background-color: aqua;
  13. }
  14. </style>
  15. <title>Document</title>
  16. </head>
  17. <body>
  18. <ul>
  19. <li class="header" id="main">item1</li>
  20. <li>item2</li>
  21. <li id="main">item3</li>
  22. <li>item4</li>
  23. <li>item5</li>
  24. </ul>
  25. </body>
  26. </html>

效果:

结论二:优先级:id>class>tag

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <style>
  8. #main {
  9. background-color: green;
  10. }
  11. .header {
  12. background-color: rgb(8, 247, 8);
  13. }
  14. li {
  15. background-color: yellow;
  16. }
  17. li {
  18. background-color: aqua;
  19. }
  20. </style>
  21. <title>Document</title>
  22. </head>
  23. <body>
  24. <ul>
  25. <li class="header" id="main">item1</li>
  26. <li class="header">item2</li>
  27. <li id="main">item3</li>
  28. <li>item4</li>
  29. <li>item5</li>
  30. </ul>
  31. </body>
  32. </html>

效果:

结论三 优先级可以进行相加 可以吧id class tag按照0,0,0进行计算

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <style>
  8. #main {
  9. background-color: green;
  10. }
  11. .header {
  12. background-color: rgb(8, 247, 8);
  13. }
  14. .header#main {
  15. background-color: blue;
  16. }
  17. li#main.header {
  18. background-color: red;
  19. }
  20. body li .header {
  21. background-color: yellow;
  22. }
  23. li {
  24. background-color: aqua;
  25. }
  26. </style>
  27. <title>Document</title>
  28. </head>
  29. <body>
  30. <ul>
  31. <li class="header" id="main">item1</li>
  32. <li class="header">item2</li>
  33. <li id="main">item3</li>
  34. <li>item4</li>
  35. <li>item5</li>
  36. </ul>
  37. </body>
  38. </html>

比如上面的例子
body li .header就可以看成是优先级为0,1,2
li#main.header就可以看成是优先级为1,1,1
效果图:

但是注意:这个优先级怎么加也不会越级,比如tag标签再多也不会比1个class的优先级大。

其它选择器

id class attribute选择器

id class选择器本质上也属于属性选择器
属性选择器用数组进行选择,如下,就会把所有的class=”on”选中了。

  1. li[class="on"]{
  2. background-color: yellow;
  3. }

也可以进行简写

  1. li.on{
  2. background-color: yellow;
  3. }

id选择器同理。

上下文选择器
后代选择器

就是选择ul后面所有的li 这个是具有可继承性

  1. ul li {
  2. background-color: lightgreen;
  3. }
子元素选择器

> 是表示采用子元素 只选择子元素 不要其它更低级的颜色

  1. body > ul > li {
  2. background-color: lightblue;
  3. }
同级相邻选择器

需要有一个起点
假设html:

  1. <ul>
  2. <li>item1</li>
  3. <li class="start">item2</li>
  4. <li>item3</li>
  5. <li>

css

  1. .start + li {
  2. background-color: yellow;
  3. }

这样就吧item3的颜色变成yellow了
把后面所有的元素都选中,将+换成~就行了

~选择器

~就是选择同级所有兄弟元素都选中

  1. .start ~ li{
  2. background-color: yellow;
  3. }

伪类选择器

虚拟的class选择器

结构伪类选择器

主要是用来选择子元素的,要有一个父元素作为查询起点,如果没有的话,需要从根元素递归查询。
html:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>伪类选择器</title>
  8. <style>
  9. </style>
  10. </head>
  11. <body>
  12. <ul class="list">
  13. <li>item1</li>
  14. <li>item2</li>
  15. <li>item3</li>
  16. <li>item4</li>
  17. <li>item5</li>
  18. <li>item6</li>
  19. <li>item7</li>
  20. <li>item8</li>
  21. <li>item9</li>
  22. <li>item10</li>
  23. </ul>
  24. </body>
  25. </html>

选择第三个item,在style处

  1. .list :nth-child(3) {
  2. background-color: violet;
  3. }

完整的表达式是

  1. .list :nth-child(0n + 3) {
  2. background-color: violet;
  3. }

效果图

如果是2n+3
从第三个开始数,每两个实现效果。

  1. .list :nth-child(2n + 3) {
  2. background-color: violet;
  3. }

冒号”:”就是代表伪类选择器
其实在:之前还有个元素,如果不写默认为*

  1. .list *:nth-child(2n + 3) {
  2. background-color: violet;
  3. }

也可以写一个li

  1. .list li:nth-child(2n + 3) {
  2. background-color: violet;
  3. }

效果是一样的

分组伪类结构选择器
  1. .list > li:nth-of-type(3) {
  2. background-color: cyan;
  3. }


将html中内容进行变更:

  1. <ul class="list">
  2. <li>item1</li>
  3. <li>item2</li>
  4. <li>item3</li>
  5. <li>item4</li>
  6. <li>item5</li>
  7. <li>item6</li>
  8. <p>item7</p>
  9. <p>item8</p>
  10. <li>item9</li>
  11. <p>item10</p>
  12. </ul>

选中第一个p和最后一个p

  1. .list > p:first-of-type {
  2. background-color: green;
  3. }
  4. .list p:last-of-type {
  5. background-color: blue;
  6. }

当然也可以用.list > p:nth-of-type(1)来选中第一个p

选择倒数第三个

  1. .list > li:nth-last-of-type(3) {
  2. background-color: yellow;
  3. }

选择单独一个元素
在html中新添加一个列表

  1. <ul>
  2. <li>item</li>
  3. </ul>

css

  1. ul li:only-of-type {
  2. background-color: yellow;
  3. }


总结:
选择任何一个:nth-of-type(n)
选择第一个:first-of-type()
选择最后一个:last-of-type()
选择倒数第二个:nth-last-of-type(2)
选择唯一子元素:nth-only-of-type()

模块化组件

我们可以把css样式写到外部css文件,然后在进行引入,代码会清爽很多。

引入css的两种方式:
  1. @import url(css/header.css);
  2. <link rel="stylesheet" href="css/header.css">

css模块化:
可以新建一个css文件夹,将每个css样式写入到各自的css文件中。
header.css:

  1. header {
  2. min-height: 3em;
  3. background-color: #ddd;
  4. }

main.css

  1. main {
  2. min-height: 20em;
  3. background-color: lightblue;
  4. }

footer.css

  1. footer {
  2. min-height: 3em;
  3. background-color: #999;
  4. }

demo2.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>Document</title>
  8. <style>
  9. @import url(css/header.css);
  10. @import url(css/main.css);
  11. @import url(css/footer.css);
  12. </style>
  13. </head>
  14. <body>
  15. <header>页眉</header>
  16. <main>主题</main>
  17. <footer>页脚</footer>
  18. </body>
  19. </html>

效果图

使用伪类进行模块化
只要获取到页面中某个元素组件的入口 在根据子元素的位置使用伪类就可以选择任何一个元素

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>组件化编程思想</title>
  8. <style>
  9. @import url(css/menu.css);
  10. /* 只要获取表单的入口,使用伪类可以获取表单中的任何控件 */
  11. .login :last-of-type {
  12. background-color: seagreen;
  13. color: white;
  14. }
  15. </style>
  16. </head>
  17. <body>
  18. <nav class="menu">
  19. <a href="">首页</a>
  20. <a href="">课程</a>
  21. <a href="">视频</a>
  22. <a href="">注册</a>
  23. </nav>
  24. <hr />
  25. <form action="" style="display: grid; gap: 1rem" class="login">
  26. <input type="text" placeholder="username" />账号
  27. <input type="password" placeholder="paaword" />密码
  28. <input type="email" placeholder="xxx@qq.com" />邮箱
  29. <button>提交</button>
  30. </form>
  31. </body>
  32. </html>

menu.css

  1. .menu :first-of-type {
  2. background-color: green;
  3. }
  4. .menu :last-of-type {
  5. background-color: blue;
  6. }
  7. .menu:nth-last-of-type(2) {
  8. background-color: lightgreen;
  9. }

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议