学习前端第四周【css3选择器】

  1. 兄弟选择器 + ~
    • +选择器
      如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器。

      //css
          h1 + p {
              margin-top:50px;
              color:red;
          }
      
       //html
      <p>This is paragraph.</p>
      <h1>This is a heading.</h1>
      <p>This is paragraph.</p>
      <p>This is paragraph.</p>
      

      在这里插入图片描述
      兄弟只会印象下面的p标签的样式,不影响上面兄弟的样式。
        注意这里的’+’的意义跟’and’意义不一样,兄弟选择器的样式是应用在兄弟元素上,跟参照的元素样式无关,如上例只影响p元素的样式,而不影响h1标签的样式。
        当然这个也会循环查找,即当两个兄弟元素相同时,会一次循环查找:

        //css
       li + li {
       color:red;
        }
       		
       //html
         <ul>
           <li>List item 1</li>
           <li>List item 2</li>
           <li>List item 3</li>
         </ul>
       ```
      

      在这里插入图片描述
      可以看出第一个li字体颜色没有变红,第二个和第三个元素字体变红,这就是因为第三个li是第二个li的兄弟元素,所以也会应用样式。

    • ~选择器
      作用是查找某一个指定元素的后面的所有兄弟结点。

          //css
          h1 ~ p{
              color:red;
          }
          //html
          <p>1</p>
          <h1>2</h1>
          <p>3</p>
          <p>4</p>
          <p>5</p>
      

      在这里插入图片描述

  2. 结构性伪类选择器—not
    :not选择器称为否定选择器,和jQuery中的:not选择器一模一样,可以选择除某个元素之外的所有元素。
    就拿form元素来说,比如说你想给表单中除submit按钮之外的input元素添加红色边框:
//css
form {
  width: 200px;
  margin: 20px auto;
}
div {
  margin-bottom: 20px;
}
input:not([type="submit"]){
  border:1px solid red;
}

//html
<form action="#">
  <div>
    <label for="name">Text Input:</label>
    <input type="text" name="name" id="name" placeholder="John Smith" />
  </div>
  <div>
    <label for="name">Password Input:</label>
    <input type="text" name="name" id="name" placeholder="John Smith" />
  </div>
  <div>
    <input type="submit" value="Submit" />
  </div>
</form>  ​

在这里插入图片描述

  1. 结构性伪类选择器—target
    :target选择器称为目标选择器,用来匹配文档(页面)的url的某个标志符的目标元素。
    直接上例子:
//html
<h2><a href="#brand">Brand</a></h2>
<div class="menuSection" id="brand">
  content for Brand
</div>
<h2><a href="#jake">Brand</a></h2>
<div class="menuSection" id="jake">
 content for jake
</div>
<h2><a href="#aron">Brand</a></h2>
<div class="menuSection" id="aron">
    content for aron
</div>

//css
#brand:target {
  background: orange;
  color: #fff;
}
#jake:target {
  background: blue;
  color: #fff;
}
#aron:target {
  background: red;
  color: #fff;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
↑点击链接后的效果

  1. :first-child选择器(:last-child同理)
    误解一:认为E:first-child选中E元素的第一个子元素。
    误解二:认为E:first-child选中E元素的父元素的第一个E元素。
<!--误解一-->
<style>
div:first-child{color: red;}
</style>

<div class="demo">
<a>一个链接</a>
<a>一个链接</a>
<a>一个链接</a>
<a>一个链接</a>
</div>

在这里插入图片描述

<!--误解二-->
<style>
div a:first-child{color: red;}
</style>

<div class="demo">
<p>一个段落</p>
<a>一个链接</a>
<a>一个链接</a>
<a>一个链接</a>
<a>一个链接</a>
</div>

在这里插入图片描述

正确的理解应该是:只要E元素是它的父级的第一个子元素,就选中。
它需要同时满足两个条件,一个是“第一个子元素”,另一个是“这个子元素刚好是E”。

<style>
span:first-child{color: red;}
p:first-child{color: blue;} /*p元素的父元素的第一个子元素是div而不是p元素,因此该样式不起作用*/
i:first-child{color: orange;}
</style>

<div class="demo">
    <div>.demo的第一个子元素是div</div>
    <!--第一个span元素是它的父级P元素的第一个span,颜色变红色-->
    <p><span>第一个span</span>第一个段落P<span>第二个span</span></p>
    <!--第一个i元素是它的父级p元素的第一个i,颜色变橙色-->
    <p>一个链接<i>第一个i元素</i></p>
    <!--第二个i元素是它的父级p元素的第一个i,颜色变橙色-->
    <p>一个链接<i>第二个i元素</i></p>
    <p>一个链接</p>
</div>

在这里插入图片描述

:last-child、:nth-child()、:nth-last-child、:only-child同理

  1. nth-child(n)

:nth-child(n)选择器用来定位某个父元素的一个或多个特定的子元素。其中“n”是其参数,而且可以是整数值(1,2,3,4),也可以是表达式(2n+1、-n+5)和关键词(odd、even),但参数n的起始值始终是1,而不是0。也就是说,参数n的值为0时,选择器将选择不到任何匹配的元素。

//css
ol > li:nth-child(2n){
  background: green;
}

//html
<body>
<ol>
  <li>item1</li>
  <li>item2</li>
  <li>item3</li>
  <li>item4</li>
  <li>item5</li>
  <li>item6</li>
  <li>item7</li>
  <li>item8</li>
  <li>item9</li>
  <li>item10</li>
</ol>
</body>

在这里插入图片描述
注意:
当“:nth-child(n)”选择器中的n为一个表达式时,其中n是从0开始计算,当表达式的值为0或小于0的时候,不选择任何匹配的元素。
计数不指定元素类型,但不满足特定元素的子元素不会匹配。

//css
ol > li:nth-child(2n){
  background: green;
}

//html
<body>
<ol>
  <div>111</div>
  <li>item1</li>
  <li>item2</li>
  <li>item3</li>
  <li>item4</li>
  <li>item5</li>
  <li>item6</li>
  <li>item7</li>
  <li>item8</li>
  <li>item9</li>
  <li>item10</li>
</ol>
</body>

在这里插入图片描述

//css
ol > li:nth-child(2n+1){
  background: green;
}

//html
<body>
<ol>
  <div>111</div>
  <li>item1</li>
  <li>item2</li>
  <li>item3</li>
  <li>item4</li>
  <li>item5</li>
  <li>item6</li>
  <li>item7</li>
  <li>item8</li>
  <li>item9</li>
  <li>item10</li>
</ol>
</body>

在这里插入图片描述

nth-last-child(n):从某父元素的最后一个子元素(不一定是特定元素)开始计算,来选择特定的元素。

//css
ol > li:nth-last-child(5){
  background: orange;
}

//html
<body>
<ol>
  <li>item1</li>
  <li>item2</li>
  <li>item3</li>
  <li>item4</li>
  <li>item5</li>
  <li>item6</li>
  <li>item7</li>
  <li>item8</li>
  <li>item9</li>
  <li>item10</li>
  <div>111</div>
  <div>111</div>
</ol>
</body>

在这里插入图片描述

  1. first-of-type选择器
    用来定位一个父元素下的某个类型的第一个子元素。
    指定了元素的类型。
    :last-of-type则为最后一个子元素
//css
.wrapper {
  border: 1px solid #ccc;
  padding: 10px;
  width: 500px;
  margin: 20px auto;
}

.wrapper > p,
.wrapper > div {
  margin: 10px 0;
  background: green;
  color: #fff;
  padding: 5px;
}

.wrapper > div:first-of-type {
  background: orange;
}

//html
<body>
<div class="wrapper">
  <p>我是第一个段落</p>
  <p>我是第二个段落</p>
  <div>我是第一个Div元素</div>
  <div>我是第二个Div元素</div>
  <p>我是第三个段落</p>
  <p>我是第四个段落</p>
  <div>我是第三个Div元素</div>
  <div>我是第四个Div元素</div>
</div>
</body>

在这里插入图片描述

  1. nth-of-type(n)选择器
    类型+计数
    nth-last-of-type(n)则从最后一个子元素开始
    //css
    .wrapper > p:nth-of-type(2n){
      background: orange;
    }
    
    
    //html
    <div class="wrapper">
     <div>我是一个Div元素</div>
      <p>我是一个段落元素</p>
      <div>我是一个Div元素</div>
      <p>我是一个段落</p>
      <div>我是一个Div元素</div>
      <p>我是一个段落</p>
      <div>我是一个Div元素</div>
      <p>我是一个段落</p>
      <div>我是一个Div元素</div>
      <p>我是一个段落</p>
      <div>我是一个Div元素</div>
      <p>我是一个段落</p>
      <div>我是一个Div元素</div>
      <p>我是一个段落</p>
      <div>我是一个Div元素</div>
      <p>我是一个段落</p>
    </div>
    

在这里插入图片描述

  1. only-child选择器
    匹配的元素的父元素中仅有一个子元素,而且是一个唯一的子元素。

    //css
    .post p {
      background: green;
      color: #fff;
      padding: 10px;
    }
    .post p:only-child {
      background: orange;
    }
    
    //html
    <div class="post">
      <p>我是一个段落</p>
      <p>我是一个段落</p>
    </div>
    <div class="post">
      <p>我是一个段落</p>
    </div>
    
  2. only-of-type选择器
    表示一个元素他有很多个子元素,而其中只有一种类型的子元素是唯一的,使用:only-of-type选择器就可以选中这个元素中的唯一一个类型子元素。

    //css
    .wrapper > div:only-of-type {
      background: orange;
    }
    
    //html
    <div class="wrapper">
      <p>我是一个段落</p>
      <p>我是一个段落</p>
      <p>我是一个段落</p>
      <div>我是一个Div元素</div>
    </div>
    <div class="wrapper">
      <div>我是一个Div</div>
      <ul>
        <li>我是一个列表项</li>
      </ul>
      <p>我是一个段落</p>
    </div>
    

在这里插入图片描述

  1. :enabled选择器(:disabled同理)
    在Web的表单中,有些表单元素有可用(:enabled)和不可用(:disabled)状态,比如输入框,密码框,复选框等。在默认情况之下,这些表单元素都处在可用状态。那么我们可以通过伪选择器:enabled对这些表单元素设置样式。
//css
	div {
	  margin: 30px;
	}
	input[type="text"]:enabled {
	  border: 1px solid #f36;
	  box-shadow: 0 0 5px #f36;
	}
	
	input[type="text"]:disabled{
	  box-shadow: none;
	}


//html
	<form action="#">
 
  <div>
    <label for="enabled">可用输入框:</label>
    <input type="text" id="enabled" />
  </div>

  <div>
    <label for="disabled">禁用输入框:</label>
    <input type="text" id="disabled" disabled="disabled" />
  </div>
  
 </form> 

在这里插入图片描述

  1. :checked选择器
    在表单元素中,单选按钮和复选按钮都具有选中和未选中状态,可以通过状态选择器“:checked”配合其他标签实现自定义样式。而“:checked”表示的是选中状态。
//css
form {
  border: 1px solid #ccc;
  padding: 20px;
  width: 300px;
  margin: 30px auto;
}
.wrapper {
  margin-bottom: 10px;
}
.box {
  display: inline-block;
  width: 30px;
  height: 30px;
  margin-right: 10px;
  position: relative;
  background: orange;
  vertical-align: middle;
  border-radius: 100%;
}
.box input {
  opacity: 0;
  position: absolute;
  top:0;
  left:0;
  width: 100%;
  height:100%;
  z-index:100;/*使input按钮在span的上一层,不加点击区域会出现不灵敏*/
}

.box span { 
  display: block;
  width: 10px;
  height: 10px;
  border-radius: 100%;
  position: absolute;
  background: #fff;
  top: 50%;
  left:50%;
  margin: -5px 0  0 -5px;
  z-index:1;
}

input[type="radio"] + span {
  opacity: 0;

}
input[type="radio"]:checked + span {
  opacity: 1;
}

//html
<form action="#">
  <div class="wrapper">
    <div class="box">
      <input type="radio" checked="checked"  id="boy" name="1" /><span></span>
    </div>
    <label for="boy">男</label>
  </div>
  
  <div class="wrapper">
    <div class="box">
      <input type="radio"  id="girl" name="1"  /><span></span>
    </div>
    <label for="girl">女</label>
  </div>
</form> 

在这里插入图片描述

  1. ::selection选择器
    ::selection伪元素是用来匹配突出显示的文本(用鼠标选择文本时的文本)。浏览器默认情况下,用鼠标选择网页文本是以“深蓝的背景,白色的字体”显示的。
//css
	 ::selection{
	  background: orange;
	  color: white;
	}
	::-moz-selection{
	  background: orange;
	  color: white;
	}
	
//html
<p>“::selection”伪元素是用来匹配突出显示的文本。浏览器默认情况下,选择网站文本是深蓝的背景,白色的字体,
有的设计要求不使用上图那种浏览器默认的突出文本效果,需要一个与众不同的效果,此时“::selection”伪元素就非常的实用。不过在Firefox浏览器还需要添加前缀。</p>

在这里插入图片描述

  1. read-only选择器和:read-write选择器
    :read-only伪类选择器用来指定处于只读状态元素的样式。简单点理解就是,元素中设置了readonly=’readonly’
    //css
    form {
      width: 300px;
      padding: 10px;
      border: 1px solid #ccc;
      margin: 50px auto;
    }
    form > div {
      margin-bottom: 10px;
    }
    input[type="text"]{
      border: 1px solid orange;
      padding: 5px;
      background: #fff;
      border-radius: 5px;
    }
    input[type="text"]:-moz-read-only{
      border-color: #ccc;
    }
    input[type="text"]:read-only{
      border-color: #ccc;
    }
    textarea:-moz-read-only{
      border: 1px solid #ccc;
      height: 50px;
      resize: none;
      background: #eee;
    }
    textarea:read-only {
      border: 1px solid #ccc;
      height: 50px;
      resize: none;
      background: #eee;
    }
    
    //html
    <form action="#">
      <div>
        <label for="name">姓名:</label>
        <input type="text" name="name" id="name" placeholder="大漠" />
      </div>
      <div>
        <label for="address">地址:</label>
        <input type="text" name="address" id="address" placeholder="中国上海" readonly="readonly" />
      </div>
      <div>
        <label for="comment">评论:</label>
        <textarea name="comment" id="" cols="30" rows="10" readonly="readonly"></textarea>
      </div>
    </form>
    

在这里插入图片描述

:read-write选择器刚好与:read-only选择器相反,主要用来指定当元素处于非只读状态时的样式。

  1. ::before和::after
    ::before和::after这两个主要用来给元素的前面或后面插入内容,这两个常和"content"配合使用,使用的场景最多的就是清除浮动。
    制作阴影:
    //css
    .box h3{
      text-align:center;
      position:relative;
      top:80px;
    }
    .box {
      width:70%;
      height:200px;
      background:#FFF;
      margin:40px auto;
    }
    
    .effect{
      position:relative;       
        -webkit-box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
    	   -moz-box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
    			box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
    }
    .effect::before, .effect::after{
        content:"";
    	position:absolute; 
    	z-index:-1;
    	-webkit-box-shadow:0 0 20px rgba(0,0,0,0.8);
    	-moz-box-shadow:0 0 20px rgba(0,0,0,0.8);
    	box-shadow:0 0 20px rgba(0,0,0,0.8);
    	top:50%;
    	bottom:0;
    	left:10px;
    	right:10px;
    	-moz-border-radius:100px / 10px;
    	border-radius:100px / 10px;
    }
    
    //html
    <div class="box effect">
      <h3>Shadow Effect </h3>
    </div>
    

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值