Scroll Controller Properties proposal

Currently the CSS Basic User Interface module is silent in discussing 
exactly what happens when a scroll controller is used, leaving it up to 
the user agent to decide. These proposed properties are designed to 
give an author more control over this. This proposal does not touch on 
controlling the appearance of scroll controls. This proposal could 
probably use someone more versed in the nuances of the terminolgy used 
in CSS to clean things up, especially in the defining what the char 
value does for the scroll0amount properties.

CONTROLLING HOW MUCH GETS SCROLLED

scroll-amount:
scroll-amount-x:
scroll-amount-y:

Values: <length> | char | child | line | system | table-cell | table-
group | inherit
Default: system

The values of <length>, system, and inherit apply to all objects.

<length> : Move the visible region up, down, left, or right by the 
specified <length> for each scroll event.

system : Move the visible region up, down, left, or right by the an 
amount determined by the system for each scroll event. The amount may 
be different for different elements.

The values of char, child, and line apply only to objects whose display-
type is either block-inside or inline-inside.

char: A position marker is kept indicating where the displayed content 
is to begin. This marker is to be moved one character towards the 
beginning of the content on a left or up scroll, and one character 
towards the end of the content for each right or down scroll.

child: This uses the same position marker as char. On a left or up 
scroll, then the marker is moved to the next start of a child node 
closer to the beginning of the content. On a right or down scroll, then 
the marker is moved to the next end of a child node closer to the end 
of the content.

line: A position marker is kept, different from the one for char and 
child. This marker is moved one line toward the beginning of content on 
a left or up scroll, and one line toward the end of content on a right 
or down scroll.

When both position markers are used, then first the char/child marker 
is applied then the line marker. If it were done in the other order, 
then lines would need to be rerendered when the line scroll is 
incremented or decremented which is neither efficient nor the expected 
effect. Neither marker can have a negative value. Values which would 
cause no content to be rendered should be reduced to a value where at 
least some content is rendered. The line marker should be reduced first 
and then the char/child marker as needed.

Two additional values should be defined as part of the Table module, as 
they apply only to table elements.

table-cell : This value apples only to an object with a display-role of 
table, table-row-group, or table-col-group. Move the visible region up, 
down, left or right by one row or column for each scroll event.

table-group : This value apples only to an object with a display-role 
of table. Move the visible region up, down, left or right by one row 
group or column group for each scroll event.

CONTROLLING WHICH PARTS OF A TABLE SCROLL

Since this applies only to tables, this property should be part of the 
Table module

scroll-table:

Values: all | body | data | matrix | system | table | inherit
Default: system

This value applies only to objects with a display-role of table.

all : The entire table should be scrolled.

body : The table caption should not be scrolled at all. The table 
footer row group and table header row group should not be scrolled 
vertically. If the nonscrolling elements by themselves would leave no 
room for the body to scroll, or if a user agent does not support this 
option, then this value should be treated as if it were table.

data: In addition to the restrictions given by matrix, any table header 
cell which has at least one data cell present in the visible region 
nust be displayed. If the elements required to be displayed by this 
value could leave no room for the data to scroll, or if the user agent 
does not support this option then this value should be treated as if it 
were matrix. In determining whether no room could be left, user agents 
may use any algorithm that catches all cases where no room would be 
left, even if that algorithm causes some instances where falling back 
to body is not necessary. This is because if the scope of a header cell 
is something other than a row or column, it can be computationaly 
expensive to use an algorithm which determines this only in the cases 
where insufficient space would be left.

matrix: In addition to the restrictions given by body, any row which 
contains a table header cell with a scope of column should not be 
scrolled vertically, and any column which contains a table header cell 
with a scope of row. If the nonscrolling elements by themselves would 
leave no room for the scrolling elements, or if a user agent does not 
support this option, then this value should be treated as if it were 
body.

system : The table should be scrolled in a system defined manner.

table : The table caption should not be scrolled as part of the table. 
If the caption by itself would leave no space for the table to 
scrolled, or if the user agent does not support this option, then this 
value should default to all.

Received on Tuesday, 4 March 2003 02:20:12 UTC