@@ -339,6 +339,99 @@ The 'scroll-marker-group' property</h4>
339
339
the next tabindex-ordered focus navigation will focus the [=scroll target=] if it is focusable,
340
340
otherwise, it will find the next focusable element from this <var> element</var> as though it were focused.
341
341
342
+ <h2 id="scroll-buttons">
343
+ Scroll Buttons</h2>
344
+
345
+ The <dfn>::scroll-button( <<scroll-button-direction>> )</dfn> pseudo-elements
346
+ are generated on [=scroll containers=]
347
+ when their computed 'content' value is not ''content/none'' .
348
+ They generate boxes as if they were immediate children
349
+ of their [=originating element=] ,
350
+ with content as specified by 'content' .
351
+ They exist after their [=originating element's=] ''::scroll-marker-group'' pseudo-element
352
+ (when used with ''scroll-marker-group: before'' )
353
+ and before its ''::before'' pseudo-element,
354
+ if those exist.
355
+
356
+ Four distinct ''::scroll-button()'' pseudo-elements can exist on a [=scroll container=] ,
357
+ each associated with a [=logical=] direction,
358
+ based on their [=originating element's=] [=writing mode=] :
359
+ in order, [=block-start=] , [=inline-start=] , [=block-end=] , and [=inline-end=] .
360
+ The ''::scroll-button()'' pseudo-elements are both focusable and activatable by default,
361
+ with their activation behavior being to scroll their [=originating element=]
362
+ by one "page" in their associated direction,
363
+ similar to pressing PgUp/PgDn keys.
364
+ <span class=note> (Usually, this will be about 85% of the [=scrollport=] size.)</span>
365
+ Like those keys, this scroll has an [=intended direction and end position=] .
366
+
367
+ Issue: [[CSSOM-VIEW-1]] will grow a "scroll by pages" algorithm,
368
+ at which point this can reference that.
369
+ See <a href="https://github.com/w3c/csswg-drafts/issues/10914#issuecomment-2380139977">
370
+ the resolution on issue #10914</a> .
371
+
372
+ Issue: Is this the best order for the buttons?
373
+ This does match the usual ordering of logical directions in CSS,
374
+ but similar buttons created manually
375
+ are usually either ordered with verticals and horizontals each grouped together
376
+ (aka block-start/block-end then inline-start/inline-end)
377
+ or the verticals "around" the horizontals
378
+ (aka block-start/inline-start/inline-end/block-end).
379
+
380
+ The four ''::scroll-button()'' pseudo-elements are individually selected
381
+ by the selector's argument.
382
+ The possible <dfn><<scroll-button-direction>></dfn> values are:
383
+
384
+ <dl dfn-type=value for="<scroll-button-direction> , ::scroll-button()">
385
+ : <dfn>up</dfn>
386
+ : <dfn>down</dfn>
387
+ : <dfn>left</dfn>
388
+ : <dfn>right</dfn>
389
+ :: Selects the ''::scroll-button()' corresponding to the given physical direction.
390
+
391
+ : <dfn>block-start</dfn>
392
+ : <dfn>block-end</dfn>
393
+ : <dfn>inline-start</dfn>
394
+ : <dfn>inline-end</dfn>
395
+ :: Selects the indicated '' ::scroll-button()'' pseudo-element.
396
+
397
+ : <dfn>prev</dfn>
398
+ ::
399
+ Selects either the [=block-start=] or [=inline-start=] '' ::scroll-button()'',
400
+ whichever's axis has more "scrollable pages" in the [=originating element=]:
401
+ the [=originating element's=] [=scrollable overflow height=]
402
+ divided by its [=scrollport=] height,
403
+ or the same but for widths.
404
+
405
+ If both dimensions are equally sized,
406
+ selects the [=block-start=] '' ::scroll-button()''.
407
+
408
+ <p class=example>
409
+ For example, say the [=originating element=]
410
+ was 800px wide and 500px tall,
411
+ while its [=scrollable overflow area=]
412
+ was 1200px wide and 1000px tall.
413
+ The horizontal scrolling thus represents 1.5 "pages" (1200/800),
414
+ while the vertical scrolling represents 2 "pages" (1000/500),
415
+ so (assuming the element is in English)
416
+ the '' ::scroll-button(prev)'' selector
417
+ would select the [=block-start=] button.
418
+
419
+ : <dfn>next</dfn>
420
+ :: Identical to '' ::scroll-button()/prev'',
421
+ except it selects the [=block-end=] or [=inline-end=] '' ::scroll-button()'' instead.
422
+ </dl>
423
+
424
+ Issue: Do we want to add some multi-button keywords
425
+ to make it easier to style several buttons the same way?
426
+ In particular, <css>all</css> is probably useful,
427
+ but maybe also <css>horizontal</css>/<css>vertical</css>/<css>block</css>/<css>inline</css>.
428
+
429
+ The '' ::scroll-button()''s are [=fully stylable pseudo-elements=]: there is no restriction on what properties apply to them.
430
+
431
+ Issue: The UA stylesheet needs to specify that '' ::scroll-button()''s
432
+ are styled identically to the <{button}> element.
433
+
434
+
342
435
<h2 id="fragmentation" class=no-num>
343
436
Appendix A: Redirection of Overflow</h2>
344
437
0 commit comments