博客列表 >CSS伪类选择器、box-sizing属性、常用单位、媒体查询

CSS伪类选择器、box-sizing属性、常用单位、媒体查询

wrx-锐鑫
wrx-锐鑫原创
2021年10月02日 01:00:16620浏览

1.伪类选择器

1.1 :nth-of-type()

:nth-of-type()起到分组匹配作用,在匹配之前将元素根据类型进行分组后再匹配

1.1.1 案例一:选择ul元素的后代元素中的第三个li

  1. <style>
  2. .list li:nth-of-type(3) {
  3. border: 1px solid gold;
  4. }
  5. </style>
  6. <ul class="list">
  7. <li>item1</li>
  8. <li>item2</li>
  9. <li>
  10. item3
  11. <ul>
  12. <li>item3-1</li>
  13. <li>item3-2</li>
  14. <li>item3-3</li>
  15. </ul>
  16. </li>
  17. <li>item4</li>
  18. <li>item5</li>
  19. </ul>

运行结果:

子元素和孙子元素的第三个li都起作用。

1.1.2 案例二:选择ul元素的子元素中的第三个li

  1. <style>
  2. .list > li:nth-of-type(3) {
  3. border: 1px solid gold;
  4. }
  5. </style>
  6. <ul class="list">
  7. <li>item1</li>
  8. <li>item2</li>
  9. <li>
  10. item3
  11. <ul>
  12. <li>item3-1</li>
  13. <li>item3-2</li>
  14. <li>item3-3</li>
  15. </ul>
  16. </li>
  17. <li>item4</li>
  18. <li>item5</li>
  19. </ul>

运行结果:

只有子元素的第三个li起作用,而孙子元素的第三个li不起作用。

1.1.3 案例三:选择ul元素的所有子元素中的第三个元素

  1. <style>
  2. .list > *:nth-of-type(3) {
  3. border: 1px solid gold;
  4. }
  5. </style>
  6. <ul class="list">
  7. <li>item1</li>
  8. <li>item2</li>
  9. <li>
  10. item3
  11. <ul>
  12. <li>item3-1</li>
  13. <li>item3-2</li>
  14. <li>item3-3</li>
  15. </ul>
  16. </li>
  17. <li>item4</li>
  18. <li>item5</li>
  19. <p>pItem1</p>
  20. <p>pItem2</p>
  21. <p>pItem3</p>
  22. </ul>

运行结果:

ul的所有子元素中,第三个li和第三个p都起作用。

.list > *:nth-of-type(3)中的*可以去掉,即.list > :nth-of-type(3)

同理,.list *:nth-of-type(3)中的*也可以去掉,表示选择ul元素的所有后代元素中的第三个元素。

1.1.4 案例四:选择ul元素的除去li标签的第三个元素

  1. <style>
  2. .list > :nth-of-type(3):not(li:nth-of-type(3)) {
  3. border: 1px solid gold;
  4. }
  5. </style>
  6. <ul class="list">
  7. <li>item1</li>
  8. <li>item2</li>
  9. <li>item3</li>
  10. <li>item4</li>
  11. <li>item5</li>
  12. <p>pItem1</p>
  13. <p>pItem2</p>
  14. <p>pItem3</p>
  15. </ul>

运行结果:

只有第三个p起作用,而第三个li不起作用。

1.1.5 其他常用用法

  1. /* 第1个 */
  2. .list > :first-of-type {
  3. background-color: red;
  4. }
  5. /* 最后1个 */
  6. .list > :last-of-type {
  7. background-color: yellow;
  8. }
  9. /* 倒数第2个 */
  10. .list > li:nth-last-of-type(2) {
  11. background-color: cyan;
  12. }

1.2 :nth-of-type(an+b)

:nth-of-type(an+b)可以设置参数,其中,a代表系数,n代表计数器,从0开始自增,b代表偏移量。
例如,:nth-of-type(3)等价于:nth-of-type(0n+3)

1.2.1 案例一:匹配第三个之后的所有元素

  1. <style>
  2. .list > :nth-of-type(n + 3) {
  3. background-color: goldenrod;
  4. }
  5. </style>
  6. <ul class="list">
  7. <li>item1</li>
  8. <li>item2</li>
  9. <li>item3</li>
  10. <li>item4</li>
  11. <li>item5</li>
  12. <li>item6</li>
  13. <li>item7</li>
  14. <li>item8</li>
  15. </ul>

运行结果:

1.2.2 案例二:匹配前三个元素 :nth-of-type(-n + 3)

  1. <style>
  2. .list > :nth-of-type(-n + 3) {
  3. background-color: goldenrod;
  4. }
  5. </style>
  6. <ul class="list">
  7. <li>item1</li>
  8. <li>item2</li>
  9. <li>item3</li>
  10. <li>item4</li>
  11. <li>item5</li>
  12. <li>item6</li>
  13. <li>item7</li>
  14. <li>item8</li>
  15. </ul>

运行结果:

