Ulepszenia układu logicznego dzięki skrótom zależnym od przepływu

Nowe skróty właściwości logicznych i nowe właściwości wstawiane dla Chromium.

Od wersji Chromium 69 (3 września 2018 r.) właściwości logiczne i wartości pomogły programiści zachowują kontrolę nad swoimi międzynarodowymi układami dzięki logicznym, niż fizyczne, kierunki i wymiary. W Chromium 87 skróty i wprowadziliśmy przesunięcia, aby te właściwości i wartości logiczne stały się nieco prostsze. Dzięki temu Chromium przestaje być dostępny w przeglądarce Firefox, która obsługuje skróty. od 66. W przeglądarce Safari możesz zobaczyć ich wersję przedpremierową.

W ramce urządzenia wyświetlane są napisy wypożyczające tekst zastępczy w językach łacińskim, hebrajskim i japońskim. Strzałki i kolory za tekstem wiążą się z dwoma kierunkami: bloku i tekstu wbudowanego.

Przepływ dokumentów

Jeśli znasz już właściwości logiczne, osie wbudowane i blokowe Jeśli chcesz odświeżyć sobie wiedzę, możesz pominąć tę funkcję. Jeśli nie, przypomnę tylko krótko.

W języku angielskim litery i słowa przesuwają się od lewej do prawej, a akapity są ułożone w stosunku od góry do dołu. W tradycyjnym języku chińskim litery i słowa są wyświetlane od góry do dołu, a akapity ułożone są na siebie. od prawej do lewej. Tylko w tych 2 przypadkach, jeśli napiszemy kod CSS, który umieszcza „margines u góry”, w akapicie, stosujemy prawidłowe odstępy tylko w 1 stylu języka. Jeśli strona jest przetłumaczona na język tradycyjny chiński jest dostępny w języku angielskim. W nowym trybie pisania w pionie margines może nie mieć sensu.

Z tego powodu obudowa nie jest zbyt przydatna w innych krajach. Tak zaczyna się funkcja proces obsługi wielu języków; poznawania fizycznych i logicznych stron modelu pudełkowego.

Czy kiedykolwiek sprawdzałeś(-aś) element p w Narzędziach deweloperskich w Chrome? Jeśli tak, być może że domyślne style klienta użytkownika nie mają charakteru fizycznego, ale logicznego.

p {
  margin-block-start: 1em;
  margin-block-end: 1em;
  margin-inline-start: 0px;
  margin-inline-end: 0px;
}

CSS z arkusza stylów klienta użytkownika Chromium

Margines nie jest u góry ani u dołu, jak mogłoby się wydawać czytelnikom anglojęzycznym. Jest block-start i block-end. Te właściwości logiczne przypominają góry i u dołu, ale również jak w japońskim czytniku. Napisany raz, sprawdza się wszędzie.

Zwykły przepływ ma miejsce, gdy strona celowo wchodzi w skład tego połączenia wielokierunkowego. Gdy treść strony jest aktualizowana zgodnie z kierunkiem dokumentu, układ i są uznawane za zawarte w toku. Więcej informacji o „w” i „poza” przepływ w MDN lub w Specyfikacja modułu wyświetlania reklam CSS. Mimo że właściwości logiczne nie muszą być płynne – to one robią za Ciebie większość ciężkości dzięki zmianie kierunku. Przepływ oznacza kierunek, którym muszą się przemieszczać litery, słowa i treści. Powoduje to blokowanie i wbudowane w treści kierunki logiczne.

Kierunek blokowania to kierunek, w którym pojawiają się nowe treści, „Gdzie umieścić następny akapit?”. Możesz je potraktować jako „blok treści” lub „blok tekstu”. Każdy język układa bloki i określa ich kolejność block-axis. block-start to bok akapitu, a block-end to strona, na którą trafiają nowe akapity.

Na przykład w tradycyjnym japońskim pismo odręcznego pisanie bloków w kierunku bloków od prawej do lewej:

Kierunek tekstu śródtekstowego to kierunek, w którym unoszą się litery i słowa. Zastanów się nad kierunkiem podczas pisania Twoje ramię i ręka poruszają się, podróżują wzdłuż inline-axis. inline-start to strona, na której zaczynasz pisać, a inline-end to strona, z której możesz pisać w którym kończy się lub kończy pisanie. Powyższy film – inline-axis znajduje się od góry do dołu, ale w tym następnym filmie scena inline-axis układa się od prawej do lewej.

Status flow-relative co oznacza, że style napisane w danym języku będą dostosowane kontekstowo i odpowiednio stosowane do innych języków. Kształt przepływu treści zależy od języka, w którym są wysyłane.

