MathML:mstyle
The mstyle element is used to make style changes that affect the rendering of its contents. However, CSS may be more appropriate for that purpose e.g. mstyle attributes apply only to the descendants while it would be more convenient to specify a style of mathematics in an external style sheet. Some mstyle attributes may not really be useful in practice (for example, the MathML 3 spec mentions indentation attributes) and we could also ask the MathML WG to remove some of them. Finally, some mstyle attributes are implemented on the layout side (using GetAttribute and data propagation). The method seems less efficient than the standard CSS inheritance and has been the cause of many bugs. This document enumerates the mstyle attributes (based on the MathML RelaxNG schema) and suggests a way to rely on the standard CSS mechanism to address these problems.
The mstyle inheritance mechanism is not exactly the same as CSS. The MathML REC distinguishes three cases:
- "Some attributes, such as displaystyle or scriptlevel (explained below), are inherited from the surrounding context when they are not explicitly set. [...] ". This is the standard CSS inheritance. Most of these attributes are already mapped to style in nsMathMLElement or mathml.css, sometimes with the help of new -moz-* CSS properties.
- "Other attributes, such as linethickness on mfrac, have default values that are not normally inherited [...]". Most of these attributes are handled on the layout/ side using GetAttribute. This method could be replaced by the use of -moz-mstyle-* properties. Calls to GetAttribute will be replaced by calls to the corresponding GetStyle* functions.
- "Another group of attributes, such as stretchy and form, are computed from operator dictionary information, position in the enclosing mrow, and other similar data. [...]". This can be handle the same way as the second case, except that we have to take into account other data for the final computation.
Note: attributes from the first category and general attributes (like id) are indicated in bold. They seem the most important attributes but the MathML testsuite also uses linethickness, maxsize, minsize, accent, accentunder, longdivstyle, decimalpoint and some indentation attributes.
Attribute | Description | Status | Suggestion |
---|---|---|---|
id | Establishes a unique identifier associated with the element to support
linking, cross-references and parallel markup. |
Implemented | / |
class | Associates the element with a set of style classes for use with XSLT and
CSS21. |
Implemented | / |
style | Associates style information with the element for use with XSLT and CSS21. | Implemented | / |
href | Can be used to establish the element as a hyperlink to the specfied URI. | Implemented | / |
xref | References another element within the document. | Not implemented | / |
other | Attribute used for non-standard extension. | Deprecated. | / |
mathcolor | Specifies the foreground color to use when drawing the components of this
element. |
Implemented in nsMathMLElement via the CSS property "color" | / |
mathbackground | Specifies the background color to be used to fill in the bounding box of the
element and its children. Contrary to MathML 2, this does not specify a default background color but the background of the element itself. |
Implemented in nsMathMLElement via the CSS property "background" | / |
scriptlevel | Changes the scriptlevel in effect for the children. | Implemented via the CSS property "-moz-script-level" | / |
displaystyle | Changes the displaystyle in effect for the children. | Implemented via a mPresentationData on the MathML frames. | Use a new CSS property "-moz-display-style" and remove the data
in mPresentationData |
scriptsizemultiplier | Specifies the multiplier to be used to adjust font size due to changes in
scriptlevel. |
Implemented via the CSS property "-moz-script-size-multiplier" | / |
scriptminsize | Specifies the minimum font size allowed due to changes in scriptlevel. | Implemented via the CSS property "-moz-script-min-size" | / |
infixlinebreakstyle | Specifies the default linebreakstyle to use for infix operators | Not Implemented. | Implement it via a new CSS property "-moz-line-break-style" |
decimalpoint | Specifies the character used to determine the alignment point within mstack
and mtable columns when the "decimalpoint" value is used to specify the alignment. |
Not implemented. | Implement it via a new CSS property "-moz-decimal-point" |
accent | Specifies whether overscript is drawn as an "accent" or as a limit. | Implemented in nsMathMLmunderoverFrame via GetAttribute. | Replace GetAttribute by a new CSS property "-moz-mstyle-accent" |
accentunder | Specifies whether underscript is drawn as an "accent" or as a limit. | Implemented in nsMathMLmunderoverFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-accentunder" |
align | Specifies whether the scripts are aligned left, center, or right under/over
the base. Apply to munder, mover, and munderover descendants. |
Implemented in nsMathMLmunderoverFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-align" |
alignmentscope | This attribute is described with the alignment elements, maligngroup and
malignmark |
Not Implemented | Implement it via a new CSS property "-moz-mstyle-alignmentscope" |
bevelled | Specifies whether the fraction should be displayed in a beveled style, rather
than "build up" vertically. |
Implemented in nsMathMLmfracFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-bevelled" |
charalign | Specifies the horizontal alignment of digits within a column. | Not Implemented | Implement it via a new CSS property "-moz-mstyle-charalign" |
charspacing | Specifies the amount of space to put between each column. | Not Implemented | Implement it via a new CSS property "-moz-mstyle-charspacing" |
close | Specifies the closing delimiter. | Implemented nsMathMLmfencedFrame in via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-close" |
columnalign | Specifies the horizontal alignment of the cells with respect to other cells
within the same column. Apply to mtable descendants. |
Implemented but see bug 768819. Also, relies on a private _moz-*
attribute that should be removed (see bug 731667). |
Implement it via a new CSS property "-moz-mstyle-column-align" |
columnlines | Specifies whether and what kind of lines should be added between each column | Implemented but see bug 768819. Also, relies on a private _moz-*
attribute that should be removed (see bug 731667). |
Implement it via a new CSS property "-moz-mstyle-column-lines" |
columnspacing | Specifies how much space to add between columns | Not implemented (see bug 330964). | Implement it via a new CSS property "-moz-mstyle-column-spacing" |
columnspan | Causes the cell to be treated as if it occupied the number of columns
specified |
Implemented but see bug 768819. | Implement it via a new CSS property "-moz-mstyle-column-span". |
columnwidth | Specifies how wide a column should be: "auto" means that the column should be
as wide as needed |
Not implemented. | Implement it via a new CSS property "-moz-mstyle-column-width". |
crossout | specifies how the column content below each carry is "crossed out"; | Not Implemented | Implement it via a new CSS property "-moz-mstyle-crossout". |
denomalign | Specifies the alignment of the denominator under the fraction. | Implemented in nsMathMLmfracFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-mfrac". |
depth | Specifies the desired depth of the space. Apply to mspace descendants. | Implemented in nsMathMLmspaceFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-depth". |
dir | Specifies the overall directionality ltr (Left To Right) or rtl
(Right To Left) to use to layout the children of the row ; |
Implemented via a mPresentationData on the MathML frames. | Use the CSS property "direction" and remove the data in mPresentationData.
See bug 764996 |
edge | Specifies whether the alignment point will be found on the left or right edge
of some element or character. |
Not Implemented | Implement it via a new CSS property "-moz-mstyle-edge" |
equalcolumns | Specifies whether to force all columns to have the same total width. | Not Implemented | Implement it via a new CSS property "-moz-mstyle-equalcolumns" |
equalrows | Specifies whether to force all rows to have the same total height. | Not Implemented | Implement it via a new CSS property "-moz-mstyle-equalrows" |
fence | Specifies whether the operator represents a ‘fence’, such as a parenthesis. | Implemented in nsMathMLmoFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-fence" |
form | Specifies the role of the operator in the enclosing expression. | Implemented in nsMathMLmoFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-movablelimits" |
frame | Specifies whether and what kind of lines should be drawn around the table. | Implemented in mathml.css but see bug 768819 | Implement it via a new CSS property "-moz-mstyle-frame" |
framespacing | Specifies the additional spacing added between the table and frame, if frame
is not "none" |
Not implemented. | Implement it via a new CSS property "-moz-mstyle-column-width". |
groupalign | Apply to mtable descendants.
This attribute is described with the alignment elements, maligngroup and malignmark |
Not Implemented | Implement it via a new CSS property "-moz-mstyle-groupalign" |
height | Specifies the desired height of the space. Apply to mspace descendants. | Implemented in nsMathMLmspaceFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-height". |
indentalign | Specifies the positioning of lines when linebreaking takes place within an
mrow |
Not Implemented | Ask the MathML WG to remove this attribute on mstyle?
"Note that except for cases where heavily marked-up manual linebreaking is desired, many of these attributes are most useful when bound on an mstyle or math element." |
indentalignfirst | Specifies the indentation style to use for the first line of a formula | Not Implemented | Ask the MathML WG to remove this attribute on mstyle? |
indentalignlast | Specifies the indentation style to use for the last line when a linebreak
occurs within a given mrow; |
Not Implemented | Ask the MathML WG to remove this attribute on mstyle? |
indentshift | Specifies an additional indentation offset relative to the position
determined by indentalign. |
Not Implemented | Ask the MathML WG to remove this attribute on mstyle? |
indentshiftfirst | Specifies the offset to use for the first line of a formula; | Not Implemented | Ask the MathML WG to remove this attribute on mstyle? |
indentshiftlast | Specifies the offset to use for the last line when a linebreak occurs within
a given mrow; |
Not Implemented | Ask the MathML WG to remove this attribute on mstyle? |
indenttarget | Specifies the id of another element whose horizontal position determines the
position of indented lines when indentalign="id". |
Not Implemented | Ask the MathML WG to remove this attribute on mstyle? |
largeop | Specifies whether the operator is considered a ‘large’ operator | Implemented in nsMathMLmoFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-largeop" |
leftoverhang | Specifies an extra amount that the line should overhang on the left of the
leftmost column spanned by the line. |
Not implemented | Implement it via a new CSS property "-moz-mstyle-rightoverhang". |
length | Specifies the the number of columns that should be spanned by the line. | Not Implemented | Implement it via a new CSS property "-moz-mstyle-length" to
specify a default value. |
linebreak | Specifies the desirability of a linebreak at a <mo> or <mspace> | Not Implemented | Ask the MathML WG to remove this attribute? |
linebreakmultchar | Specifies the character used to make an ⁢ operator visible at
a linebreak. |
Not Implemented | Implement it via a new CSS property "-moz-mstyle-line-break-multchar" to
specify a default value. |
linebreakstyle | Specifies whether a linebreak occurs ‘before’ or ‘after’ the operator when a
linebreaks occur on this operator; or whether the operator is duplicated |
Not Implemented | Implement it via a new CSS property "-moz-mstyle-line-break-style" to
specify a default value. |
lineleading | Specifies the amount of vertical space to use after a linebreak. | Not Implemented | Implement it via a new CSS property "-moz-mstyle-line-leading" to
specify a default value. |
linethickness | Specifies the thickness of the horizontal "fraction bar", or "rule" | Implemented in nsMathMLmfracFrame via GetAttribute
Replace GetAttribute by a new CSS property "-moz-mstyle-line-thickness" to specify a default value. | |
location | Specifies the location of the carry or borrow relative to the character below
it in the associated column |
Not implemented | Implement it via a new CSS property "-moz-mstyle-location". |
longdivstyle | Controls the style of the long division layout. | Not implemented | Implement it via a new CSS property "-moz-mstyle-longdivstyle". |
lquote | Specifies the opening quote to enclose the content. | Implemented in nsMathMLmoFrame via GetAttribute but see bug 656391
and bug 560100 |
Implement it via a new CSS property "-moz-mstyle-lquote". |
lspace | Specifies the leading space appearing before the operator.
Apply to mo descendants. |
Implemented in nsMathMLmoFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-lspace" |
mathsize | Specifies the size to display the token content. | Implemented in nsMathMLElement via the CSS property "font-size". | / |
mathvariant | Specifies the logical class of the token | Partially Implemented in mathml.css (see bug 114365). Also, relies on the
private _moz-math-font-style attribute that should be removed (bug 69409). |
Determine the best way to implement this attribute and the mstyle
inheritance. |
maxsize | Specifies the maximum size of the operator when stretchy; | Implemented in nsMathMLmoFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-maxsize" |
minlabelspacing | Specifies the minimum space allowed between a label and the adjacent cell in
the row. |
Not Implemented | Implement it via a new CSS property "-moz-mstyle-minlabelspacing" |
minsize | Specifies the minimum size of the operator when stretchy; | Implemented in nsMathMLmoFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-minsize" |
movablelimits | Specifies whether under- and overscripts attached to this operator ‘move’ to
the more compact sub- and superscript positions when displaystyle is false |
Implemented in nsMathMLmoFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-movablelimits" |
mslinethickness | Specifies how thick the line should be drawn. | Not Implemented | Implement it via a new CSS property "-moz-mstyle-mslinethickness" |
notation | Specifies a space separated list of notations to be used to enclose the
children. |
Implemented in nsMathMLmencloseFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-notation" |
numalign | Specifies the alignment of the numerator over the fraction. | Implemented in nsMathMLmfracFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-bevelled" |
open | Specifies the opening delimiter. | Implemented nsMathMLmfencedFrame in via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-open" |
position | specifies the horizontal position of the rows within this group relative the
position determined by the containing msgroup |
Not Implemented | Implement it via a new CSS property "-moz-mstyle-position". |
rightoverhang | Specifies an extra amount that the line should overhang on the right of the
rightmost column spanned by the line. |
Not implemented | Implement it via a new CSS property "-moz-mstyle-rightoverhang". |
rowalign | Specifies the vertical alignment of the cells with respect to other cells
within the same row. Apply to mtable descendants. |
Implemented but see bug 768819. Also, relies on a private _moz-*
attribute that should be removed (see bug 731667). |
Implement it via a new CSS property "-moz-mstyle-row-align" |
rowlines | Specifies whether and what kind of lines should be added between each row | Implemented but see bug 768819. Also, relies on a private _moz-*
attribute that should be removed (see bug 731667). |
Implement it via a new CSS property "-moz-mstyle-row-lines" |
rowspacing | Specifies how much space to add between rows. | Not implemented (see bug 330964). | Implement it via a new CSS property "-moz-mstyle-row-spacing" |
rowspan | Causes the cell to be treated as if it occupied the number of rows specified. | Implemented but see bug 768819. | Implement it via a new CSS property "-moz-mstyle-column-span". |
rquote | Specifies the closing quote to enclose the content. | Implemented in nsMathMLmoFrame via GetAttribute but see bug 656391
and bug 560100 |
Implement it via a new CSS property "-moz-mstyle-rquote". |
rspace | Specifies the trailing space appearing after the operator. | Implemented in nsMathMLmoFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-rspace" |
selection | Specifies which child should be used for viewing. Its value should be between
1 and the number of children of the element. |
Implemented in nsMathMLmactionFrame via GetAttribute but see bug 734729 | Replace GetAttribute by a new CSS property "-moz-mstyle-selection" |
separator | Specifies whether the operator represents a ‘separator’, or punctuation. | Implemented in nsMathMLmoFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-separator" |
separators | Specifies a sequence of zero or more separator characters, optionally
separated by whitespace. |
Implemented nsMathMLmfencedFrame in via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-separators" |
shift | Specifies an incremental shift of position for successive children (rows or
groups) within this group. |
Not Implemented | Implement it via a new CSS property "-moz-mstyle-shift" |
side | Specifies on what side of the table labels from enclosed mlabeledtr (if any)
should be placed. |
Not Implemented. | Implement it via a new CSS property "-moz-mstyle-side" |
stackalign | Specifies which column is used to horizontally align the rows. | Not Implemented | Implement it via a new CSS property "-moz-mstyle-stackalign" |
stretchy | Specifies whether the operator should stretch to the size of adjacent material | Implemented in nsMathMLmoFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-symmetric" |
subscriptshift | Specifies the minimum amount to shift the baseline of subscript down; | Implemented in nsMathMLmsubsupFrame (and similar frames) via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-subscriptshift" |
superscriptshift | Specifies the minimum amount to shift the baseline of superscript up; | Implemented in nsMathMLmsubsupFrame (and similar frames) via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-superscriptshift" |
symmetric | Specifies whether the operator should be kept symmetric around the math axis
when stretchy. |
Implemented in nsMathMLmoFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-symmetric" |
valign | Specifies the baseline alignment point of the image with respect to the
current baseline. |
Not implemented | Ask the MathML WG to remove this element on mstyle? Other mglyph attributes
like width or height do not apply on mglyph descendants. |
width | Specifies the desired width of the space. Apply to mspace descendants. | Implemented in nsMathMLmspaceFrame via GetAttribute | Replace GetAttribute by a new CSS property "-moz-mstyle-width" |
fontfamily | Should be the name of a font that may be available to a MathML renderer, or a
CSS font specification. Does not apply to mglyph descendants. |
Deprecated.
Implemented in nsMathMLElement via the CSS property "font-family". |
Add a warning (bug 553917) and remove the support in future. |
fontweight | Specified the font weight for the token. | Deprecated in favor of mathvariant.
Implemented in mathml.css via the CSS property "font-weight". This property is also set by the private _moz-math-font-style attribute that should be removed (bug 69409). |
Add a warning and remove the support in future. |
fontstyle | Specified the size for the token. | Deprecated in favor of mathvariant.
Implemented in mathml.css. This property is also set by the private _moz-math-font-style attribute that should be removed (bug 69409). |
Add a warning and remove the support in future. |
fontsize | Specified the size for the token. | Deprecated in favor of mathsize.
Implemented in nsMathMLElement via the CSS property "font-size". |
Add a warning (bug 553917) and remove the support in future. |
color | Specified the color for the token. | Deprecated in favor of mathcolor.
Implemented in nsMathMLElement via the CSS property "color". |
Add a warning (bug 553917) and remove the support in future. |
background | Specified the background color to be used to fill in the bounding box of the
element and its children. |
Deprecated in favor of mathbackground.
Implemented in nsMathMLElement via the CSS property "background". |
Add a warning (bug 553917) and remove the support in future. |
veryverythinmathspace | Binding of namedspaces to new values. | Deprecated. Support removed in bug 673759. | / |
verythinmathspace | Binding of namedspaces to new values. | Deprecated. Support removed in bug 673759. | / |
thinmathspace | Binding of namedspaces to new values. | Deprecated. Support removed in bug 673759. | / |
mediummathspace | Binding of namedspaces to new values. | Deprecated. Support removed in bug 673759. | / |
thickmathspace | Binding of namedspaces to new values. | Deprecated. Support removed in bug 673759. | / |
verythickmathspace | Binding of namedspaces to new values. | Deprecated. Support removed in bug 673759. | / |
veryverythickmathspace | Binding of namedspaces to new values. | Deprecated. Support removed in bug 673759. | / |