flutter_html_css_border 0.2.0
flutter_html_css_border: ^0.2.0 copied to clipboard
A flutter_html extension that renders the CSS border longhand properties: border-width, border-style, border-color and their per-side and logical forms.
flutter_html_css_border #
A flutter_html extension that renders the CSS
border longhands. flutter_html 3.0.0 parses five border properties, all
shorthands: border, border-top, border-right, border-bottom and border-left. It
drops the other 39 property names, and there is no error and no warning. It
rewrites the longhands into those five shorthands before flutter_html parses the style.
List it after a utility-class extension and before CssBorderRadiusHtmlExtension.
Contents #
Features #
- At the
preStylingstep the extension resolves the cascade of every border declaration in the inline style, removes them all, and appends the result as the five shorthands.flutter_htmlthen renders the border itself; nothing here paints. Declarations it does not consume keep their text and their order. - It reads 39 property names:
border-width,border-style,border-color, the twelve per-side longhands and every logical form, listed in doc/properties.md. - It reads the five shorthands too, so
border: 1px solid red; border-top-width: 6pxgives a six-pixel top side and one-pixel sides elsewhere. dashed,dotted,double,groove,ridge,insetandoutsetrender as one solid line. Flutter'sBorderSide.stylehassolidandnoneonly.- A side with no colour uses the element's own inline
color. With none, it renders black; acoloron an ancestor is not visible at this step. There is no error and no warning. - An element whose inline style carries no border longhand gets no change.
Getting started #
dependencies:
flutter_html: ^3.0.0
flutter_html_css_border: ^0.2.0
Usage #
import 'package:flutter_html/flutter_html.dart';
import 'package:flutter_html_css_border/flutter_html_css_border.dart';
Html(
data: '''
<div style="border-width: 2px; border-style: solid; border-color: #0d6efd;
padding: 12px;">
Two pixels of blue.
</div>
''',
extensions: const [CssBorderHtmlExtension()],
);
Before you register it #
This extension matches on the inline style, never on the tag name. It cannot make
flutter_html render a tag that has no renderer. A TagExtension does that.
A utility-class extension, this extension and CssBorderRadiusHtmlExtension all write
to the same style attribute at the preStyling step. flutter_html runs them in
registration order. Use this one:
// Also needs flutter_html_bootstrap and
// flutter_html_css_border_radius.
Html(
data: '<div class="p-3" '
'style="border-radius: 8px; border-width: 2px; border-style: solid;">'
'Card</div>',
extensions: const [
BootstrapUtilitiesHtmlExtension(), // renders `p-3`
CssBorderHtmlExtension(), // resolves the border
CssBorderRadiusHtmlExtension(), // rounds and clips
],
);
Listed before the utility-class extension, this extension reads the style attribute
before those classes expand into it. It misses the longhands they add, and flutter_html
drops them. There is no error and no warning.
Listed after CssBorderRadiusHtmlExtension, it never sees the border. That extension
strips every border declaration that is not a radius, and it reads no border-style:
Html(
data: '<div style="border-radius: 12px; border-width: 2px; border-style: none;">'
'Card</div>',
extensions: const [
CssBorderRadiusHtmlExtension(), // renders a 2px border; CSS renders none
CssBorderHtmlExtension(),
],
);
The order matrix has all four arrangements measured.
Released flutter_html_bootstrap 0.1.1 and
flutter_html_vuetify 0.1.0 do not recognise CssBorderHtmlExtension. Both
therefore still suppress the classes this extension could render. Write the border into
an inline style attribute until a release of theirs lists it.
Limitations #
border-widthon its own renders nothing, as in CSS, whereborder-stylestarts atnone. Declareborder-stylebeside the width.hiddenrenders nothing too.- Next to
CssBorderRadiusHtmlExtension, a rounded element renders only the side that occurs most often. That extension reads thebordershorthand and no per-side declaration. There is no error and no warning. flutter_htmlrenders a border only for a list item, or a block or inline-block element with children. A plain<span>or an empty<div>renders none, with this extension and without it. There is no error and no warning.- A
TagExtensionbuilds its own widget and never reads aStyle, so an element it builds has no border. Use aTagWrapExtensioninstead. - Widths follow
flutter_html's arithmetic.thin,mediumandthickare 2, 4 and 6 pixels, where a browser uses 1, 3 and 5. Every length unit is read as its bare number, so0.5remis half a pixel. The rounded border thatflutter_html_css_border_radiusdraws resolves the same0.5remagainst a root font size of 14, so it is 7 pixels there.flutter_html_css_font_sizewill close this gap. - An eight-digit
#rrggbbaacolour renders with its channels transposed.flutter_htmlreads it as#aarrggbb. There is no error and no warning. - The extension does not read
border-image,border-collapse,border-spacingorborder-radius. - The extension reads the inline style only. It does not read
<style>blocks or stylesheets.
The full reasoning for each one is on the symbol that implements it.
Additional information #
Issues and merge requests go to the
GitLab repository.
Rounding the same element's corners is
flutter_html_css_border_radius's
job.
CI, publishing and Renovate are described in CONTRIBUTING.md.