如何根據 File Extension 自動顯示圖片 ?

栏目: CSS · 发布时间: 7年前

内容简介:一個常見的需求,由於不算視覺部分,直覺要使用 JavaScript 處理,其實 CSS 就能解決。CSS 3

一個常見的需求,由於不算視覺部分,直覺要使用 JavaScript 處理,其實 CSS 就能解決。

Version

CSS 3

Image by File Extension

如何根據 File Extension 自動顯示圖片 ?

若 file extension 為 pdf ,則顯示 pdf.svg ;若為 doc ,則顯示 word.svg

若使用 JavaScript 當然可行,可能完全使用 CSS 實現嗎 ?

Attribute Selector

<!DOCTYPE html>
<head>
  <meta charset="UTF-8">
  <title>Image by Extenstion</title>
  <style>
    .download a {
      display: block;
      padding-left: 30px;
    }

    .download a[href $= '.pdf'] {
      background: url('pdf.svg') no-repeat;
    }

    .download a[href $= '.doc'] {
      background: url('word.svg') no-repeat;
    }
  </style>
</head>
<body>
  <div class="download">
    <a href="aaa.pdf">aaa.pdf</a>
    <a href="bbb.doc">bbb.doc</a>
  </div>
</body>
</html>

21 行

<div class="download">
  <a href="aaa.pdf">aaa.pdf</a>
  <a href="bbb.doc">bbb.doc</a>
</div>

很平凡地將兩個 <a> 包在 <div> 內。

第 6 行

.download a {
  display: block;
  padding-left: 30px;
}
  • <a> 是 inline element,為了使其並排,將 display 設定為 block
  • 圖片將使用 background-image 呈現,故特別將 <a> 設定 padding-left 用來顯示圖片

11 行

.download a[href $= '.pdf'] {
  background: url('pdf.svg') no-repeat;
}

Attribute selector 有個特色,就是能搭配 regular expression。

  • $= 表示結尾是 .pdf
  • 使用 background 一次設定 檔案位置no-repeat

15 行

.download a[href $= '.doc'] {
  background: url('word.svg') no-repeat;
}

大部分情況下,使用 background 是方便的,它讓我們一次設定多個 property。

但在這種使用情境下,我們卻必須 重複 設定 no-repeat

Refactor CSS

<!DOCTYPE html>
<head>
  <meta charset="UTF-8">
  <title>Image by Extenstion</title>
  <style>
    .download a {
      display: block;
      padding-left: 30px;
      background-repeat: no-repeat;
    }

    .download a[href $= '.pdf'] {
      background-image: url('pdf.svg');
    }

    .download a[href $= '.doc'] {
      background-image: url('word.svg');
    }
  </style>
</head>
<body>
  <div class="download">
    <a href="aaa.pdf">aaa.pdf</a>
    <a href="bbb.doc">bbb.doc</a>
  </div>
</body>
</html>

第 6 行

.download a {
  display: block;
  padding-left: 30px;
  background-repeat: no-repeat;
}

將共用的 no-repeat 重構到 .download a ,如此 no-repeat 只要寫一次即可。

13 行

.download a[href $= '.pdf'] {
  background-image: url('pdf.svg');
}

改用 background-image ,只設定 檔案位置 即可。

17 行

.download a[href $= '.doc'] {
  background-image: url('word.svg');
}

不需再重複 no-repeat

Conclusion

  • 善用 Attribute selector 的 regular expression,如此就不必使用到 JavaScript
  • 當 property 重複設定時,可改設定到上層 selector

Reference

MDN , Attribute selector


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构与算法

数据结构与算法

2009-8 / 32.00元

《数据结构与算法》系统地介绍了数据结构的基本概念和基本算法,主要内容包括:绪论,线性表,栈与队列,串,数组、特殊矩阵和广义表,树,图,排序,查找,算法的分析与设计,实验与上机指导。《数据结构与算法》特别注重突出应用性和实践性,实例和习题丰富,并在附录中给出了各章习题的答案。 《数据结构与算法》适合作为应用型本科院校和成人教育计算机专业数据结构课程的教材,也可作为数据结构培训班的教材以及软件从......一起来看看 《数据结构与算法》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码