好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

only 元素选择

only-child & only-of-type

在前端开发 页面 的过程中需要对一些特定类型的元素赋予特殊的样式,通常我们不会在 HTML 标签 上 一个 个去 增加 class 去设置特殊的样式,这时候通过元素选择伪类就能 解决 这类问题。本章主要介绍 only-child 和 only-of-type 这两个伪类。

1. 官方定义

only-child 匹配属于父元素中唯一子元素。
only-of-type 匹配属于父元素的特定类型的唯一子元素。

2. 解释

only-child 当元素 添加 这个伪类的时候,它在所属的父元素之内,有且仅有它自己时伪类生效。

3. 语法

   .demo  :only-child   { 

 } 
  .demo  :only-of-type   { 
    
 } 
 

说明:通过 : 后面加伪类进行元素选择。

4. 兼容性

IE Edge Firefox Chrome Safari Opera ios android all all all all all all all all

5. 实例

only-child

1. 当 页面 中只有 一个 .demo 标签 时候背景变成红色:

    < body  >  
       < div   class   =  " demo "   >  网   </ div  >      
   </ body  >  
 

   .demo  :only-child   { 
     color  :  #fff  ; 
     background  :  red ; 
     padding  : px ; 
 } 
 

效果 图:

一个 标签 时候背景变成红色 效果 图

  <!DOCTYPE html> 
   < html   lang   =  " en "   >  
   < head  >  
       <  Meta    charset   =  " UTF-8 "   >  
       <  Meta    name   =  " viewport "    content   =  " width=`, initial-scale=1.0 "   >  
       < title  >  Document   </ title  >  
       < style  >   
      .demo  :only-child   { 
     color  :  #fff  ; 
     background  :  red ; 
     padding  : px ; 
     } 
    </ style  >  
   </ head  >  
   < body  >  
       < body  >  
	       < div   class   =  " demo "   >  网   </ div  >      
	   </ body  >  
   </ body  >  
   </ html  >  
 

2. 当 页面 有两个 demo class 时候不再有任何 效果 :

    < body  >  
       < div   class   =  " demo "   >  网   </ div  >      
        < div   class   =  " demo "   >  网   </ div  >      
   </ body  >  
 

   .demo  :only-child   { 
     color  :  #fff  ; 
     background  :  red ; 
     padding  : px ; 
 } 
 

效果 图:

无 效果 效果 图

  <!DOCTYPE html> 
   < html   lang   =  " en "   >  
   < head  >  
       <  Meta    charset   =  " UTF-8 "   >  
       <  Meta    name   =  " viewport "    content   =  " width=`, initial-scale=1.0 "   >  
       < title  >  Document   </ title  >  
       < style  >   
          .demo  :only-child   { 
             color  :  #fff  ; 
             background  :  red ; 
             padding  : px ; 
         } 
        </ style  >  
   </ head  >  
   < body  >  
           < div   class   =  " demo "   >  网   </ div  >      
            < div   class   =  " demo "   >  网   </ div  >      
   </ body  >  
   </ html  >  
 

说明: body 下面有两个 demo 不是唯一子元素,这时候伪类就不再起作用。

注意:当 demo 元素内部包含 demo 元素还是起作用的,因为 body 下面的子元素只有 1 个。

    < body  >  
	   < div   class   =  " demo "   >   网 
	       < div   class   =  " demo "   >   网     </ div  >  
	       < div   class   =  " demo "   >   网     </ div  >   
	   </ div  >  
   </ body  >  
 

效果 图:

一个 元素 效果 图

  <!DOCTYPE html> 
   < html   lang   =  " en "   >  
   < head  >  
       <  Meta    charset   =  " UTF-8 "   >  
       <  Meta    name   =  " viewport "    content   =  " width=`, initial-scale=1.0 "   >  
       < title  >  Document   </ title  >  
       < style  >   
          .demo  :only-child   { 
             color  :  #fff  ; 
             background  :  red ; 
             padding  : px ; 
         } 
        </ style  >  
   </ head  >  
   < body  >  
         < div   class   =  " demo "   >   网 
             < div   class   =  " demo "   >   网     </ div  >  
             < div   class   =  " demo "   >   网     </ div  >   
         </ div  >  
   </ body  >  
   </ html  >  
 

如果我们希望在 demo 内部只有 一个 demo 时候 ,内部的 demo 变成红色怎么做呢?

    < div   class   =  " demo "   >   网 
       < div   class   =  " demo "   >   网     </ div  >  
   </ div  >  
 

   .demo > .demo  :only-child   { 
     color  :  #fff  ; 
     background  :  red ; 
     padding  : px ; 
 } 
 

