A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/w3c/csswg-drafts/commit/7869dc6823e2ce9c6d816c33fb070ed5c317eb1a below:

[css-inline-3] Split text-box-edge into two properties and create a s… · w3c/csswg-drafts@7869dc6 · GitHub

@@ -957,7 +957,7 @@ Logical Heights and Inter-line Spacing</h2>

957 957

The [=block-axis=] sizing of a [=line box=]

958 958

depends on the sizes and [[#alignment|alignment]] of its [=inline-level=] contents.

959 959

This sizing is controlled by

960 -

the 'line-height', 'text-box-edge', 'text-box-trim', and 'inline-sizing' properties.

960 +

the 'line-height' and 'line-fit-edge' properties.

961 961 962 962

<h3 id="line-height-property">

963 963

Line Spacing: the 'line-height' property</h3>

@@ -1035,7 +1035,7 @@ Line Spacing: the 'line-height' property</h3>

1035 1035

See also <a href="https://github.com/w3c/csswg-drafts/issues/3118">Issue 3118</a>

1036 1036

and <a href="https://github.com/w3c/csswg-drafts/issues/2165">Issue 2165</a>.

1037 1037 1038 -

Note: When 'text-box-edge' is ''text-box-edge/leading'',

1038 +

Note: When 'line-fit-edge' is ''line-fit-edge/leading'',

1039 1039

the margins, borders, and padding of [=inline boxes=]

1040 1040

do not affect the line box’s height calculation.

1041 1041

However, they are still rendered around these boxes.

@@ -1045,11 +1045,11 @@ Line Spacing: the 'line-height' property</h3>

1045 1045

potentially obscuring earlier content.

1046 1046 1047 1047

<h3 id="text-edges">

1048 -

Inline Box Edge Metrics: the 'text-box-edge' property</h3>

1048 +

Text Edge Metrics: the 'line-fit-edge' property</h3>

1049 1049 1050 1050

<pre class="propdef">

1051 -

Name: text-box-edge

1052 -

Value: leading | [ text | cap | ex | ideographic | ideographic-ink ] [ text | alphabetic | ideographic | ideographic-ink ]?

1051 +

Name: line-fit-edge

1052 +

Value: leading | <<text-edge>>

1053 1053

Initial: leading

1054 1054

Applies to: [=inline boxes=]

1055 1055

Inherited: yes

@@ -1062,37 +1062,35 @@ Inline Box Edge Metrics: the 'text-box-edge' property</h3>

1062 1062

and might change significantly

1063 1063

as design critiques and use cases are registered

1064 1064

and various details and interactions with other properties are worked out.

1065 -

<strong>Do not implement (yet).</strong>

1065 +

<strong>Do not ship (yet).</strong>

1066 1066 1067 1067

[=Inline boxes=], whose primary purpose is to contain text,

1068 1068

are sized in the [=block axis=] based on their font metrics.

1069 -

The 'text-box-edge' property controls which metrics are used.

1070 - 1071 -

The chosen metrics are used as the basis

1069 +

The 'line-fit-edge' property controls which metrics are used.

1070 +

These chosen metrics are used as the basis

1072 1071

for the [=layout bounds=] of the [=inline box=]

1073 -

(if it is not the [=root inline box=]).

1074 -

The 'text-box-trim' property can be used in conjunction

1075 -

to match the [=content edges=] to these same metrics.

1072 +

(if it is not the [=root inline box=]);

1073 +

and also, by default, are the metrics used for 'text-box-trim'.

1074 + 1075 +

The <dfn><<text-edge>></dfn> value,

1076 +

which identifies specific font metrics,

1077 +

expands to

1078 + 1079 +

<pre class=prod>

1080 +

<<text-edge>> = [ text | cap | ex | ideographic | ideographic-ink ] [ text | alphabetic | ideographic | ideographic-ink ]?

1081 +

</pre>

1076 1082 1077 1083

The first value specifies the text [=over=] edge;

1078 1084

the second value specifies the text [=under=] edge.

1079 1085

If only one value is specified,

1080 1086

both edges are assigned that same keyword if possible;

1081 -

else ''text-box-edge/text'' is assumed as the missing value.

1087 +

else ''<<text-edge>>/text'' is assumed as the missing value.

1082 1088 1083 1089

ISSUE(5236): Do we need [=longhands=] or is this shorthand enough?

1084 1090 1085 -

Note: The ''text-box-edge/leading'' and ''text-box-edge/text'' values

1086 -

rely on the font [=ascent=] and [=descent=] to make sure the text fits.

1087 -

Other values are more likely to result in overlap or overflow

1088 -

caused by ascents above the specified metrics

1089 -

(such as for diacritics),

1090 -

so authors using these values need to be careful

1091 -

to provide sufficient spacing for the text.

1092 - 1093 1091

Values have the following meanings:

1094 1092 1095 -

<dl dfn-for="text-box-edge" dfn-type=value>

1093 +

<dl dfn-for="line-fit-edge,<<text-edge>>" dfn-type=value>

1096 1094

<dt><dfn>leading</dfn>

1097 1095

<dd>

1098 1096

Use the [=ascent=]/[=descent=] plus any positive [=half-leading=].

@@ -1124,32 +1122,36 @@ Inline Box Edge Metrics: the 'text-box-edge' property</h3>

1124 1122

Use the [=alphabetic baseline=].

1125 1123

</dl>

1126 1124 1127 -

Unless 'text-box-edge' is ''text-box-edge/leading''--

1125 +

ISSUE(8067): Is ''line-fit-edge/text'' a reasonable name for the ascent/descent metrics,

1126 +

or can we think of something better?

1127 +

Ditto ''line-fit-edge/leading'' and the name of the property itself.

1128 + 1129 +

Unless 'line-fit-edge' is ''line-fit-edge/leading''--

1128 1130

in which case the box’s own 'line-height' is used to add spacing--

1129 1131

the box’s margin, padding, and border also contribute

1130 1132

to the [=layout bounds=].

1131 1133 1132 -

Note: Although only ''text-box-edge/leading'' applies positive [=half-leading=],

1133 -

in order to allow text to be set tightly,

1134 -

all values apply negative [=half-leading=],

1135 -

see [[#inline-height]].

1136 -

Half-leading is applied equally to both sides of the text;

1137 -

for more precise overlap control authors can use

1138 -

''text-box-edge: text'' together with negative [=margins=]

1139 -

on the affected text.

1134 +

Note: The ''line-fit-edge/leading'' and ''line-fit-edge/text'' values

1135 +

rely on the font [=ascent=] and [=descent=] to make sure the text fits.

1136 +

Other values are more likely to result in overlap or overflow

1137 +

caused by ascents above the specified metrics

1138 +

(such as for diacritics),

1139 +

so authors using these values need to be careful

1140 +

to provide sufficient spacing for the text,

1141 +

particularly in multi-lingual contexts.

1140 1142 1141 1143

<figure>

1142 1144

<img src="images/text-edge.png" width="480"

1143 1145

alt="Three different values of the text-box-edge property." >

1144 1146

<figcaption>

1145 -

The 'text-box-edge' property, showing values for ''text-box-edge/leading'',

1146 -

''text-box-edge/cap'', and ''text-box-edge/ex''.

1147 +

The 'line-fit-edge' property, showing values for ''line-fit-edge/leading'',

1148 +

''line-fit-edge/cap'', and ''line-fit-edge/ex''.

1147 1149

The red lines indicate the layout bounds of the inline box.

1148 1150

</figcaption>

1149 1151

</figure>

1150 1152 1151 1153

<div class="note">

1152 -

<p>When 'text-box-edge' is ''text-box-edge/leading'',

1154 +

<p>When 'line-fit-edge' is ''line-fit-edge/leading'',

1153 1155

vertical rhythm can be broken any time there is a change

1154 1156

in font metrics or vertical alignment within a paragraph.

1155 1157

@@ -1162,21 +1164,30 @@ Inline Box Edge Metrics: the 'text-box-edge' property</h3>

1162 1164

to avoid overlap between lines.

1163 1165

</div>

1164 1166 1167 +

Note: Although only ''line-fit-edge/leading'' applies positive [=half-leading=],

1168 +

in order to allow text to be set tightly,

1169 +

all values apply negative [=half-leading=],

1170 +

see [[#inline-height]].

1171 +

Half-leading is applied equally to both sides of the text;

1172 +

for more precise overlap control authors can use

1173 +

''line-fit-edge: text'' together with negative [=margins=]

1174 +

on the affected text.

1175 + 1165 1176

<h3 id="inline-height">

1166 1177

Calculating the Logical Height Contributions (“Layout Bounds”) of Inline Boxes</h3>

1167 1178 1168 1179

The contribution of an [=inline box=] to the [=logical height=] of its [=line box=],

1169 1180

here referred to as its <dfn>layout bounds</dfn>,

1170 1181

is always calculated with respect to its own text metrics,

1171 1182

as described below,

1172 -

and is controlled by 'text-box-edge' and 'line-height'.

1183 +

and is controlled by 'line-fit-edge' and 'line-height'.

1173 1184

The sizes and positions of child boxes do not influence

1174 1185

its [=layout bounds=]

1175 1186

(nor its own [=logical height=], for that matter,

1176 1187

see 'inline-sizing').

1177 1188 1178 1189

Note: The [=layout bounds=] need not correspond

1179 -

to the box’s edges.

1190 +

to the box’s [=box/edges=].

1180 1191 1181 1192

To find the [=layout bounds=] of an [=inline box=],

1182 1193

the UA must first align

@@ -1191,13 +1202,13 @@ Calculating the Logical Height Contributions (“Layout Bounds”) of Inline Box

1191 1202

For each glyph (including the “strut”),

1192 1203

<var>A</var> represents its ascent above the [=baseline=];

1193 1204

<var>D</var> represents its descent below.

1194 -

Unless 'text-box-edge' specifies a different metric to use,

1205 +

Unless 'line-fit-edge' specifies a different metric to use,

1195 1206

<var>A</var> refers to the [=ascent metric=]

1196 1207

(for the given font at its given size)

1197 1208

and <var>D</var> to the [=descent metric=],

1198 1209

each adjusted to account for the [=dominant baseline=]’s offset from zero.

1199 1210

If 'line-height' computes to ''line-height/normal''

1200 -

and either 'text-box-edge' is ''text-box-edge/leading''

1211 +

and either 'line-fit-edge' is ''line-fit-edge/leading''

1201 1212

or this is the [=root inline box=],

1202 1213

the font’s [=line gap metric=]

1203 1214

may also be incorporated into <var>A</var> and <var>D</var>

@@ -1225,7 +1236,7 @@ Calculating the Logical Height Contributions (“Layout Bounds”) of Inline Box

1225 1236

giving an effective ascent above the baseline of

1226 1237

<var>A′</var> = <var>A</var> + <var>L</var>/2,

1227 1238

and an effective descent of <var>D′</var> = <var>D</var> + <var>L</var>/2.

1228 -

However, if 'text-box-edge' is not ''text-box-edge/leading''

1239 +

However, if 'line-fit-edge' is not ''text-box-edge/leading''

1229 1240

and this is not the [=root inline box=],

1230 1241

if the [=half-leading=] is positive, treat it as zero.

1231 1242

The [=layout bounds=] exactly encloses

@@ -1234,23 +1245,32 @@ Calculating the Logical Height Contributions (“Layout Bounds”) of Inline Box

1234 1245

Note: <var>L</var> may be negative.

1235 1246 1236 1247

Additionally,

1237 -

when 'text-box-edge' is not ''text-box-edge/leading'',

1248 +

when 'line-fit-edge' is not ''line-fit-edge/leading'',

1238 1249

the [=layout bounds=] are inflated

1239 1250

by the sum of the [=margin=], [=border=], and [=padding=]

1240 1251

on each side.

1241 1252

In order to allow negative [=margin=] values to have an actual effect,

1242 1253

negative [=margins=] are also accumulated onto

1243 -

the layout bounds of any descendant [=inline boxes=]

1254 +

the [=layout bounds=] of any descendant [=inline boxes=]

1244 1255

participating in the same [=inline formatting context=].

1245 1256 1246 1257

In Quirks Mode [[!QUIRKS]],

1247 1258

any [=inline box=] [=box fragment|fragment=]

1248 1259

that has zero borders and padding and

1249 1260

that does not directly contain text or <a>preserved white space</a> [[!CSS-TEXT-3]]

1250 -

is ignored when sizing the line box.

1261 +

is ignored when sizing the [=line box=].

1251 1262 1252 -

<h3 id="leading-trim">

1253 -

Half-Leading Control: the 'text-box-trim' property</h3>

1263 +

<h2 id="leading-trim">

1264 +

Trimming Leading Over/Under Text</h2>

1265 + 1266 +

ISSUE: This is a draft of a proposal,

1267 +

and may change significantly

1268 +

as design critiques and use cases are registered.

1269 +

Values and property names may be added, dropped, and/or renamed,

1270 +

and the overall syntax or behavior may change,

1271 +

particularly in response to authoring and robustness considerations

1272 +

for handling descendant boxes.

1273 +

<strong>Do not ship (yet).</strong>

1254 1274 1255 1275

To ensure consistent spacing in the basic case of running text,

1256 1276

CSS line layout introduces leading both above and below

@@ -1264,13 +1284,13 @@ Half-Leading Control: the 'text-box-trim' property</h3>

1264 1284

However, all this extra spacing interferes with visual alignment

1265 1285

and with control over effective (visually-apparent) spacing.

1266 1286 1267 -

The 'text-box-trim' property allows trimming

1287 +

The 'text-box' property allows trimming

1268 1288

this additional space above and below

1269 1289

the first and last lines of a block,

1270 1290

allowing more precise control over spacing around the glyphs.

1271 -

Moreover, by relying on font metrics rather than hard-coded lengths,

1272 -

it allows content to be resized, rewrapped, and rendered in a variety of fonts

1273 -

while maintaining that spacing.

1291 +

By relying on font metrics rather than hard-coded lengths,

1292 +

this feature allows content to be resized, rewrapped, and rendered in a variety of fonts

1293 +

while maintaining that precise spacing.

1274 1294 1275 1295

<div class="example">

1276 1296

<!-- Example from Weston Thayer in https://github.com/w3c/csswg-drafts/issues/3240#issuecomment-432375650 -->

@@ -1332,6 +1352,42 @@ Half-Leading Control: the 'text-box-trim' property</h3>

1332 1352

</figure>

1333 1353

</div>

1334 1354 1355 +

<h3 id="text-box-shorthand">

1356 +

Shorthand for Text Box Trimming: the 'text-box' property</h3>

1357 + 1358 +

ISSUE: This propdef table is fully expanded to evaluate and adjust the shorthand's value space.

1359 +

It simplifies down to <<text-box-trim>> || <<text-box-edge>>

1360 +

minus the ''text-box-trim/none'' and ''text-box-edge/auto'' keywords.

1361 + 1362 +

<pre class="propdef">

1363 +

Name: text-box

1364 +

Value: normal | [ start | end | both ] || [ text | cap | ex | ideographic | ideographic-ink ] [ text | alphabetic | ideographic | ideographic-ink ]?

1365 +

Initial: normal

1366 +

Applies to: [=block containers=] and [=inline boxes=]

1367 +

Inherited: no

1368 +

Percentages: N/A

1369 +

Computed value: the specified keyword

1370 +

Animation type: discrete

1371 +

</pre>

1372 + 1373 +

This property is a [=shorthand=] for setting the 'text-box-trim' and 'text-box-edge' properties

1374 +

in a single declaration.

1375 + 1376 +

If the single keyword ''text-box-edge/normal'' is specified,

1377 +

it sets 'text-box-trim' to ''text-box-trim/none''

1378 +

and 'text-box-edge' to ''text-box-edge/auto''.

1379 +

Otherwise, omitting the 'text-box-trim' value sets it to ''text-box-trim/both'' (not the initial value),

1380 +

while omitting the 'text-box-edge' value sets it to ''text-box-edge/auto'' (the initial value).

1381 + 1382 +

ISSUE(8067): We should rename the 'text-box-trim' values to add ''trim-*'' prefixes.

1383 +

This would make the shorthand clearer,

1384 +

and also make its value space consistent with 'text-spacing'.

1385 + 1386 +

ISSUE: Add examples.

1387 + 1388 +

<h3 id="text-box-trim">

1389 +

Trimming Over/Under Text: the 'text-box-trim' property</h3>

1390 + 1335 1391

<pre class="propdef">

1336 1392

Name: text-box-trim

1337 1393

Value: none | start | end | both

@@ -1343,15 +1399,6 @@ Half-Leading Control: the 'text-box-trim' property</h3>

1343 1399

Animation type: discrete

1344 1400

</pre>

1345 1401 1346 -

ISSUE: This is an early draft of a proposal,

1347 -

and is likely to change significantly

1348 -

as design critiques and use cases are registered.

1349 -

Values and property names may be added, dropped, and/or renamed,

1350 -

and the overall syntax or behavior may change,

1351 -

particularly in response to authoring and robustness considerations

1352 -

for handling descendant boxes.

1353 -

<strong>Do not implement (yet).</strong>

1354 - 1355 1402

On [=inline boxes=],

1356 1403

specifies whether to trim the [=content box=]

1357 1404

to match its corresponding 'text-box-edge' metric.

@@ -1365,12 +1412,6 @@ Half-Leading Control: the 'text-box-trim' property</h3>

1365 1412

to the corresponding 'text-box-edge' metric

1366 1413

to better match the box’s [=content edge=] to its text content.

1367 1414 1368 -

Note: Content and ink overflowing a box

1369 -

due to non-initial values of 'text-box-trim'

1370 -

is handled the same as content that would overflow the box or line box otherwise.

1371 - 1372 -

This property has no effect when 'text-box-edge' is ''text-box-edge/leading''.

1373 - 1374 1415

Values have the following meanings:

1375 1416 1376 1417

<dl dfn-for=text-box-trim dfn-type=value>

@@ -1422,6 +1463,36 @@ Half-Leading Control: the 'text-box-trim' property</h3>

1422 1463

Note: The [=block-end=] side does not coincide with the [=line-under=] side

1423 1464

when 'writing-mode' is ''vertical-lr''.

1424 1465 1466 +

Note: Content and ink overflowing a box

1467 +

due to non-initial values of 'text-box-trim'

1468 +

is handled the same as content that would overflow the box or line box otherwise.

1469 + 1470 +

<h3 id="text-box-trim">

1471 +

Text Trimming Metrics: the 'text-box-edge' property</h3>

1472 + 1473 +

<pre class="propdef">

1474 +

Name: text-box-edge

1475 +

Value: auto | <<text-edge>>

1476 +

Initial: auto

1477 +

Applies to: [=block containers=] and [=inline boxes=]

1478 +

Inherited: no

1479 +

Percentages: N/A

1480 +

Computed value: the specified keyword

1481 +

Animation type: discrete

1482 +

</pre>

1483 + 1484 +

This property specifies the metrics to use for 'text-box-trim' effects.

1485 +

Values have the same meanings as for 'line-fit-edge';

1486 +

the <dfn for=text-box-edge type=value>auto</dfn> keyword

1487 +

computes to the value of 'line-fit-edge',

1488 +

interpreting ''line-fit-edge/leading'' (the [=initial value=]) as ''line-fit-edge/text''.

1489 + 1490 +

Note: This property can be set together with 'text-box-trim'

1491 +

in the 'text-box' [=shorthand=].

1492 +

Unlike 'line-fit-edge', it does not inherit;

1493 +

however its [=initial value=] copies from 'line-fit-edge',

1494 +

which does inherit.

1495 + 1425 1496

<h3 id="line-fill">

1426 1497

Inline Box Drawing Height: the 'inline-sizing' property</h3>

1427 1498

@@ -1437,6 +1508,7 @@ Inline Box Drawing Height: the 'inline-sizing' property</h3>

1437 1508

</pre>

1438 1509 1439 1510

ISSUE(5189): This has a confusing name. We need a new name.

1511 +

Alternatively, incorporate this into 'text-box-trim'?

1440 1512 1441 1513

This property specifies how the <a>logical height</a>

1442 1514

of the <a>content area</a> of an <a>inline box</a>

@@ -2982,6 +3054,11 @@ Changes</h2>

2982 3054

Changes since the

2983 3055

<a href="https://www.w3.org/TR/2023/WD-css-inline-3-20230401/">1 April 2023 Working Draft</a>:

2984 3056

<ul>

3057 +

<li>Split 'text-box-edge' into two properties:

3058 +

'text-box-edge' for controlling the 'text-box-trim' edge

3059 +

and 'line-fit-edge' for controlling line box sizing.

3060 +

(Issues <a href="https://github.com/w3c/csswg-drafts/issues/8829">8829</a>

3061 +

and <a href="https://github.com/w3c/csswg-drafts/issues/8696">8696</a>)

2985 3062

<li>Apply negative [=block-axis=] margins to descendants of [=inline boxes=]

2986 3063

when calculating their [=layout bounds=]

2987 3064

so that they can actually have the specified effect.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4