mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 06:35:42 +00:00
468 lines
15 KiB
CSS
468 lines
15 KiB
CSS
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
|
/**************************************************************************/
|
|
/* namespace for MathML elements */
|
|
/**************************************************************************/
|
|
|
|
@namespace url(http://www.w3.org/1998/Math/MathML);
|
|
|
|
/**************************************************************************/
|
|
/* <math> - outermost math element */
|
|
/* Put Cambria before Cambria Math as Cambria Math has neither bold nor */
|
|
/* italic. */
|
|
/**************************************************************************/
|
|
|
|
math {
|
|
direction: ltr;
|
|
unicode-bidi: embed;
|
|
display: inline;
|
|
font-size: inherit;
|
|
font-style: normal;
|
|
font-family: MathJax_Main, STIXGeneral, DejaVu Serif, DejaVu Sans, Cambria, Cambria Math, Times, Lucida Sans Unicode, OpenSymbol, Standard Symbols L, serif;
|
|
text-rendering: optimizeLegibility;
|
|
-moz-float-edge: margin-box;
|
|
}
|
|
math[mode="display"], math[display="block"] {
|
|
display: block;
|
|
text-align: -moz-center;
|
|
}
|
|
math[display="inline"] {
|
|
display: inline;
|
|
}
|
|
|
|
/**************************************************************************/
|
|
/* Style switching during frame construction depending on the context of <mi>:
|
|
These rules are not used when mathvariant or fontstyle is specified
|
|
explicitly.
|
|
/**************************************************************************/
|
|
|
|
/* If the textual content of an <mi> consists of a single character
|
|
with a corresponding mathematical italic alphanumeric character,
|
|
then try to emulate that character */
|
|
[_moz-math-font-style="italic"] {
|
|
font-style: italic;
|
|
font-weight: normal;
|
|
}
|
|
/* If the textual content consists of multiple characters, then the default is
|
|
mathvariant=normal. It seems that mathvariant=normal should be interpreted
|
|
to mean non-slanted:
|
|
|
|
http://www.w3.org/TR/2003/REC-MathML2-20031021/chapter3.html#presm.commatt
|
|
|
|
"In particular, inheritance of the mathvariant attribute does not follow
|
|
the CSS model. The default value for this attribute is "normal"
|
|
(non-slanted) for all tokens except mi. ... (The deprecated fontslant
|
|
attribute also behaves this way.)"
|
|
*/
|
|
[_moz-math-font-style="normal"] {
|
|
font-style: normal;
|
|
}
|
|
/* A style-invariant character preserves its own style */
|
|
[_moz-math-font-style="invariant"] {
|
|
font-style: normal;
|
|
font-weight: normal;
|
|
}
|
|
|
|
/**************************************************************************/
|
|
/* Links */
|
|
/**************************************************************************/
|
|
:-moz-any-link {
|
|
text-decoration: none !important;
|
|
}
|
|
|
|
/**************************************************************************/
|
|
/* attributes common to all tags */
|
|
/**************************************************************************/
|
|
|
|
/* deprecated attributes from MathML 1.0 */
|
|
|
|
/* fontstyle */
|
|
[fontstyle="normal"] {
|
|
font-style: normal;
|
|
}
|
|
[fontstyle="italic"] {
|
|
font-style: italic;
|
|
}
|
|
/* fontweight */
|
|
[fontweight="normal"] {
|
|
font-weight: normal;
|
|
}
|
|
[fontweight="bold"] {
|
|
font-weight: bold;
|
|
}
|
|
|
|
/* attributes from MathML 2.0 */
|
|
|
|
/* These ones are handled in the back-end:
|
|
mathcolor (replaces 'color'):
|
|
#rgb | #rrggbb | html-color-name
|
|
mathbackground (replaces 'background'):
|
|
#rgb | #rrggbb | html-color-name
|
|
*/
|
|
/* mathvariant (replaces 'fontstyle' & 'fontweight' & 'fontslant'):
|
|
normal | bold | italic | bold-italic | double-struck | bold-fraktur | script |
|
|
bold-script | fraktur | sans-serif | bold-sans-serif | sans-serif-italic |
|
|
sans-serif-bold-italic | monospace
|
|
|
|
Note1: Back-end code for these is not yet written (bug 114365):
|
|
double-struck, script, fraktur, bold-fraktur, bold-script
|
|
|
|
Note2: Don't use the 'font' shorthand because it resets the font-size and this
|
|
breaks the propagation of the scriptlevel size.
|
|
|
|
XXX bugs 46622 & 114365: need -moz-math-serif, etc, to only lookup math fonts
|
|
|
|
The meaning of mathvariant=normal is unclear as there is no interpretation
|
|
that "corresponds to SMP Math Alphanumeric Symbol characters"
|
|
(http://www.w3.org/TR/2003/REC-MathML2-20031021/chapter3.html#presm.commatt),
|
|
but let's assume an explicit mathvariant=normal is an attempt to reset all
|
|
style.
|
|
*/
|
|
[mathvariant] { /* shared and same as [mathvariant="normal"] */
|
|
/* reset all font properties except those that affect the size */
|
|
font-family: MathJax_Main, STIXGeneral, DejaVu Serif, DejaVu Sans, Cambria, Cambria Math, Times, Lucida Sans Unicode, OpenSymbol, Standard Symbols L, serif;
|
|
font-style: normal;
|
|
font-variant: normal;
|
|
font-weight: normal;
|
|
}
|
|
[mathvariant="bold-fraktur"] {
|
|
font-weight: bold;
|
|
font-family: MathJax_Fraktur, STIXGeneral, DejaVu Serif, DejaVu Sans, Cambria, Cambria Math, Times, Lucida Sans Unicode, OpenSymbol, Standard Symbols L, serif;
|
|
}
|
|
[mathvariant="bold-script"] {
|
|
font-weight: bold;
|
|
font-family: MathJax_Script, STIXGeneral, DejaVu Serif, DejaVu Sans, Cambria, Cambria Math, Times, Lucida Sans Unicode, OpenSymbol, Standard Symbols L, serif;
|
|
}
|
|
[mathvariant="bold"] {
|
|
font-weight: bold;
|
|
}
|
|
[mathvariant="italic"] {
|
|
font-style: italic;
|
|
}
|
|
[mathvariant="bold-italic"] {
|
|
font-weight: bold;
|
|
font-style: italic;
|
|
}
|
|
[mathvariant="sans-serif"] {
|
|
font-family: MathJax_SansSerif, sans-serif;
|
|
}
|
|
[mathvariant="bold-sans-serif"] {
|
|
font-weight: bold;
|
|
font-family: MathJax_SansSerif, sans-serif;
|
|
}
|
|
[mathvariant="sans-serif-italic"] {
|
|
font-family: MathJax_SansSerif, sans-serif;
|
|
font-style: italic;
|
|
}
|
|
[mathvariant="sans-serif-bold-italic"] {
|
|
font-family: MathJax_SansSerif, sans-serif;
|
|
font-weight: bold;
|
|
font-style: italic;
|
|
}
|
|
[mathvariant="monospace"] {
|
|
font-family: MathJax_Typewriter, monospace;
|
|
}
|
|
[mathvariant="double-struck"] {
|
|
font-family: MathJax_AMS, STIXGeneral, DejaVu Serif, DejaVu Sans, Cambria, Cambria Math, Times, Lucida Sans Unicode, OpenSymbol, Standard Symbols L, serif;
|
|
}
|
|
[mathvariant="script"] {
|
|
font-family: MathJax_Script, STIXGeneral, DejaVu Serif, DejaVu Sans, Cambria, Cambria Math, Times, Lucida Sans Unicode, OpenSymbol, Standard Symbols L, serif;
|
|
}
|
|
[mathvariant="fraktur"] {
|
|
font-family: MathJax_Fraktur, STIXGeneral, DejaVu Serif, DejaVu Sans, Cambria, Cambria Math, Times, Lucida Sans Unicode, OpenSymbol, Standard Symbols L, serif;
|
|
}
|
|
|
|
/**************************************************************************/
|
|
/* tags with generated content */
|
|
/**************************************************************************/
|
|
|
|
ms {
|
|
display: inline;
|
|
}
|
|
ms:before, ms:after {
|
|
content: "\0022";
|
|
}
|
|
ms[lquote]:before {
|
|
content: attr(lquote);
|
|
}
|
|
ms[rquote]:after {
|
|
content: attr(rquote);
|
|
}
|
|
|
|
merror {
|
|
display: block;
|
|
font-family: sans-serif;
|
|
font-weight: bold;
|
|
white-space: pre;
|
|
margin: 1em;
|
|
padding: 1em;
|
|
border-width: thin;
|
|
border-style: inset;
|
|
border-color: red;
|
|
font-size: 14pt;
|
|
background-color: lightyellow;
|
|
}
|
|
|
|
/**************************************************************************/
|
|
/* mtable and its related tags */
|
|
/**************************************************************************/
|
|
|
|
mtable {
|
|
display: inline-table;
|
|
border-collapse: separate;
|
|
border-spacing: 0;
|
|
text-indent: 0;
|
|
}
|
|
mtable[frame="none"] {
|
|
border: none;
|
|
}
|
|
mtable[frame="solid"] {
|
|
border: solid thin;
|
|
}
|
|
mtable[frame="dashed"] {
|
|
border: dashed thin;
|
|
}
|
|
|
|
mtr, mlabeledtr {
|
|
display: table-row;
|
|
vertical-align: baseline;
|
|
}
|
|
|
|
mtd {
|
|
display: table-cell;
|
|
vertical-align: inherit;
|
|
text-align: -moz-center;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
/* Don't support m(labeled)tr without mtable, nor mtd without m(labeled)tr */
|
|
:not(mtable) > mtr,
|
|
:not(mtable) > mlabeledtr,
|
|
:not(mtr):not(mlabeledtr) > mtd {
|
|
display: none !important;
|
|
}
|
|
|
|
/* Hide the label because mlabeledtr is not supported yet (bug 356870). This
|
|
rule can be overriden by users. */
|
|
mlabeledtr > mtd:first-child {
|
|
display: none;
|
|
}
|
|
|
|
/***********************/
|
|
/* -- mtd: columnalign */
|
|
|
|
mtd[_moz-math-columnalign="left"],
|
|
mtd[columnalign="left"] {
|
|
text-align: left;
|
|
}
|
|
mtd[_moz-math-columnalign="right"],
|
|
mtd[columnalign="right"] {
|
|
text-align: right;
|
|
}
|
|
mtd[_moz-math-columnalign="center"],
|
|
mtd[columnalign="center"] {
|
|
text-align: -moz-center;
|
|
}
|
|
|
|
/*************************/
|
|
/* -- mtr, mtd: rowalign */
|
|
|
|
mtr[_moz-math-rowalign="top"],
|
|
mtr[rowalign="top"],
|
|
mtd[rowalign="top"] {
|
|
vertical-align: top;
|
|
}
|
|
mtr[_moz-math-rowalign="bottom"],
|
|
mtr[rowalign="bottom"],
|
|
mtd[rowalign="bottom"] {
|
|
vertical-align: bottom;
|
|
}
|
|
mtr[_moz-math-rowalign="center"],
|
|
mtr[rowalign="center"],
|
|
mtd[rowalign="center"] {
|
|
vertical-align: middle;
|
|
}
|
|
mtr[_moz-math-rowalign="baseline"],
|
|
mtr[rowalign="baseline"],
|
|
mtd[rowalign="baseline"] {
|
|
vertical-align: baseline;
|
|
}
|
|
/* -- not yet supported --
|
|
mtr[_moz-math-rowalign="axis"],
|
|
mtr[rowalign="axis"],
|
|
mtd[rowalign="axis"] {
|
|
vertical-align: mathline;
|
|
}
|
|
*/
|
|
|
|
/**********************************************************************/
|
|
/* rules to achieve the default spacing between cells. The back-end code
|
|
will set the internal attributes depending on the cell's position.
|
|
These rules are hard-coded, the comments indicate what would be
|
|
desirable if the style data could be changed on the fly to pick
|
|
the values that users may set with the attributes of <mtable> */
|
|
mtd {
|
|
padding-right: 0.4em; /* half of columnspacing[colindex] */
|
|
padding-left: 0.4em; /* half of columnspacing[colindex-1] */
|
|
padding-bottom: 0.5ex; /* half of rowspacing[rowindex] */
|
|
padding-top: 0.5ex; /* half of rowspacing[rowindex-1] */
|
|
}
|
|
/* turn off the spacing at the periphery of boundary cells */
|
|
mtr:first-child > mtd {
|
|
padding-top: 0ex;
|
|
}
|
|
mtr:last-child > mtd {
|
|
padding-bottom: 0ex;
|
|
}
|
|
mtd:first-child {
|
|
padding-left: 0em;
|
|
}
|
|
mtd:last-child {
|
|
padding-right: 0em;
|
|
}
|
|
/* re-instate the spacing if the table has a surrounding frame */
|
|
mtable[frame="solid"] > mtr:first-child > mtd,
|
|
mtable[frame="dashed"] > mtr:first-child > mtd {
|
|
padding-top: 0.5ex; /* framespacing.top */
|
|
}
|
|
mtable[frame="solid"] > mtr:last-child > mtd,
|
|
mtable[frame="dashed"] > mtr:last-child > mtd {
|
|
padding-bottom: 0.5ex; /* framespacing.bottom */
|
|
}
|
|
mtable[frame="solid"] > mtr > mtd:first-child,
|
|
mtable[frame="dashed"] > mtr > mtd:first-child {
|
|
padding-left: 0.4em; /* framespacing.left */
|
|
}
|
|
mtable[frame="solid"] > mtr > mtd:last-child,
|
|
mtable[frame="dashed"] > mtr > mtd:last-child {
|
|
padding-right: 0.4em; /* framespacing.right */
|
|
}
|
|
|
|
/**********************************************************************/
|
|
/* internal settings to support 'rowlines' and 'columnlines'. To
|
|
achieve the recommended behavior, the back-end code will avoid setting
|
|
unsuitable rules on the cells on the first row and the first column.
|
|
In general, however, authors can use the 'border' property of CSS to
|
|
achieve varying effects down to the level of the table cell. */
|
|
mtr[_moz-math-rowline="none"] > mtd {
|
|
border-top: none;
|
|
}
|
|
mtr[_moz-math-rowline="solid"] > mtd {
|
|
border-top: solid thin;
|
|
}
|
|
mtr[_moz-math-rowline="dashed"] > mtd {
|
|
border-top: dashed thin;
|
|
}
|
|
mtd[_moz-math-columnline="none"] {
|
|
border-left: none;
|
|
}
|
|
mtd[_moz-math-columnline="solid"] {
|
|
border-left: solid thin;
|
|
}
|
|
mtd[_moz-math-columnline="dashed"] {
|
|
border-left: dashed thin;
|
|
}
|
|
|
|
|
|
/**************************************************************************/
|
|
/* Style used for stretchy symbols *must* be normal to avoid misaligments */
|
|
/* By leaving the font-family empty, the MathML engine will use the value
|
|
provided by the mathfont-family property in the mathfont.properties file
|
|
or the value of the user's pref("font.mathfont-family", "...").
|
|
|
|
Authors can make elements on a document to be stretched with different
|
|
fonts, e.g.,
|
|
|
|
To request the use of STIX fonts, you can add a <style>...</style> with:
|
|
<mo myfonts="stix">...</mo> with the associated CSS declaration
|
|
mo[myfonts="stix"]::-moz-math-stretchy {
|
|
font-family: STIXNonUnicode, STIXSizeOneSym, STIXSize1, STIXGeneral;
|
|
}
|
|
|
|
To request the use of Asana fonts, you can add a <style>...</style> with:
|
|
<mo myfonts="asana">...</mo> with the associated CSS declaration
|
|
mo[myfonts="asana"]::-moz-math-stretchy {
|
|
font-family: Asana Math;
|
|
}
|
|
|
|
Of course, if you just want all of the stretchy characters in your
|
|
document to be stretched with your preferred list, you can just do:
|
|
::-moz-math-stretchy {
|
|
font-family: [your-particular-list]
|
|
}
|
|
|
|
Note that like other fonts in the document, users can override this by
|
|
clicking the pref to override document fonts.
|
|
/**************************************************************************/
|
|
|
|
::-moz-math-stretchy {
|
|
font-style: normal;
|
|
font-family: serif; /* an empty family is ignored as an error and behaves like inherit */
|
|
/* background-color: #3C6; */
|
|
}
|
|
/* Don't actually style -moz-math-anonymous by default */
|
|
/*
|
|
::-moz-math-anonymous {
|
|
}
|
|
*/
|
|
|
|
/**********************************************************************/
|
|
/* Hide embedded semantic MathML content (as opposed to presentational
|
|
content, which we render). Ideally, here is the behavior that we want:
|
|
|
|
if there is an annotation-xml[encoding="MathML-Presentation"]
|
|
render that annotation, and ignore the first child of the
|
|
<semantics> element and all other annotations,
|
|
else
|
|
render the first child of <semantics> and ignore all annotations
|
|
|
|
But this cannot be expressed with CSS. As a stop-gap, just render
|
|
the first child to cater for most of the common cases - bug 154931.
|
|
*/
|
|
semantics > :not(:first-child) {
|
|
display: none;
|
|
}
|
|
|
|
/**********************************************************************/
|
|
/* This is used when wrapping non-MathML inline elements inside math. */
|
|
*|*::-moz-mathml-anonymous-block {
|
|
display: inline-block !important;
|
|
position: static !important;
|
|
text-indent: 0;
|
|
}
|
|
|
|
/*****************************************/
|
|
/* Controlling scriptlevel */
|
|
/*****************************************/
|
|
|
|
/* mfrac, munder, mover and munderover change the scriptlevels of their children using
|
|
-moz-math-increment-script-level because regular CSS rules are insufficient to
|
|
control when the scriptlevel should be incremented */
|
|
:-moz-math-increment-script-level { -moz-script-level:+1; }
|
|
|
|
/* all other cases can be described using regular CSS, so we do it this way because it's
|
|
more efficient and less code */
|
|
mroot > :not(:first-child) { -moz-script-level:+2; }
|
|
|
|
msub > :not(:first-child),
|
|
msup > :not(:first-child),
|
|
msubsup > :not(:first-child),
|
|
mmultiscripts > :not(:first-child) { -moz-script-level:+1; }
|
|
|
|
/*****************************************/
|
|
/* Controlling directionality */
|
|
/*****************************************/
|
|
|
|
math[dir="rtl"], mstyle[dir="rtl"], mrow[dir="rtl"],
|
|
mi[dir="rtl"], mn[dir="rtl"], mo[dir="rtl"], mtext[dir="rtl"], ms[dir="rtl"] {
|
|
direction: rtl;
|
|
}
|
|
|
|
math[dir="ltr"], mstyle[dir="ltr"], mrow[dir="ltr"],
|
|
mi[dir="ltr"], mn[dir="ltr"], mo[dir="ltr"], mtext[dir="ltr"], ms[dir="ltr"] {
|
|
direction: ltr;
|
|
}
|