DataList 控件默認渲染為 <table>,列寬由內容撐開,難以精確控制。需固定列寬實現整齊對齊。
使用 ItemStyle-Width 和 ItemStyle-Height 屬性直接設置單元格樣式:
<asp:DataList ID="DataList1" runat="server"
RepeatColumns="3"
RepeatDirection="Horizontal"
Width="100%"
ItemStyle-Width="33%"
ItemStyle-Height="100px"
OnItemDataBound="DataList1_ItemDataBound"
OnEditCommand="DataList1_EditCommand"
OnUpdateCommand="DataList1_UpdateCommand">
<ItemTemplate>
<div class="item-box">
<%# Eval("Title") %>
</div>
</ItemTemplate>
</asp:DataList>
<table id="DataList1" style="width:100%;">
<tr>
<td style="width:33%; height:100px;">...</td>
<td style="width:33%; height:100px;">...</td>
<td style="width:33%; height:100px;">...</td>
</tr>
</table>
ItemStyle-Width="200px":固定寬度,適合已知內容ItemStyle-Width="25%":自適應容器,配合 RepeatColumns="4"<asp:DataList ... ItemStyle-CssClass="dl-item" >
.dl-item {
width: 250px;
height: 150px;
vertical-align: top;
padding: 5px;
border: 1px solid #ddd;
box-sizing: border-box; /* 含 padding/border 在寬高內 */
}
<ItemTemplate>
<div class="item-content">
<h4><%# Eval("Title") %></h4>
<p><%# Eval("Summary") %></p>
</div>
</ItemTemplate>
.item-content {
width: 100%;
height: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap; /* 單行省略 */
/* 多行省略需 -webkit-line-clamp */
}
@media (max-width: 768px) {
#DataList1 .dl-item { width: 50%; } /* 兩列 */
}
@media (max-width: 480px) {
#DataList1 .dl-item { width: 100%; } /* 單列 */
}
| 問題 | 原因 | 解決 |
|---|---|---|
| 寬度不生效 | 表格布局算法、內容撐開 | 設置 table-layout: fixed 於 DataList 或外層容器 |
| 高度不一致 | 內容高度不同 | ItemStyle-Height + overflow:hidden / flex 等高 |
| 編輯模板寬度異常 | EditItemStyle 未設置 | 同時設置 EditItemStyle-Width / CssClass |
ItemStyle-CssClass 分離樣式table-layout: fixed 強制表格遵守寬度box-sizing: border-box 防止撐開