CSS 设置列表格式

在word中,列表也是使用频率非常高的元素。在CSS中,列表和列表项都是块级元素。也就是说,一个列表会形成一个块框,其中的每个列表项也会形成一个独立的块框。所以,盒模型中块框的所有属性,都适用于列表和列表项。

除此之外,列表还有 3 个特有的属性 list-style-type、list-style-position和list-style-image,分别用来定义列表项目符号的样式、项目符号的位置、项目符号的图片。

列表可以相互嵌套,并且一种类型的列表,可以与任何类型的列表相互嵌套。列表的表项也可以与任何HTML元素(如段落、图片、链接等)交叉定义。

在word中,常常可以看到列表与段落、图片、表格等交叉的情况。其实,列表跟其他元素交叉的情形更常见,纯粹的列表反而少见。如:

 
  1. <p>列表的list-style-type、list-style-position…项目符号所使用的图片。</p>
  2. <ul>
  3.    <li>list-style-type属性</li>
  4.    <ol>
  5.       <p>list-style-type属性用来设置列表项目符号,取值有:</p>
  6.       <li>disc 默认值,实心圆</li>
  7.       <li>decimal       数字1、2、3、4、5</li>
  8.       <li>lower-alpha 小写英文字母a、b、c、d、e</li>
  9.       <li>lower-roman 小写罗马数字ⅰ、ⅱ、ⅲ、ⅳ、ⅴ</li>
  10.     </ol>
  11.     <li>list-style-position属性</li>
  12.     <li>list-style-image属性</li>
  13. <ul>

上述代码中,在 ul 中嵌套了 ol,在 ol 中,段落元素 p 也与列表项 li 元素交叉定义。这只是一个非常简单的实例,通过该实例,来演示如何为列表应用样式。

由于不同的浏览器下,列表的默认样式可能不同。所以,为了在所有浏览器中表现一致,首先要清除列表的默认样式,如外边距、内边距、列表项目符号等。

 
  1. ul,ol {
  2.     margin: 0;
  3.     padding: 0;
  4. }

默认情况下,列表的 list-style-position属性值为 outside,项目符号不占据容器的空间。在列表元素的 margin 或 padding 为 0 时,项目符号在容器的外面,项目符号将无法与段落文本对齐。所以,根据需要,可以把list-style-position属性设置为inside。

另外,中文有一个书写习惯,就是段落首行缩进两个字符。要使列表和段落对齐,列表项同样也要首行缩进两个字符。

 
  1. ul li, ol li {
  2.    text-indent: 2em;
  3.    list-style-position: inside;
  4. }

由于默认的列表项目符号过于简单,并且选择范围很小,根本不能满足大多数用户的需求。对此,CSS提供了图片替换技术,可以选用符合页面风格的图片,来取代默认的列表项符号。

取代默认的列表项符号时,HTML代码无需任何修改,只需使用 list-style-image属性定义图片的URL即可。这也是CSS优越性的体现。这里,对无序列表,使用 square.png 作为项目符号,而有序列表使用默认的数字项目符号。

 
  1. ul {
  2.    list-style-image: url(img/square.png);
  3. }
  4. ol {
  5.    list-style-type: decimal;
  6. }

上述代码看似没有问题,并在Chrome下运行正常,但在IE的所有版本和Opera下,内层的 ol 依然使用 square.png 作为项目符号。究其原因,是因为 list-style-image属性具有继承性,内层列表继承了外层列表的list-style-image属性所导致。

所以,如果要用图片取代默认的列表项目符号,在清除列表的默认样式时,还要把 list-style属性设置为 none。

 
  1. ol {
  2.    list-style-type: decimal;
  3.    list-style-image: none;
  4. }

经过上述处理之后,我们定义的列表,就跟word中的列表相差无几了,并在所有浏览器下表现一致。运行结果如图 11‑13 所示:

列表样式图11-13 列表样式

虽然使用 list-style-image 很容易达到目的,但是由于列表的格式化,主要由浏览器,而不是由设计人员完成的,所以无法精确控制图片的位置。从上图可以看出,图片和文本很难正确对齐。并且,在不同的浏览器下,图片和文字之间的距离也不尽相同。

然而,并非只有 list-style-image属性才能实现使用图片替换项目符号的功能。前面介绍过,CSS把页面上的任何元素都看作一个盒子,盒模型的大多数公共属性,其实都适用于列表,包括背景属性。所以,这时候背景就可以派上用场,可以使用背景来替代 list-style-image,再通过 background-position属性,来精确控制项目符号的位置。

要使用背景作为项目符号,首先要重置 list-style-type属性,把它置为 none。否则,项目符号和背景将会同时出现。

 
  1. ul  {
  2.    list-style-type: none;
  3. }

然后,为列表的 li 元素定义一个背景图像,并设置为不平铺。为了防止 li 中的文本覆盖背景图像,需要为 li 设置适当的左外边距,为图片腾出空间。再通过 background-position属性来精确控制背景图像的位置,保证背景图像和文本正确对齐。

 
  1. ul  li {
  2.    margin-left: 2em;
  3.    background-position: 0 6px;
  4.    background-repeat: no-repeat;
  5.    background-image: url(img/square.png); 
  6. }

通过调整图片的位置,项目符号和文本可以正确对齐,并且在所有浏览器下的表现一致,比直接使用 list-style-image属性的效果明显要好多了(限于篇幅,就不截图了),这就是使用背景图像的好处。

关于作者

歪脖先生,十五年以上软件开发经验,酷爱Web开发,精通 HTML、CSS、JavaScript、jQuery、JSON、Python、Less、Bootstrap等,著有《HTML宝典》、《揭秘CSS》、《Less简明教程》、《JSON教程》、《Bootstrap2用户指南》、《Bootstrap3实用教程》,并全部在 GitHub 上开源。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值