1.2.3 案例三:匹配后三个元素 :nth-last-of-type(-n + 3)

  1. <style>
  2. .list > :nth-last-of-type(-n + 3) {
  3. background-color: goldenrod;
  4. }
  5. </style>
  6. <ul class="list">
  7. <li>item1</li>
  8. <li>item2</li>
  9. <li>item3</li>
  10. <li>item4</li>
  11. <li>item5</li>
  12. <li>item6</li>
  13. <li>item7</li>
  14. <li>item8</li>
  15. </ul>

运行结果:

1.2.4 其他常用用法

  1. /* 匹配所有的偶数元素 */
  2. .list > :nth-of-type(2n) {
  3. background-color: yellow;
  4. }
  5. /* even: 偶数 */
  6. .list > :nth-of-type(even) {
  7. background-color: yellow;
  8. }
  9. /* 奇数 */
  10. .list > :nth-of-type(2n + 1) {
  11. background-color: cyan;
  12. }
  13. .list > :nth-of-type(odd) {
  14. background-color: cyan;
  15. }

2.box-sizing属性

box-sizing用于设置某个元素width、height的计算方式,有两种方式:

  • content-box:默认的计算方式,在宽度和高度之外绘制元素的内边距和边框。
  • border-box:通过从已设定的宽度和高度分别减去边框和内边距才能得到内容的宽度和高度。

2.1 content-box(默认)

  1. <style>
  2. .box {
  3. width: 200px;
  4. height: 200px;
  5. background-color: #408080;
  6. border: 5px solid gold;
  7. margin: 20px;
  8. padding: 10px;
  9. box-sizing: content-box;
  10. }
  11. </style>
  12. <div class="box"></div>

运行结果:

div.box 占据的实际宽高为200px+10px2+5px5=230px

2.2 border-box

  1. <style>
  2. .box {
  3. width: 200px;
  4. height: 200px;
  5. background-color: #408080;
  6. border: 5px solid gold;
  7. margin: 20px;
  8. padding: 10px;
  9. box-sizing: border-box;
  10. }
  11. </style>
  12. <div class="box"></div>

运行结果:

div.box 占据的实际宽高仍为200px,而实际宽高变为200px-10px2-5px5=170px

3.常用单位

css单位分为绝对单位和相对单位,

3.1 绝对单位

px,即像素,一英寸有96px,与设备相关。

严格意义上,px也不算绝对单位,因为对于低 dpi 的设备,1px 是显示器的一个设备像素(点)。对于打印机和高分辨率屏幕,1px 表示多个设备像素。

3.2 相对单位

(1)em、rem
em:和当前或父级的font-size大小绑定的,2em 表示当前字体大小的 2 倍
rem:和根元素html的字体大小绑定,常用于布局。

如果设置根元素的字号小于浏览器的最小字号,则会默认使用浏览器的最小字号。

(2)vw、vh
vw:1vw相当于视口宽度的1%
vh:1vh相当于视口高度的1%

4 媒体查询

使用 @media 查询,可以针对不同的媒体类型定义不同的样式。一般页面的宽度是根据设备尺寸确定的,而页面高度则是没有限制的,因此,常用的是min-width和max-width。。

min-width可以理解为“大于等于”,max-width可以理解为“小于等于”

媒体查询有移动优先和PC优先两种方式,移动优先是由小屏到大屏,通过min-width进行设置,PC优先是由大屏到小屏通过max-width进行设置。

使用PC优先的方式,记得为规定最大尺寸的样式设置min-width,以免超过最大尺寸时,被自动设置为默认样式。

案例演示

  1. <style>
  2. html {
  3. font-size: 10px;
  4. }
  5. .btn {
  6. background-color: #0080c0;
  7. color: white;
  8. border: none;
  9. outline: none;
  10. }
  11. .btn:hover {
  12. cursor: pointer;
  13. opacity: 0.8;
  14. transition: 0.3s;
  15. }
  16. /* 小按钮 */
  17. .btn.small {
  18. font-size: 1.2rem;
  19. padding: 0.4rem 0.8rem;
  20. }
  21. /* 中按钮 */
  22. .btn.middle {
  23. font-size: 1.6rem;
  24. padding: 0.4rem 0.8rem;
  25. }
  26. /* 大按钮 */
  27. .btn.large {
  28. font-size: 1.8rem;
  29. padding: 0.4rem 0.8rem;
  30. }
  31. /* 移动优先 */
  32. @media (min-width: 360px) {
  33. html {
  34. font-size: 12px;
  35. }
  36. }
  37. @media (min-width: 480px) {
  38. html {
  39. font-size: 14px;
  40. }
  41. }
  42. @media (min-width: 640px) {
  43. html {
  44. font-size: 16px;
  45. }
  46. }
  47. </style>
  48. <button class="btn small">小按钮</button>
  49. <button class="btn middle">中按钮</button>
  50. <button class="btn large">大按钮</button>

运行结果:

  • 页面宽度为352px < 360px,样式为默认样式
  • 页面宽度为385px在360-480px之间,样式为 @media (min-width: 360px)
  • 页面宽度为490px在480-640px之间,样式为 @media (min-width: 480px)
  • 页面宽度为664px > 640px,样式为 @media (min-width: 640px)
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议