一、nth-child(n)
选择某个父元素的一个或多个特定的子元素
- n 可以是数字,关键字和公式
- n 如果是数字,就是选择第 n 个子元素, 里面数字从1开始…
- n 可以是关键字:even 偶数,odd 奇数
- n 可以是公式:常见的公式如下 ( 如果n是公式,则从0开始计算,但是第 0 个元素或者超出了元素的个数会被忽略 )
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
ul {
margin: 50px auto;
width: 1000px;
}
li {
float: left;
width: 40px;
height: 40px;
line-height: 40px;
text-align: center;
margin: 20px;
list-style: none;
border: 1px solid black;
color: white;
font-weight: 700;
}
/*------------------------------------*/
/* 1.需求:选择所有的偶数li */
/* li:nth-child(even)效果相同 */
ul li:nth-child(2n) {
background-color: pink;
}
/* 2.需求:选择所有的奇数li */
/*li:nth-child(odd)效果相同 */
ul li:nth-child(2n-1) {
background-color: skyblue;
}
/* 3.需求:选择5的倍数的li */
ul li:nth-child(5n) {
color: red;
}
/* 4.需求:选择前五个li */
/* 只能n写在前面 */
/* n从0开始,运算结果为0结束,不包含0:-0+5/-1+5/-2+5/-3+5/-4+5/-5+5-0停止执行,不执行 */
ul li:nth-child(-n+5) {
background-color: bisque;
}
/* 5.需求:选择倒数五个li */
ul li:nth-last-child(-n+5) {
background-color: blueviolet;
}
/* 6.需求:选择第49-60的li */
ul li:nth-child(-n+60):nth-last-child(-n+48) {
background-color: darkgoldenrod;
}
/* 7.需求:选择第一个li */
ul li:first-child {
background-color: palegreen;
}
/* 8.需求,选择最后一个li */
ul li:last-child {
background-color: midnightblue;
}
/* 9.需求:选择第54个li */
ul li:nth-child(54) {
border-radius: 50%;
}
</style>
</head>
<body>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
<li>11</li>
<li>12</li>
<li>13</li>
<li>14</li>
<li>15</li>
<li>16</li>
<li>17</li>
<li>18</li>
<li>19</li>
<li>20</li>
<li>21</li>
<li>22</li>
<li>23</li>
<li>24</li>
<li>25</li>
<li>26</li>
<li>27</li>
<li>28</li>
<li>29</li>
<li>30</li>
<li>31</li>
<li>32</li>
<li>33</li>
<li>34</li>
<li>35</li>
<li>36</li>
<li>37</li>
<li>38</li>
<li>39</li>
<li>40</li>
<li>41</li>
<li>42</li>
<li>43</li>
<li>44</li>
<li>45</li>
<li>46</li>
<li>47</li>
<li>48</li>
<li>49</li>
<li>50</li>
<li>51</li>
<li>52</li>
<li>53</li>
<li>54</li>
<li>55</li>
<li>56</li>
<li>57</li>
<li>58</li>
<li>59</li>
<li>60</li>
<li>61</li>
<li>62</li>
<li>63</li>
<li>64</li>
<li>65</li>
<li>66</li>
<li>67</li>
<li>68</li>
<li>69</li>
<li>70</li>
<li>71</li>
<li>72</li>
<li>73</li>
<li>74</li>
<li>75</li>
<li>76</li>
<li>77</li>
<li>78</li>
<li>79</li>
<li>80</li>
<li>81</li>
<li>82</li>
<li>83</li>
<li>84</li>
<li>85</li>
<li>86</li>
<li>87</li>
<li>88</li>
<li>89</li>
<li>90</li>
<li>91</li>
<li>92</li>
<li>93</li>
<li>94</li>
<li>95</li>
<li>96</li>
</ul>
</body>
</html>
效果图:
二、与nth-of-type的区别
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>结构伪类选择器</title>
<style>
/* 先找到div里的第一个孩子,再看是不是p标签,不是就不执行 */
div p:first-child {
color: red;
}
/* 先找到div里面的p标签,再找p标签里的第一个 */
div p:first-of-type {
background-color: #f34;
}
</style>
</head>
<body>
<div>
<h1>1</h1>
<p>1</p>
<p>2</p>
<p>3</p>
</div>
</body>
</html>
区别:
- nth-child 对父元素里面所有孩子排序选择。即先找到第n个孩子,然后看看是否和指定子元素匹配,是就执行,不是就不执行。
- nth-of-type 对父元素里面指定子元素进行排序选择。 即先去匹配指定子元素,然后在里面找第n个孩子 。