Heim  >  Artikel  >  Web-Frontend  >  选择器_html/css_WEB-ITnose

选择器_html/css_WEB-ITnose

WBOY
WBOYOriginal
2016-06-24 11:43:351241Durchsuche

  CSS选择器有很多种,每次看别人写的跟背书一样,没办法,种类就那么多,只能一一罗列,还能玩出什么花样?所以重要的就是清楚为什么要这样用,好处在哪里了。

  如果我们的网页只是像老板吩咐我们做3件事的清单那样简单,做完一件划掉它,所以一眼可以看出哪件已做,哪件没做,而html网页是有结构的、嵌套的标签组织起来的文本形式,又多又长,所以需要选择器来快速定位,以应用我们添加给它的样式,因此了解选择器很有意义。

  1. 标签选择器

  在CSS中,有的标签本身已经具有一些样式,比如h1,通常会作为标题,它的字体比一般的大,默认为粗体,而且是块级标签,四周有margin值。标签选择器,本质上来说,就是给一个标签重新定义样式。还是h1,因为用它作标题有利于搜索引擎,所以经常用,但它自带的样式有时(恐怕是多时)与网页布局显得很不合理,所以我们完全可以重写它的样式,改变字体大小,去掉margin等,以达到整体控制的效果。只要重定义了它的样式,直接用h1将显示运用了新样式后的文本内容,这样更和谐了。

    h1{font-size:1em;}

  2. 类选择器

  既然是类,更多的是对一个或几个元素产生影响,为了减少工作量和精确控制,对相同的类型的一些元素给一个相同的class名,是很不错的选择,重点是可以在一个class中添加多个类名,更加省时。如这里三个选择器各添加不同的样式,都会加载到这段文本上。当然CSS样式是就近原则,后面的覆盖前面的,优先级高的覆盖优先级低的,所以假如mr也设置了font-size,它将覆盖掉ft选择器中的font-size。

    .ft{font-size:24px;}        .mr{margin:10px;}    .fl{float:left;}    <p class="ft mr fl ">Hello World</p>

   专业的前端通常会同时使用几个类,一个fl,表示飘浮到页面左边,单独写一个样式,需要时就加上,因此它更像一个工具,拆分成多个类名,扩展性更强。注意类名中可以出现 - 或 _ ,这是允许的。

  3. ID选择器

  ID给人一种唯一标识的感觉,所以它经常是刻划网页上一个特殊的部位,更多的是表示某一部分内容,比如横幅(banner)、边栏(sidebar)、主要内容(main)等,如划分一个大块时经常这样像下面这样,当然如果你说我就喜欢用ID选择器,我把所有的标签都加ID,唯一结果就是肯定不会有人过去咬你-_-#

    #news{        margin-left:10%;        font-family:"Times New Roman"     }     <div id="news">         ........     </div> 

  关于ID有个重点就是它具有高优先级,比如下面

    #link{ color:red; }    .link{ color:blue; }    <a id="link" class="link" href="#">To Somewhere</a>

  它是红色还是蓝色?演示就知道是红色,因为ID选择器具有更高的优先级,浏览器会根据ID和class(或者组合)计算出一个权重值,谁的大用谁的样式(理论上是这样,但用Chrome试过好像也不一定),权重值的计算如果深究也有点麻烦,特别是不只一个ID、class、标签纠缠在一起时。如何计算权值网上也有文章分析,当然我们何必要为难自己呢,至少我自己(向前端学的)有时做简单的页面,只用类选择器,只在有时用js时为了快速取到元素才加id,基本不用ID选择器添加样式,避免麻烦。 

  4. 群选择器

  如果看过专业前端的css代码,肯定在最开头有类似这样的:

    body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li{ margin: 0; padding: 0; }

  一开始偶不明白为何弄这样一大堆标签,以为是设计时对样式从整体到局部的把握,所以先给所有的标签元素一两个基本的、整体的样式,像这里margin、padding就是让它们所有的标签都归为0。后来发现,这么说也不能说全错,但更重要的是,很多浏览器在处理一些自带样式的标签时(如h1~hn),虽然左右是有空白的,但有的使用margin,有的使用padding,不统一可能带来样式上的错乱,为了让样式在更多浏览器上显示一致,所以这里干脆去掉它们的margin、padding,当要使用某个标签时,再给单独添加margin、padding。这里的一大堆标签,以逗号分隔的选择器,称为群选择器,表示把它们都设置成一个后面括号中样式。群选择器不限于标签,class、id也可以这样干:.link, .news, #banner{...}。群选择器在设置一大堆具有相同样式的标签、类、ID时很方便。关于上面那个一大堆把margin、padding置为0的、提高显示一致性设计,有个名字叫CSS Reset,样式重置,这是偶这种小白平常用不到的。

  5. 通用选择器

  群选择器一次设置多个很爽,堆在一起用逗号分隔即可,还有更爽的,就是通用选择器,它就是一个 * ,代表所有选择器(通用嘛),比如下面

    h1, h2, p{font-weight:bold;}    * {font-weight:bold;}

  第二个通用选择器等同于设置了第一个群选择器的内容,当然能比它代表更多的东西。

  6. 派生选择器

  这应该是专业前端最最常用的类型了,也称后代选择器。我们知道html标签是嵌套的,外面的是父元素,里面的是子元素,当然父子关系是相对的,这叫做html的族谱,当然它也有根节点,兄弟节点等,这根二叉树完全一样,所以也有相应的父标签、祖先标签、兄弟标签等等。比如像这样的

    <div id="nav">        <ul class="nav">             <li></li>             <li></li>        </ul>    </div>    

  ul是div的子标签,li是ul的子标签,id选择器在类选择器nav的标签的父标签里边,所以定位到

  • 标签的选择器可以这样写:

        #nav .nav li{...}

      需要注意的地方就是中间有空格,空格表示子标签,或者是位于子标签中的选择器,即一种父子关系,子孙关系也可,爷孙关系当然也行,总之就是:派生关系。对于派生选择器,如果不隔一个空格就是完全另一种情况,比如这里如果写 div#nav ul{...}(div紧挨着#nav)表示的就是:

  • Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn