リフレクタを使用すると、各コントロールがタグ「span」および「a」を使用してレンダリングされた Web コントロールを継承することがわかります。
Protected Overridable Sub AddAttributesToRender(ByVal writer As HtmlTextWriter)
...
If (Me.TagKey = HtmlTextWriterTag.Span OrElse Me.TagKey = HtmlTextWriterTag.A) Then
Me.AddDisplayInlineBlockIfNeeded(writer)
End If
.....
End Sub
Friend Sub AddDisplayInlineBlockIfNeeded(ByVal writer As HtmlTextWriter)
Dim isEmpty As Boolean = False
If (Not Me.RequiresLegacyRendering OrElse Not MyBase.EnableLegacyRendering) Then
If (Me.BorderStyle = BorderStyle.NotSet) Then
Dim borderWidth As Unit = Me.BorderWidth
If (borderWidth.IsEmpty) Then
Dim height As Unit = Me.Height
If (height.IsEmpty) Then
Dim width As Unit = Me.Width
isEmpty = width.IsEmpty
End If
End If
End If
If (Not isEmpty) Then
writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "inline-block")
End If
End If
End Sub
スタイルの適用を避けるにdisplay:inline-block
は、2 つのオプションがあります
1- 次のコードを web.config に追加して、レガシー レンダリングを強制します。
<system.web>
<xhtmlConformance mode="Legacy"/>
</system.web>
2-メソッドAddAttributesToRenderをオーバーライドし、変数で幅を取得し、コントロールの幅を空の値に設定してから、base.AddAttributesToRender(writer)を実行し、設定されている場合は幅を追加します
protected override void AddAttributesToRender(System.Web.UI.HtmlTextWriter writer)
{
Unit width = this.Width;
this.Width = new Unit();
base.AddAttributesToRender(writer);
if (!width.IsEmpty)
writer.AddStyleAttribute("width", width.ToString);
}