效果 图:

demo 内部只有 一个 demo 时候 内部的 demo 变成红色 效果 图

  <!DOCTYPE html> 
   < html   lang   =  " en "   >  
   < head  >  
       <  Meta    charset   =  " UTF-8 "   >  
       <  Meta    name   =  " viewport "    content   =  " width=`, initial-scale=1.0 "   >  
       < title  >  Document   </ title  >  
       < style  >   
       .demo > .demo  :only-child   { 
         color  :  #fff  ; 
         background  :  red ; 
         padding  : px ; 
     } 
        </ style  >  
   </ head  >  
   < body  >  
       < body  >  
           < div   class   =  " demo "   >   网 
               < div   class   =  " demo "   >   网     </ div  >             
           </ div  >  
       </ body  >  
   </ body  >  
   </ html  >  
 

only-of-type

1. 给类名为 demo 的元素 增加 红色背景

    < body  >  
       < div   class   =  " demo "   >   网    </ div  >     
   </ body  >  
 

    .demo  :only-of-type   { 
     color  :  #fff  ; 
     background  :  red ; 
     padding  : px ; 
 } 
 

效果 图:

demo 变红 效果 图

  <!DOCTYPE html> 
   < html   lang   =  " en "   >  
   < head  >  
       <  Meta    charset   =  " UTF-8 "   >  
       <  Meta    name   =  " viewport "    content   =  " width=`, initial-scale=1.0 "   >  
       < title  >  Document   </ title  >  
       < style  >   
      .demo  :only-of-type   { 
         color  :  #fff  ; 
         background  :  red ; 
         padding  : px ; 
     } 
        </ style  >  
   </ head  >  

   < body  >  
       < div   class   =  " demo "   >   网    </ div  >  
   </ body  >  

   </ html  >  
 

说明:这里发现它和 only-child 的 功能 类似,但其实是不一样的我们看下面这个例子:

    < body  >  
       < div   class   =  " demo "   >   网    </ div  >  
       < p   class   =  " demo "   >   网     </ p  >  
   </ body  >  
 

    .demo  :only-of-type   { 
     color  :  #fff  ; 
     background  :  red ; 
     padding  : px ; 
 } 
 

效果 图:

变红 效果 图

  <!DOCTYPE html> 
   < html   lang   =  " en "   >  
   < head  >  
       <  Meta    charset   =  " UTF-8 "   >  
       <  Meta    name   =  " viewport "    content   =  " width=`, initial-scale=1.0 "   >  
       < title  >  Document   </ title  >  
       < style  >   
      .demo  :only-of-type   { 
         color  :  #fff  ; 
         background  :  red ; 
         padding  : px ; 
     } 
        </ style  >  
   </ head  >  

   < body  >  
       < div   class   =  " demo "   >   网    </ div  >  
       < p   class   =  " demo "   >   网     </ p  >  
   </ body  >  

   </ html  >  
 

解释:我们发现同样都变红了。这是因为 两个 demo 并不是唯一的。因为其中 一个 是 div 而另 一个 是 p ,这时候 only-child 是不能分辨的,这也是它们的区别。

6. Tips

这两个伪类 功能 很类似,我们不容易区分但是这里有个小技巧 :only-child 就像 JS 中的 id 一样,只能是唯一的。

before && after 位置 ? ?media 媒体查询

查看更多关于only 元素选择的详细内容...

  阅读:44次

上一篇

下一篇

第1节:CSS3简介    第2节:border 边框    第3节:borderImage 边框图片    第4节:border-radius 圆角    第5节:box-shadow 阴影    第6节:box-sizing 盒类型    第7节:gradients 渐变    第8节:text-justify 对齐    第9节:text-overflow 文字超出    第10节:text-shadow 文本阴影    第11节:word-break 文本打断    第12节:word-wrap 文本换行    第13节:letter-spacing 字间距    第14节:perspective 透视    第15节:transform 2D 空间转换    第16节:transform 3D 空间转换    第17节:transition 过渡    第18节:animation 动画    第19节:columns 字符分割    第20节:flex 弹性盒子布局    第21节:flex order 顺序    第22节:flex: grow、shrink、basis    第23节:flex-direction 排列方向    第24节:justify-content (轴内)对齐方式    第25节:flex-wrap 换行    第26节:align-items 竖直方向对齐方式    第27节:align-content    第28节:Grid 布局简介    第29节:Grid 行和列    第30节:media 媒体查询    第31节:only 元素选择    第32节:before && after 位置    第33节:nth 类型元素选择器    第34节:calc 计算属性