display: block; VS display: table;
<p>I can't spot the difference between <code>display: block;</code> and <code>display: table;</code>. For example, when writing clearfix, the following two CSS rule seems to behaviour identical:</p>

<blockquote>
  <p>Using <code>display: block;</code></p>
</blockquote>

<p><div class="snippet" data-lang="js" data-hide="true" data-console="true" data-babel="false">
<div class="snippet-code snippet-currently-hidden">
<pre class="snippet-code-css lang-css prettyprint-override"><code>.clearfix:after {
  content: "";
  display: block;
  clear: both;
}</code></pre>
<pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;div class="clearfix"&gt;
  &lt;div style="float: right"&gt;Sidebar&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
  Content
&lt;/p&gt;</code></pre>
</div>
</div>
</p>

<blockquote>
  <p>Using <code>display: table;</code></p>
</blockquote>

<p><div class="snippet" data-lang="js" data-hide="true" data-console="true" data-babel="false">
<div class="snippet-code snippet-currently-hidden">
<pre class="snippet-code-css lang-css prettyprint-override"><code>.clearfix:after {
  content: "";
  display: table;
  clear: both;
}</code></pre>
<pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;div class="clearfix"&gt;
  &lt;div style="float: right"&gt;Sidebar&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
  Content
&lt;/p&gt;</code></pre>
</div>
</div>
</p>

<p>So my question is: What's the differences between <code>display: block;</code> and <code>display: table;</code>?</p>