查看: 2053|回复: 0

[DIV/CSS] CSS :before and :after 伪元素的最佳实践

发表于 2018-2-26 08:59:02

在这里给大家总结一下,伪元素的八大最佳实践场景。希望对各位的日常开发有所启发。

场景一:插入内容

假设我们有如下的html代码

  1. <p>paragraph text</p>
复制代码

我们可以用伪元素添加内容比如:

  1. p:before {
  2. content: "this is ";
  3. font-weight: bold;
  4. font-style: italic;
  5. }
复制代码

将会出现如下效果:
图片描述

请记住,实际上这种做法是在内容之前或之后添加元素。它不是出现在所选元素旁边的东西,而是与其内容有关。

场景二:插入Icons图标

通过伪元素:before and :after 插入图标是非常流行的做法。因为我们可以给伪元素添加几乎任何CSS样式属性(常见的情况是:创建的伪元素是一个块并附加背景图像)

比如我们给出一段HTML代码

  1. <p>paragraph text</p>
复制代码

通过伪元素方式添加icon图标

  1. p:before {
  2. content: "";
  3. display: block;
  4. background: url("icon.jpg") no-repeat;
  5. width: 20px;
  6. height: 20px;
  7. float: left;
  8. margin: 0 6px 0 0;
  9. }
复制代码

在浏览器中呈现出如下效果
图片描述

场景三:给链接添加额外的样式

有时候,将不同风格的链接指向外部资源是一种很好的做法。通过伪元素的方式,可以很容易地实现它。假设我们有以下几段文字:

  1. <p>Krasimir Tsonev is <a href="http://krasimirtsonev.com">developer</a>
  2. who likes to write and <a href="https://twitter.com/KrasimirTsonev">tweet</a>.</p>
复制代码

我们可以在该链接之后添加一个小图标,指示它指向当前域外部的页面。

  1. a {
  2. text-decoration: none;
  3. font-weight: bold;
  4. color: #000;
  5. }
  6. a:after {
  7. content: "";
  8. display: inline-block;
  9. background: url("icon-external.jpg") no-repeat top right;
  10. width: 14px;
  11. height: 12px;
  12. }
复制代码

呈现如下效果:
图片描述

场景四:面包屑导航

通常当我们做面包屑导航的时候,面包屑之间有链接和分隔符。可以通过伪元素的方式实现,而不是添加而外元素到DOM中。

  1. <p>
  2. <a href="#">Home</a>
  3. <a href="#">Team</a>
  4. <a href="#">Developers</a>
  5. </p>
复制代码

css代码如下:

  1. a {
  2. text-decoration: none;
  3. font-weight: bold;
  4. color: #000;
  5. }
  6. a:after {
  7. content: " /";
  8. }
  9. a:first-child:before {
  10. content: " ? ";
  11. }
  12. a:last-child:after {
  13. content: "";
  14. }
复制代码

可以得到如下效果

图片描述

场景五:清除浮动

在一些不做responsible的PCweb页面,使用浮动属性进行布局仍然很受欢迎。但是,一旦一个元素浮动,你需要另一个元素来清除浮动。
例如下面的代码:

  1. * html
  2. <a href="#">Home</a>
  3. <a href="#">Products</a>
  4. <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec at purus ac lacus ultrices vehicula.</p>
  5. * css
  6. a {
  7. float: left;
  8. display: block;
  9. width: 100px;
  10. ... other styling
  11. }
复制代码

图片描述

文本应该在链接下面,而不是添加新的DOM节点。我们可以使用:在伪元素之前清除浮动:

  1. p:before {
  2. content: "";
  3. display: block;
  4. clear: both;
  5. }
复制代码

图片描述

场景六:引用

:before and :after 伪元素非常适合作为引用标记。

  1. <p>
  2. Martin Fowler said
  3. <span class="quoted">Any fool can write code that a computer can understand.
  4. Good programmers write code that humans can understand.</span>
  5. </p>
复制代码

只有使用CSS才能达到以下效果:
图片描述

  1. span.quoted {
  2. font-family: Georgia;
  3. font-size: 16px;
  4. display: block;
  5. margin: 14px 0 0 0;
  6. font-style: italic;
  7. }
  8. span.quoted:before {
  9. content: "“";
  10. font-size: 40px;
  11. color: #999;
  12. line-height: 0;
  13. display: inline-block;
  14. margin: 0 6px 0 0;
  15. }
  16. span.quoted:after {
  17. content: " ”";
  18. font-size: 40px;
  19. color: #999;
  20. line-height: 0;
  21. display: inline-block;
  22. margin: 0 0 0 4px;
  23. }
复制代码
场景七:插入箭头形状

设计师给弹出窗口或者很好看的工具提示经常会添加这种箭头形状的设计。它们的实现有点麻烦。幸运的是,我们可以利用伪元素的方式解决这个问题,而不需要额外的图像或者JavaScript代码。
图片描述

HTML代码如下:

  1. <h2>What is CSS?</h2>
  2. <div class="popup">
  3. Cascading Style Sheets is a style sheet language used for describing
  4. the presentation semantics of a document written in a markup language.
  5. </div>
复制代码

这个页面的样式是,在左边有一个标题,并在右边弹出。我们需要在描述文本的左边添加这个小箭头,指向标题。可以用伪元素这样实现:

  1. h2 {
  2. float: left;
  3. width: 170px;
  4. }
  5. .popup {
  6. float: left;
  7. width: 340px;
  8. background: #727272;
  9. padding: 10px;
  10. border-radius: 6px;
  11. color: #FFF;
  12. position: relative;
  13. font-size: 12px;
  14. line-height: 20px;
  15. }
  16. .popup:before {
  17. content: "";
  18. display: block;
  19. width: 0;
  20. height: 0;
  21. border-top: 12px solid transparent;
  22. border-bottom: 12px solid transparent;
  23. border-right: 12px solid #727272;
  24. position: absolute;
  25. top: 16px;
  26. left: -12px;
  27. }
复制代码
场景八:给标题添加样式

在有一些单页网站,我们会通过标题来分割页面的组织部分。每个标题由两条线包围。就像这样:
图片描述

再一次,我们利用伪元素方式轻松实现:

  1. h2 {
  2. width: 100%;
  3. margin: 0;
  4. padding: 0;
  5. text-align: center;
  6. }
  7. h2:after {
  8. display: inline-block;
  9. margin: 0 0 8px 20px;
  10. height: 3px;
  11. content: " ";
  12. text-shadow: none;
  13. background-color: #999;
  14. width: 140px;
  15. }
  16. h2:before {
  17. display: inline-block;
  18. margin: 0 20px 8px 0;
  19. height: 3px;
  20. content: " ";
  21. text-shadow: none;
  22. background-color: #999;
  23. width: 140px;
  24. }
复制代码
结论

使用伪元素:before and :after 最大的好处是可以在不添加新的DOM节点的情况下对HTML进行样式设置。 CSS是前端控制视觉的工具,结合伪元素,可以轻松完成很多精巧的设计,好看的样式。

延伸阅读:

Meet the Pseudo Class Selectors CSS Tooltips CSS Triangle Learning To Use The :before And :after Pseudo-Elements In CSS CSS: :before and :after pseudo elements in practice


回复

使用道具 举报