DTD上(HTMLの書き方のルールに当たります)では、table要素の直下には、caption要素、col要素、colgroup要素、thead要素、tfoot要素、tbody要素、tr要素以外の内容を直接書き込むことができません。 table要素直下にある、この規定の要素の以外の内容は、すべて書式違反の「ごみ」として扱われます。
また、テーブルは、中身のtr要素やtd要素などをすべて読み込んで、表示領域を確定した後でないと表示できません。 つまり、内容のセルの表示を調整する関係上、table要素の終止タグまでを認識した後でないと、テーブルの表示領域が確保できず、それまではテーブル全体が表示できないということになります。
ここからは推測ですが、このテーブルの表示領域に関係する要素を読み込んでいる際に、それらで定義されない内容が出てくると、それらはテーブルの内容ではないものとして先に処理されてしまうのではないでしょうか。 結果として、テーブルは表示領域を確保するまで表示できないので、テーブルのソース内の「ごみ」が吐き出された後に、表示領域が確定したテーブルが表示されるということなのではないかと推測します。 間違っていたらごめんなさい。
ソースの書き方としては、明確に書式違反で、問題ありです。 テーブルの上につけるキャプションを用意したいのであれば、#1の方が挙げられているようにcaption要素で用意するべきと思います。
もし良ければ、W3CのサイトでDTDなどを確認してみると良いでしょう。 参考URLは、Table要素に関する定義を解説しているページです(英語)。 DTDの読み方を解説しているページなどを探してみて、照らし合わせて解釈すると良いと思います。
参考まで。
お礼
なるほど、問題があるから上に表示されるんですね。 サイト参考にさせていただきます。 ご回答有難うございました 遅れてすみません