ここでも、サーバー側の言語がどのように機能するかを理解する必要があります。
すべてのASP.NETタグは、ページがレンダリングされる前に、サーバー側のプリプロセッサによってブラウザが理解できるHTMLに変換されます(たとえば、ブラウザには<asp:button>が何であるかはわかりません)。これは、 HTMLだけでなくASP.NETによって提供されるすべてのコントロール/モジュール/すべてがこれらの属性を持つ必要があることを意味します。
私は、プリプロセッサが元々、その属性の存在に基づいて何に基づいて動作する必要があるかを知るために作成されたと思います。そうしないと、何もしなかったとしても、すべてのタグを処理する必要があります。名前空間を検索するように作成することもできますが、追加の処理が必要になります。
スキンファイルは、フレームワーク内で定義されたタグ用の特別なASP.NETの概念です。したがって、これらのタグには「runat=server」が必要です。MSは、「スキンファイルの場合は、すべてASPタグであると想定する」などの特別なルールをプリプロセッサに書き込むことができますが、そのようなルールは実際には拡張できません。さらに、それらは悪いドキュメントです。
Web開発者は、どのタグが実際にHTMLであり、どのタグがフレームワークによって提供される便利なタグであるかを理解する必要があります。この"runat=server"属性により、その描写が明確になります。
runat = "server"を<input>などのプレーンなHTMLタグに追加できますが、一般的に理由はほとんどなく、これは悪い習慣です。
移植性を向上させるために、スキンファイルから離れてCSSを活用することを検討することをお勧めします。属性はスタイルの設定に非常に冗長であるため、最終的にレンダリングされるページが大きくなり(読み込みに時間がかかり、ユーザーエクスペリエンスが低下します)、意味がなくなります。