|
CSS in ChawanThis document describes CSS features supported by Chawan, as well as its proprietary extensions and deviations from standards. If you discover a deviation that is not covered by this document, please open a ticket at https://todo.sr.ht/~bptato/chawan. Standard propertiesA list of supported standard properties, with notes on unimplemented values:
Shorthands:
Variables (the var() function) are fully supported. Values of <length> or <color> types fully support calc() expressions. SelectorsAll selector types from CSS 2.1 are supported, except for namespaces. Following standard pseudo-classes are supported: :first-child, :last-child, :only-child, :hover, :root, :nth-child(), :nth-last-child(), :checked, :focus, :is(), :not(), :where(), :lang(), :link, :target, :disabled. :visited is parsed, but for now it is not matched. :defined, :host, and :host() are matched for compatibility; however, custom elements and shadow DOM are not supported yet. The standard pseudo-elements ::before, ::after, and ::marker are supported. ::backdrop is parsed for compatibility, but is not supported yet. At-rulesFollowing rules starting with an @ sign are supported. @mediaThe grid, hover, prefers-color-scheme, scripting, width, and height media features are fully supported. The color, color-index, and monochrome features are supported, but only consider the number of supported text colors (which can differ from the number of colors in Sixel/Kitty images). @importImporting to layers is supported. @import combined with media queries is not yet supported. @layer@layer is fully supported. (I think.) Proprietary extensions
This can be used in user style sheets to compress distracting ruby text: rt{text-transform: -cha-half-width}. Characters without half-width counterparts are left intact, except hiragana is treated as katakana.
to your user-style to set the body width of all markdown documents to 80 characters. (The string is matched case-insensitively.) Rendering quirksThese are willful violations of the standard, usually made to better fit the display model inherent to projecting the web to a cell-based screen. User agent style sheetThe user agent style sheet is a combination of the styles suggested by the HTML standard and a CSS port of w3m’s rendering. In general, faithfulness to w3m is preferred over the standard’s suggestions, unless w3m’s rendering breaks on existing websites. Link colors differ depending on the terminal’s color scheme. Sizing and positioningLayout is performed on a finite canvas of coordinates represented by a 32-bit fixed-point number with 6 bits of precision. After layout, these positions are divided by the cell width and/or height, with the fractional part truncated. (This is subject to change.) In case of Kitty images, the fractional part is preserved, and is used as an in-cell offset. The lengths 1em and 1ch compute to the cell height and cell width respectively. In outer inline boxes (inline-block, inline-flex) and list-item boxes, margins and padding that are smaller than one cell (on the respective axis) are ignored. This does not apply to blockified inline boxes. When calculating clip boxes (overflow: hidden or clip), the clip box’s offset is floored, and its size is ceiled to the nearest cell’s boundaries. This means that “width: 1px; overflow: hidden” will still display the first character of a text box. Scroll barsChawan does not have scroll bars, as they would complicate on-page navigation and would not work in dump mode. Instead, the “overflow-x/y” properties are handled as follows.
position: fixed, position: stickyTo keep the document model static, these do not change their position based on the viewport’s scroll status. Instead:
Right now, position: fixed is always positioned at the bottom of the root element’s margin box. This breaks on pages that overflow it (e.g. by setting height: 100% on the root element), so it will be moved to the bottom of its overflow box in the future. Color correctionSome authors only specify one of the foreground or the background color, assuming a black-on-white canvas. The display.minimum-contrast option adjusts the foreground color so that text remains readable even if the terminal background does not match this expectation. (The exact algorithm is unspecified and subject to change.) To avoid breaking spoiler mechanisms that rely on “black on black” text, color correction is not invoked on cells that have an RGB color (typically specified by the author.) BordersCSS borders are difficult to accurately display on a cell-based display. So while the functionality exists, it has some limitations:
See alsocha(1)
|