>웹 프론트엔드 >HTML 튜토리얼 >选择器_html/css_WEB-ITnose

选择器_html/css_WEB-ITnose

WBOY
WBOY원래의
2016-06-24 11:43:351273검색

  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)表示的就是:

  • 성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.