Kurzbeschreibung der Ausgabe:Schriftgröße CSS-Werte basierend auf Schatten DOM Wurzel
ich nach einem Weg suche Schriftgröße basierend Werte zu setzen (ähnlich eine Eigenschaft auf einen em-Wert zu setzen) in einem Element innerhalb eines Schatten-Doms relativ zum Schatten-Host, unabhängig von der Schriftgröße des Eltern-Elements im Schatten-Dom. Ähnlich wie rem-values, aber mit dem Schatten als root anstelle des html root.
Der Grund dafür ist in der Lage, Inhalt wie ein Widget (das mit Schatten dom eingefügt wird) an einer Stelle zu skalieren. Wenn Eigenschaften, die auf der Schriftgröße basieren, auf diese Weise skaliert werden können, kann ein ganzes Widget in jedem Kontext skaliert werden, ohne dass viele CSS-Werte festgelegt werden müssen, damit es an jedem Ort passt.
Lange Beschreibung der Ausgabe:
ich für einen Weg, um Größe Text (font-size) auf einem bestimmten Element in der DOM-basierte Suche, innerhalb dieses Elements verschiedene Teile des Inhalts skalieren zu können, basierend auf diesem Umhüllungselement (gut für Widgets und so). Dies ist nicht nur für den eigentlichen Text, es ist oft gut, viele CSS-Werte auf Schriftgröße basieren, so dass die Elemente visuelle Layout skalieren mit der Größe des Textes (wie Padding, Rand-Radius und Schatten). Wenn alles auf em-Werten basiert, kann dies ein wenig unordentlich werden. Wenn es innerhalb des Elements mehrere Ebenen der Vererbung von Schriftgrößen gibt und ich die erste Ebene vergrößern möchte, ohne die zweite zu ändern, müsste ich die em der ersten Ebene im Dom vergrößern, während ich jedes Element der zweiten Ebene reduzieren würde (das auf dieser ersten Ebene berechnet wird), damit der Text von Unterelementen die gleiche Größe behält. Dies ist in vielen Fällen nicht optimal.
Eine nette Lösung basiert auf Root EM (rem), also hat das Ändern einer Ebene des Doms keinen Einfluss auf die Unterelemente. Wenn ich jedoch den gesamten Text innerhalb dieser Umhüllungselemente vergrößern/verkleinern möchte (an einer Stelle), ohne die anderen Elemente auf der gleichen Seite zu beeinflussen, müsste ich die Rem-Werte aller Schriftgrößen vergrößern/verkleinern Elemente innerhalb dieses Umhüllungselements.
Ich habe vor kurzem begonnen, in Webkomponenten mit Shadow DOM und Vorlagen zu suchen. In Template-Tags ist css eingekapselt, was großartig ist, da das Design dieser Box/Widget/Komponente eigenständig gestylt werden kann, ohne an den Rest des Designs, unerwünschte vererbte Werte und dergleichen denken zu müssen. Endlich eine gute Möglichkeit, unabhängige Komponenten zum Aufbau einer Webseite zu machen. Aber es wäre toll, wenn ich eine Art Template-Root-Schriftgröße für die Vorlage selbst festlegen könnte. Wenn ich also ein Element innerhalb der Vorlage als font-size 2rem (oder eine andere ähnliche Einheit) einstelle, dann wäre die Schriftgröße dieses Elements 2x die Stammschriftgröße der Vorlage, unabhängig von der Schriftgröße im Host Element, wo diese Vorlage verwendet wird, und unabhängig von der Schriftgröße des Stamms der Seite (das HTML-Element).
Wenn ich mit Rem-Werten innerhalb einer Vorlage getestet wurde, basierte es immer noch auf der Schriftgröße der Seitenwurzel (HTML-Tag). Ich habe auch vw-Werte getestet, aber dies basiert auch auf dem gesamten Ansichtsfenster und nicht nur auf dem eingekapselten Bereich (der Schattenwurzel).
Ich habe viele Artikel über Shadow DOM angeschaut, aber ich konnte keine Lösung zu diesem Thema finden. Irgendwelche Vorschläge?
Was (vereinfachte Beispiele) geschieht:
<html style="font-size: 16px">
<body style="font-size: 12px">
I am 12px large
<!-- em, based on the body in this case -->
<div style="font-size: 1.5em">
I am 18px large
<div style="font-size: 1.5em">
I am 27px large
</div>
</div>
<!-- rem, based on the styles of the html element -->
<div style="font-size: 1.5rem">
I am 24px large
<div style="font-size: 1.5rem">
I am 24px large
</div>
</div>
</body>
</html>
Was ich will:
<html style="font-size: 16px">
<body style="font-size: 12px">
I am 12px large
<div style="font-size: 1.5em">
I am 18px large
</div>
<div style="font-size: 1.5rem">
I am 24px large
</div>
<template> <!-- Simulates that it is inserted into the DOM by using shadow elements -->
<style>
:root{ /* Or something like that */
font-size: 20px; /* This is the simulated "template root fontsize" */
}
</style>
<div style="font-size: 1.5trem"> <!-- Based on the template root fontsize -->
I am 30px large
<div style="font-size: 2trem">
I am 40px large
</div>
</div>
</template>
</body>
</html>
Dies würde einen Platz geben (das: Wurzelteil des Beispiels oben) alle relativ font- zu steuern Größen innerhalb dieser Komponente, und dies kann dann mit nicht-relativen Schriftgrößen wie px oder anderen normalen CSS-Werten kombiniert werden.
Dies löst das Problem nicht. Ich möchte basierend auf der Schattenwurzel, unabhängig vom übergeordneten Element, auf Schriftgröße basierende Werte festlegen. Dann kann ich den Vorlagenstamm mit Medienabfragen steuern und den Inhalt relativ dazu skalieren, anstatt Medienabfragen für alle Unterelemente zu haben. em-Werte basieren auf übergeordneten Rem-Werten im HTML-Wurzelverzeichnis. In meinem Beispiel ist html font-size 16, und Vorlage root ist 20. Ich möchte in der Lage sein, ein Element auf 1.5x Vorlage Stammschriftgröße (wie "Ich bin 30px groß" in meinem Beispiel) und ein Unter -Elemente davon 2x Template Root (40px) unabhängig von der Eltern (das ist 30px). – henit
@henit Ich glaube nicht, dass das nur mit CSS möglich ist, aber es kann mit Javascript gemacht werden. Ich habe die Antwort und den [bottker] (http://plnkr.co/edit/P1KOZ4NGmpycGgCgRpSq?p=preview) mit einem Skript aktualisiert, das Rem-Schriftgrößen relativ zum Schattenstamm ändert. Öffnen Sie den Plocker und ändern Sie die Größe des Fensters, um die Änderungen der Medienabfrage zu sehen. – quantumwannabe