Nowe skróty

Niektóre z tych skrótów nie stanowią nowych funkcji dla przeglądarki – są raczej łatwiejsze sposobów pisania stylów, wykorzystując możliwość ustawiania wartości w obu blokach lub wbudowane krawędzie. Właściwości logiczne inset-* dają nowe umiejętności, ponieważ nie istniała pewna metoda określania pozycji bezwzględnych za pomocą właściwości logicznych. wcześniej. Choć akcenty i krótkie rączki (heh) dobrze się komponują, o wszystkich nowych właściwościach logicznych w Chromium 87.

Skrócone marginesy

Nie pojawiły się żadne nowe umiejętności, ale mamy kilka przydatnych skrótów:
margin-block i margin-inline

Długie
margin-block-start: 2ch;
margin-block-end: 2ch;
Nowy skrót
margin-block: 2ch;
/* or */
margin-block: 2ch 2ch;

Nie ma skrótu „góra i dół” czy „w lewo i w prawo”... do teraz! Możesz wykorzystać skrót margin: 10px; do wszystkich 4 stron, a teraz możesz może łatwo odwołać się do 2 uzupełniających się stron, używając skrótu właściwości logicznej.

Długie
margin-inline-start: 4ch;
margin-inline-end: 2ch;
Nowy skrót
margin-inline: 4ch 2ch;

Dopełnienie skrótów

Nie pojawiły się żadne nowe umiejętności, ale dostępne są też wygodne skróty:
padding-block i padding-inline


Długie
padding-block-start: 2ch;
padding-block-end: 2ch;
Nowy skrót
padding-block: 2ch;
/* or */
padding-block: 2ch 2ch;

Oraz bezpłatny zestaw skrótów inline:

Długie
padding-inline-start: 4ch;
padding-inline-end: 2ch;
Nowy skrót
padding-inline: 4ch 2ch;

Znaki wewnętrzne i skróty

Właściwości fizyczne top, right, bottom i left można zapisać jako wartości dla właściwości inset. Zastosowanie dowolnej wartości position może przynieść korzyści boczne ustawianie krawędzi z wcięciem.

.cover {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  inset: 0;
}


Fizyczna dłoń
position: absolute;
top: 1px;
right: 2px;
bottom: 3px;
left: 4px;
Nowy fizyczny skrót
position: absolute;
inset: 1px 2px 3px 4px;

To powinno być od razu wygodne. Inset to skrótowe określenie ze wszystkich stron fizycznych. i działa tak samo jak marginesy i dopełnienie.

Nowe funkcje

Chociaż fizyczny skrót jest fascynujący, to teraz także więcej funkcje logiczne dodane przez dodatkowe skróty inset. Te skróty dają wygoda dla programistów (krótsze do pisania), ale też potencjalnego zasięgu układu, ponieważ są one zależne od przepływu.

Fizyczna dłoń
position: absolute;
top: 10px;
bottom: 10px;
Skrót logiczny
position: absolute;
inset-block: 10px;


Fizyczna dłoń
position: absolute;
left: 10px;
right: 20px;
Skrót logiczny
position: absolute;
inset-inline: 10px 20px;

Więcej informacji oraz pełną listę wstawionych skrótów i długich jest dostępny w MDN.

Obramowanie skrótami

Obramowanie oraz właściwości color, style i width mają używać nowych skrótów logicznych.


Fizyczna dłoń
border-top-color: hotpink;
border-bottom-color: hotpink;
Skrót logiczny
border-block-color: hotpink;
/* or */
border-block-color: hotpink hotpink;


Fizyczna dłoń
border-left-style: dashed;
border-right-style: dashed;
Skrót logiczny
border-inline-style: dashed;
/* or */
border-inline-style: dashed dashed;


Fizyczna dłoń
border-left-width: 1px;
border-right-width: 1px;
Skrót logiczny
border-inline-width: 1px;
/* or */
border-inline-width: 1px 1px;

Więcej informacji oraz pełną listę skrótów i długich znaków granicznych jest dostępny w MDN.

Przykład właściwości logicznej <figure>

Podsumujmy to wszystko na krótkim przykładzie. Właściwości logiczne mogą układać obraz z podpisem umożliwiającym pisanie różnych tekstów i wskazywanie różnych wskazówek dotyczących dokumentu.

Lub wypróbuj!

Nie musisz robić wielu rzeczy, aby Twoja karta była responsywna <figure> i kilka właściwości logicznych. Jeśli zastanawia się Pan/Pani, jak to wszystko działa międzynarodowo zwrócić uwagę na współpracę z CSS, mam nadzieję, że to krótkie wprowadzenie.

