在table上使用::before/::after的问题

转载自:

次碳酸钴的技术博客

http://www.web-tinker.com/article/20638.html

  在table上使用::before和::after之类的为元素会不会不科学呢?像table这样限定了子元素的标签,::before和::after之类的伪元素是怎么处理的?其实也没什么不科学的,因为浏览器设置都支持非table元素使用display设置得和table系列元素一样。
  浏览器并不在乎你用什么标签,只要display能对上即可,即使全用DIV也可以实现表格运行<style>
.table {display:table;border:1px solid red;border-spacing:2px;}
.tr {display:table-row;}
.td {display:table-cell;border:1px solid red;padding:1px;}
</style>
<div class="table">
  <div class="tr">
    <div class="td">1</div>
    <div class="td">2</div>
  </div>
  <div class="tr">
    <div class="td">3</div>
    <div class="td">4</div>
  </div>
</div>

  所以,伪元素只要有正确的display,在表格中使用是完全没问题的。如果display不正确,普通的元素就会被提取到表格外。运行<style>
table {border:1px solid red;border-spacing:2px;}
td {border:1px solid red;padding:1px;}
span {border:1px solid red;display:inline-block;}
</style>
<table>
  <span>div</span>
  <tr><td>
    td
  </td></tr>
</table>

  但如果使用::before和::after,即使没有正确的display也会被包含到table中运行<style>
table {border:1px solid red;border-spacing:2px;}
td {border:1px solid red;padding:1px;}
table:before {
  content:'before';
  border:1px solid red;
  display:inline-block;
}
</style>
<table id="table">
  <tr><td>td</td></tr>
</table>
<script>
document.write(getComputedStyle(table,"::before").display);
</script>

  IE8不支持getComputedStyle,所以没显示其display的值,但效果是相同的。虽然这个伪元素看似是TD的样子,但其实不是,它不会自动计算宽度。只有display:table-cell的元素才会在表格内被自动计算宽度。
运行<style>
table {border:1px solid red;border-spacing:2px;}
td {border:1px solid red;padding:1px;}
table:before {content:'x';border:1px solid red;display:inline-block;}
table:after {content:'x';border:1px solid red;display:table-cell;}
</style>
<table id="table">
  <tr><td>td</td></tr>
</table>
  

 也许有人会觉得,没有TR只有用TD是不对的,其实这并没什么问题,如果没有TR直接遇到TD,引擎会为其建立一个TR。就像我们通常都不写TBODY一样,这也是自动建立的。
  根据以上这些逻辑,::before和::after是可以在表格中使用的,而且如果不需要自动计算宽度(比如用于绝对定位)甚至不需要设置正确的display。

[转载]在table上使用::before/::after的问题的更多相关文章

  1. [转]C# ListView 单击标题实现排序(在转载的基础上有所完善)

    using System; using System.Collections; using System.Windows.Forms; //在转载的基础上有所完善 namespace TDRFacto ...

  2. [转载]php 处理上百万条的数据库如何提高处理查询速度

    转载自http://www.jb51.net/article/22063.htm ----------------------------------------------------------- ...

  3. 《转载》myeclipse 上安装 Maven3

    本文转载自http://www.cnblogs.com/fancyzero/archive/2012/06/09/maven3.html 环境准备: JDK 1.6 Maven 3.0.4 myecl ...

  4. [转载] Android Studio 上第一个 Xposed 模块

    本文转载自: http://www.open-open.com/lib/view/open1451364108964.html 环境: 已root手机一枚 Android Studio一枚 官方文档参 ...

  5. 【转载】debian上快速搭建ftp

    转载自:http://suifengpiaoshi.diandian.com/post/2012-05-05/17955899 搭建ftp 包括搭建ftp服务器和ftp客户端 本文以debian上搭建 ...

  6. (转载)Linux上iptables防火墙的基本应用教程

    (转载)http://www.vpser.net/security/linux-iptables.html iptables是Linux上常用的防火墙软件,下面vps侦探给大家说一下iptables的 ...

  7. 【转载】Windows上那些值得推荐的良心软件-整理 easybcd 引导工具 easyuefi 引导工具

    您查询的关键词是:清理dism知乎 以下是该网页在北京时间 2019年03月17日 21:56:16 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 htt ...

  8. 【转载】Github上优秀的.NET Core项目

    Github上优秀的.NET Core项目 Github上优秀的.NET Core开源项目的集合.内容包括:库.工具.框架.模板引擎.身份认证.数据库.ORM框架.图片处理.文本处理.机器学习.日志. ...

  9. 【转载】文件上传那些事儿,文件ajax无刷上传

    导语 正好新人导师让我看看能否把产品目前使用的FileUploader从老的组件库分离出来的,自己也查阅了相关的各种资料,对文件上传的这些事有了更进一步的了解.把这些知识点总结一下,供自己日后回顾,也 ...

随机推荐

  1. 基于环信的仿QQ即时通讯的简单实现

    代码地址如下:http://www.demodashi.com/demo/11645.html 我的博客地址 之前一直想实现聊天的功能,但是感觉有点困难,今天看了环信的API,就利用下午的时间动手试了 ...

  2. 由于删除DBF文件报错 —— ORA-01033: ORACLE initialization or shutdown in progress

    由于移动或删除DBF文件报错:ORA-01033: ORACLE initialization or shutdown in progress   原因:一般该类故障通常是由于移动文件而影响了数据库日 ...

  3. mysql 5.6的安装

    MySQL安装   yum install -y perl-Module-Install.noarch cd /usr/local/src wget http://mirrors.sohu.com/m ...

  4. Android自定义Toast

    1.http://www.cnblogs.com/salam/archive/2010/11/10/1873654.html 2.

  5. node.js 学习01

    PHP开发技术栈(LAMP) Linux  Apache  MySql  PHPnode.js 全栈开发技术栈(MEAN): MongoDB  Express  Angular  Node.js 现阶 ...

  6. springboot学习(五) 全局异常处理

    创建全局异常处理 /** * 全局异常配置管理 */ @ControllerAdvice public class GlobalExceptionConfig extends ResponseEnti ...

  7. Linux管理员必须知道的sudo命令

    "Sudo"是Unix/Linux平台上的一个很实用的工具,它同意系统管理员分配给普通用户一些合理的"权利",让他们执行一些仅仅有超级用户或其它 特许用户才干完 ...

  8. jquery的ajax-serialize()

    jQuery ajax - serialize() 方法 jQuery Ajax 参考手册 实例 输出序列化表单值的结果: $("button").click(function() ...

  9. python模块学习之os

    16.1. os-复杂的操作系统接口 Source code: Lib/os.py 该模块提供了使用操作系统相关功能的便携式方法. 如果您只想读或写一个文件,请参阅open(),如果要操作路径,请参阅 ...

  10. PyTorch在64位Windows下的Conda包(转载)

    PyTorch在64位Windows下的Conda包 昨天发了一篇PyTorch在64位Windows下的编译过程的文章,有朋友觉得能不能发个包,这样就不用折腾了.于是,这个包就诞生了.感谢@晴天14 ...