Change standards mode height calculations for table cells to use content-box sizing rather than border-box sizing by default (and to honor -moz-box-sizing, which we do not do in quirks mode). Also remove -moz-box-sizing: border-box from default style for caption element (all modes). (Bug 248239) r=dbaron

This commit is contained in:
Tal Aloni 2012-06-26 16:24:23 -07:00
parent ce957c9c8b
commit bded505e94
7 changed files with 30 additions and 7 deletions

View File

@ -10,6 +10,7 @@ td, th {
background-color: lime; background-color: lime;
width:100px; width:100px;
height:100px; height:100px;
-moz-box-sizing:border-box;
} }
td { td {
border-top: 4px solid lime; border-top: 4px solid lime;

View File

@ -11,6 +11,7 @@ td, th {
width:100px; width:100px;
height:100px; height:100px;
border:4px solid lime; border:4px solid lime;
-moz-box-sizing:border-box;
} }
td { td {
border-top:hidden; border-top:hidden;

View File

@ -9,10 +9,10 @@ div {position:absolute; border:green 4px solid}
</head> </head>
<body> <body>
<!-- the height for table cells includes the border --> <!-- in standards mode, the height for table cells does not includes the border -->
<div> <div>
<table cellspacing="0"> <table cellspacing="0">
<tr><td style="border:solid 4px orange; height:34px">cell 1</td></tr> <tr><td style="border:solid 4px orange; height:30px">cell 1</td></tr>
</table> </table>
</div> </div>
</body> </body>

View File

@ -13,7 +13,7 @@ caption {border:solid 4px green}
</head> </head>
<body> <body>
<!-- by default, td has padding of 1px -->
<table style="border-collapse:collapse;"><caption>caption</caption> <table style="border-collapse:collapse;"><caption>caption</caption>
<tr><td style="border:solid 4px orange; height:30px">cell 1</td></tr> <tr><td style="border:solid 4px orange; height:30px">cell 1</td></tr>
</table> </table>

View File

@ -13,7 +13,7 @@ caption {border:solid 4px green}
<table cellspacing="0" cellpadding="0"><caption>caption</caption> <table cellspacing="0" cellpadding="0"><caption>caption</caption>
<tr> <tr>
<td style="border:solid 4px orange; width:102px; height:34px">cell 1</td> <td style="border:solid 4px orange; width:102px; height:32px">cell 1</td>
</tr> </tr>
</table> </table>
</body> </body>

View File

@ -393,7 +393,6 @@ table[rules][rules="groups"] > tbody {
caption { caption {
display: table-caption; display: table-caption;
text-align: center; text-align: center;
-moz-box-sizing: border-box;
} }
table[align="center"] > caption { table[align="center"] > caption {

View File

@ -607,11 +607,33 @@ nsTableRowFrame::CalculateCellActualHeight(nsTableCellFrame* aCellFrame,
PRInt32 rowSpan = tableFrame->GetEffectiveRowSpan(*aCellFrame); PRInt32 rowSpan = tableFrame->GetEffectiveRowSpan(*aCellFrame);
switch (position->mHeight.GetUnit()) { switch (position->mHeight.GetUnit()) {
case eStyleUnit_Coord: case eStyleUnit_Coord: {
specifiedHeight = position->mHeight.GetCoordValue(); nscoord outsideBoxSizing = 0;
// In quirks mode, table cell width should be content-box, but height
// should be border-box.
// Because of this historic anomaly, we do not use quirk.css
// (since we can't specify one value of box-sizing for width and another
// for height)
if (PresContext()->CompatibilityMode() != eCompatibility_NavQuirks) {
switch (position->mBoxSizing) {
case NS_STYLE_BOX_SIZING_CONTENT:
outsideBoxSizing = aCellFrame->GetUsedBorderAndPadding().TopBottom();
break;
case NS_STYLE_BOX_SIZING_PADDING:
outsideBoxSizing = aCellFrame->GetUsedBorder().TopBottom();
break;
default:
// NS_STYLE_BOX_SIZING_BORDER
break;
}
}
specifiedHeight = position->mHeight.GetCoordValue() + outsideBoxSizing;
if (1 == rowSpan) if (1 == rowSpan)
SetFixedHeight(specifiedHeight); SetFixedHeight(specifiedHeight);
break; break;
}
case eStyleUnit_Percent: { case eStyleUnit_Percent: {
if (1 == rowSpan) if (1 == rowSpan)
SetPctHeight(position->mHeight.GetPercentValue()); SetPctHeight(position->mHeight.GetPercentValue());