Ankündigung

Einklappen
Keine Ankündigung bisher.

0.12.6 -> develop Design breaking changes

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    0.12.6 -> develop Design breaking changes

    Icons werden seit der Umstellung auf den Icon-Font falsch dargestellt (pure structure)

    Kurzfassung

    Seit der Umstellung des KNX-UF-Iconsets vom SVG-Sprite auf einen Icon-Font (Commit c67a77df9 "replace with iconfont", Februar 2022) werden die Icons in der pure structure anders dargestellt als vorher. Die CSS-Regeln, die die Icons vorher bemaßt haben, wurden dabei nicht angepasst und sind seitdem teilweise wirkungslos.

    Vergleich: CometVisu 0.12.6 gegen den aktuellen develop, gleiche Config, gleicher Browser, Design "metal".


    Was sich geändert hat

    Vorher wurde ein SVG erzeugt:

    Code:
    <div class="label"><svg class="icon"><use xlink:href="#kuf-temp_temperature"></use></svg>Status</div>
    Heute ein <i>-Element mit einer Klasse des Icon-Fonts:

    Code:
    <div class="label"><i class="knxuf-temp_temperature icon"></i>Status</div>

    Problem 1: Die Box der Icons fällt zusammen

    designglobals.css bemaßt die Icons so:

    Code:
    .icon {
      height: 2em;
      width: 2em;
      font-size: 1.55em;   /* nachträglich ergänzt in b32896d83 "load iconfont css and fix icon size" */
    }
    Ein <svg> ist ein replaced element, dort wirken width und height. Ein <i> ist ein normales Inline-Element, dort wirken beide nicht. Die Box fällt deshalb auf die Vorschubbreite der Glyphe zusammen. Da die Glyphen des Fonts sehr unterschiedliche Vorschubbreiten haben (gemessen: 0.148em bis 1.0em), fallen schmale Icons besonders auf.

    Gemessen am Thermometer-Icon (temp_temperature) in einer Status-Zeile:

    Code:
    0.12.6 (SVG)     Box  37 x 35 px
    aktuell (Font)   Box  12 x 29 px
    Das Icon selbst ist noch da, es hat aber praktisch keine Breite mehr, wodurch das Layout der Zeile verrutscht.


    Problem 2: Die Glyphen werden zu groß gezeichnet

    Das ist der Punkt, der optisch am meisten auffällt.

    Die SVG-Icons haben ihre Box nie ausgefüllt. Die Zeichnung liegt mit Rand in einer gemeinsamen viewBox (30 30 301 301), der tatsächlich gezeichnete Bereich ist kleiner:

    Code:
    kuf-control_home           Box 44x44   gezeichnet 27.1 x 27.1   (62 % der Box)
    kuf-control_building_s_kg  Box 44x44   gezeichnet 32.5 x 32.4   (74 % der Box)
    kuf-temp_temperature       Box 37x35   gezeichnet  9.3 x 24.9   (70 % der Box)
    Die Glyphen des Icon-Fonts sind dagegen auf die em-Box normiert und zeichnen einheitlich ca. 96 % der font-size. Bei font-size: 36px in der Navbar werden also 34.6 px gezeichnet, wo vorher je nach Icon 25 bis 32 px standen. Die Icons wirken dadurch deutlich größer und "fetter".


    Problem 3: Die Glyphen sitzen zu weit oben in ihrer Box

    Der Font hat einen Ascent von ca. 0.995em und keinen Descent. Die Glyphe hängt dadurch oben in der Zeilenbox, unterhalb bleibt Luft. Die SVG-Zeichnung war dagegen exakt zentriert:

    Code:
    0.12.6, kuf-control_home in einer 44x44-Box:
        Abstand links 8.5   oben 8.5   rechts 8.4   unten 8.4   -> zentriert
    Ohne Korrektur sitzt die Glyphe rund 2 px zu hoch.


    Lösungsvorschlag

    Die Box wieder herstellen, die Glyphengröße an die frühere Zeichengröße angleichen und die Glyphe in der Box zentrieren. Die Längen sind relativ zur font-size der Regel selbst, deshalb sind die Werte umgerechnet.

    designglobals.css:

    Code:
    .icon {
      display: inline-block;
      font-size: 1.39em;      /* zeichnet so groß wie die frühere SVG-Zeichnung */
      width: 1.439em;         /* entspricht den früheren 2em   des umgebenden Textes */
      height: 1.367em;        /* entspricht den früheren 1.9em des umgebenden Textes */
      line-height: 1.333em;   /* = height - 0.034em, zentriert die Glyphe vertikal */
      text-align: center;     /* zentriert die unterschiedlich breiten Glyphen */
      vertical-align: middle;
    }
    designs/metal/basic.css:

    Code:
    .icon {
        height: 1.367em;
        line-height: 1.333em;
    }
    
    .navbar .pagejump .label > .icon,
    .navbar .refresh .label > .icon {
        height: 44px !important;
        width: 44px !important;
        font-size: 31px;        /* vorher 36px */
        line-height: 42.95px;   /* = 44px - 0.034 * 31px */
        display: block;
        margin: 0 auto;
    }
    Ergebnis, gemessen gegen die 0.12.6-Instanz:

    Code:
                                  0.12.6                       mit Patch
    Status-Zeile, Box             37 x 35                      37 x 35
    Status-Zeile, Zeichnung       24.9, oben 5.3 / unten 5.2   24.9, oben 5.27 / unten 5.27
    Navbar, Box                   44 x 44                      44 x 44
    Navbar, Zeichnung             25.4 - 32.5, zentriert       29.8, zentriert

    Was sich damit nicht lösen lässt

    Die SVG-Zeichnungen füllten ihre Box je Icon unterschiedlich stark aus (gemessen 58 % bis 74 %), der Font normiert dagegen alle Glyphen auf die em-Box. Die font-size, die ein Icon exakt treffen würde, ist deshalb je Icon verschieden:

    Code:
    fts_window_2w_open_l  26.3px      light_light_dim_00    31.7px
    control_home          28.2px      fts_frontdoor         32.4px
    weather_sun           30.2px      control_building_s_*  33.6px
    secur_alarm           31.0px      status_vacation       35.1px
    31 px ist der Mittelwert. Icons an den Rändern dieser Spanne bleiben ein paar Pixel daneben. Das ließe sich nur beheben, indem der Font neu erzeugt wird und dabei die ursprüngliche Größenrelation der einzelnen Icons erhalten bleibt.



    Betroffene Versionen

    Ab c67a77df9 (Februar 2022), also alles ab 0.13.x. Die Regel in designglobals.css gilt für alle Designs der pure structure, die Navbar-Regel oben ist aus dem Design "metal" - andere Designs haben ggf. eigene Icon-Regeln, die ebenfalls angepasst werden müssten.

    #2
    Der Fix ist keine 100% Lösung, aus meiner Sicht aber ein guter Kompromiss. Zumindest die Abstände stimmen danach wieder, manche Icons sind etwas größer, andere kleiner als in der 0.12.6. Aber das Fällt nur im direkten Vergleich auf. Ich kann gerne einen PR aufmachen.

    Branch ist hier:

    https://github.com/joltcoke/CometVis...on-font-sizing
    Zuletzt geändert von jolt; Gestern, 10:31.

    Kommentar


      #3
      Für eine weitere Design Regression habe ich einen PR aufgemacht:

      https://github.com/CometVisu/CometVisu/pull/1478

      Kommentar

      Lädt...
      X