Polyfill i obsługa różnych przeglądarek

Cascade (czyli narzędzie do kompilacji) to dobry sposób na używanie zarówno starej, jak i nowej przeglądarki, rozmieszczone w odpowiednich odstępach ze zaktualizowanymi właściwościami logicznymi. W przypadku kaskadowych wartości zastępczych postępuj zgodnie z właściwością fizyczną jako wartość logiczną, a przeglądarka użyje funkcji „ostatni” właściwość znaleziona podczas stylu i ich rozwiązania.

p {
  /* for unsupporting browsers */
  margin-top: 1ch;
  margin-bottom: 2ch;

  /* for supporting browsers to use */
  /* and unsupporting browsers to ignore and go 🤷‍♂️ */
  margin-block: 1ch 2ch;
}

Nie jest to jednak pełne rozwiązanie dla każdego. Oto odręczna wersja zastępcza który wykorzystuje pseudoselektor :lang() do kierowania reklam na określone języki, dostosowuje odpowiednie odstępy fizyczne, a na końcu zapewnimy odstępy w obsługiwanych przeglądarkach:

/* physical side styles */
p {
  margin-top: 1ch;
  margin-bottom: 2ch;
}

/* adjusted physical side styles per language */
:lang(ja) {
  p {
    /* zero out styles not useful for traditional Japanese */
    margin-top: 0;
    margin-bottom: 0;

    /* add appropriate styles for traditional Japanese */
    margin-right: 1ch;
    margin-left: 2ch;
  }
}

/* add selectors and adjust for languages all supported */
:lang(he) {}
:lang(mn) {}

/* Logical Sides */
/* Then, for supporting browsers to use */
/* and unsupporting browsers to ignore #TheCascade */
p {
  /* remove any potential physical cruft.. */
  margin: 0;
  /* explicitly set logical value */
  margin-block: 1ch 2ch;
}

Możesz też użyć atrybutu @supports, aby określić, czy chcesz podać wartości zastępcze usługi:

p {
  margin-top: 1ch;
  margin-bottom: 2ch;
}

@supports (margin-block: 0) {
  p {
    margin-block: 1ch 2ch;
  }
}

Sass, PostCSS, Emotion i inni mają automatyczny pakiet SDK lub kompilację oferty z szeroką gamą wad i rozwiązań. Sprawdź każdy z nich i zobaczyć, które z nich pasują do Twojego łańcucha narzędzi i ogólnej strategii dotyczącej witryny.

Co dalej?

Większa część CSS będzie zawierać właściwości logiczne. To jeszcze nie koniec! Jest jeden wielki brak ale nadal czekamy na rozwiązanie tego problemu z GitHubem. Dostępne jest tymczasowe rozwiązanie w wersji roboczej. A jeśli chcesz nadać styl wszystkim i logiczne strony pudełka ze skrótem?

Skrót fizyczny
margin: 1px 2px 3px 4px;
margin: 1px 2px;
margin: 2px;
Skrót logiczny
margin: logical 1px 2px 3px 4px;
margin: logical 1px 2px;
margin: logical 2px;

W przypadku obecnej wersji roboczej oferty pakietowej trzeba będzie wpisać logical w każdym w celu uzyskania logicznego odpowiednika, który nie brzmi do niektórych DOSUSZE.

Istnieją też inne propozycje zmiany tego ustawienia na poziomie blokowania lub strony, ale może to przecież wyciek funkcji logicznych do stylów, nadal przyjmujących fizyczne boki.

html {
  flow-mode: physical;
  /* or */
  flow-mode: logical;
  /* now all margin/padding/etc references are logical */
}

/* hopefully no 3rd/1st party code is hard coded to top/left/etc ..? */

To trudne. Zagłosuj i podziel się swoją opinią, chcemy poznać Twoją opinię.

Chcesz dowiedzieć się więcej o właściwościach logicznych? Oto szczegółowe informacje: wraz z przewodnikami i przykładami w MDN 🤓

Prześlij opinię

  • Aby zaproponować zmiany w składni CSS skrótów zależnych od przepływu, Najpierw sprawdź istniejące problemy w repozytorium csswg-drafts. Jeśli żaden z istniejących problemów nie pasuje do oferty pakietowej, utwórz nowy.
  • Aby zgłosić błędy w implementacji skrótów względnych w Chromium, Najpierw sprawdź istniejące problemy w narzędziu do śledzenia błędów Chromium. Jeśli żaden z istniejących problemów nie pasuje do błędu, utwórz nowy.