Problem z renderowaniem spacji

0

Problem

Tekst:

`Lorem ` ipsum

jest renderowany jako (zrzut ekranu):

Zrzut ekranu tekstu wynikowego po nieprawidłowym wyrenderowaniu spacji

Efekt:

Lorem ipsum

Jak widać, brakuje jednej spacji.

Carbon Copy @TomRiddle

2

Na 99% problem ze stylami CSS, a nie parserem ani renderem Markdown.

1

Dokładnie. W taki sposób renderuje tekst przeglądarka. Przykład:

a            b

Efekt:

a b

0

Dodanie deklaracji CSS white-space: pre-wrap do elementu-rodzica tego tekstu wydaje się rozwiązywać problem. Nie wiem jednak, czy czegoś innego to nie zepsuje.

0

To nie jest błąd, ale zachowanie oczekiwane. Tak działa HTML. Spacje są zachowywane za to wewnątrz znacznika <code>. W HTML spację można wymusić poprzez &nbsp;

2
Adam Boduch napisał(a):

To nie jest błąd, ale zachowanie oczekiwane. Tak działa HTML. Spacje są zachowywane za to wewnątrz znacznika <code>. W HTML spację można wymusić poprzez &nbsp;

Kurcze, jest brak zgody.

  • Na GitHub'ie jest dokładnie tak jak na 4programmers.net teraz, zarówno renderują taki sam HTML jaki i wygląda tak samo (prawdopodobnie dlatego że to też HTML+CSS?).
  • W IDE od JetBrains jest tak jak @Silv proponuje, czyli jest `Lorem `, odstęp (taki jak &nbsp;) i tekst
  • Markdown Online (https://dillinger.io/) w ogóle ignoruje tą spacje sprzed backticka

Moim skromnym zdaniem, tak jak jest w WebStorm/PhpStorm i tak jak mówi @Silv jest najbardziej naturalnie.

1
Adam Boduch napisał(a):

To nie jest błąd, ale zachowanie oczekiwane. Tak działa HTML. Spacje są zachowywane za to wewnątrz znacznika <code>. W HTML spację można wymusić poprzez &nbsp;

Adam, ja Cię rozumiem jako programista. Niemniej również dla mnie jako użytkownika jest to zachowanie nieintuicyjne. Żebyśmy się zrozumieli: czy uważasz, że dla użytkownika to jest zachowanie oczekiwane, że nie widać tej drugiej spacji?


UPDATE Dodam, żeby było jasne: jeśli zdecydujesz się to zmienić, niekoniecznie musi być rozwiązanie w CSS. Podałem przykładowe rozwiązanie. Zamiast CSS może być encja &nbsp;.


UPDATE2 Chociaż jak się teraz zastanawiam, to może niekoniecznie ta encja jest równoważna CSS dla użytkownika. W końcu jak ktoś będzie kopiować wyrenderowany tekst, to skopiuje sobie non-breaking space, czyli co innego niż zwykłą spację.

1

Już narzekałem na te spacje kiedyś: Kod źródłowy in-line (pojedyncze grave’y) pomija wielokrotną spację

I teraz po prostu sobie to Stylishem wymuszam. 🤷

1

Jest zachowanie oczekiwane gdyż specyfikacja markdown nie mówi nic o wielokrotnych spacjach. Parser przekształca jedynie tekst na HTML a w HTML to jest poprawne zachowanie. Tak działa nie tylko nasz edytor, ale również ale również edytor na github, stackoverflow czy bitbucket.

Wielokrotne spacje działają poprawnie wewnątrz znacznika <code> czy <pre> co również jest poprawnym zachowanie z perspektywy specyfikacji HTML.

0

@Silent81: Ale w sumie po co chcesz dodawać spację na końcu `inline` code?

Bo kiedy ja chcę napisać coś takiego, to robię "Witaj ", i wtedy widać spację na końcu.

@Adam Boduch: Czyli rozumiem, że gdyby ktoś chciał osiągnąć opisywany efekt to musiałby zrobić takie coś jak poniżej?

`Lorem `&nbsp;ipsum

Lorem  ipsum

1

Możemy zastosować rozwiązanie zaproponowane przez @Silv

Silv napisał(a):

Dodanie deklaracji CSS white-space: pre-wrap do elementu-rodzica tego tekstu wydaje się rozwiązywać problem. Nie wiem jednak, czy czegoś innego to nie zepsuje.

Również nie wiem czy nie ma jakichś "skutków" ubocznych ;)

1

MDN tak pisze o wartości pre-wrap:

pre-wrap

Sequences of white space are preserved. Lines are broken at newline characters, at <br>, and as necessary to fill line boxes.

~ https://developer.mozilla.org/en-US/docs/Web/CSS/white-space

Można porównać to z opisem wartości normal (wartość początkowa):

normal

Sequences of white space are collapsed. Newline characters in the source are handled the same as other white space. Lines are broken as necessary to fill line boxes.

~ https://developer.mozilla.org/en-US/docs/Web/CSS/white-space

Widzę wyraźnie jedną różnicę, dotyczącą ciągów biały znaków: w przypadku normal są one zwijane, a w przypadku pre-wrap są one zachowywane. Nie wiem, czy jest jakaś różnica w przypadku znaków nowych linii, nie umiem porównać tych dwóch opisów.

Co do tej wyraźnej różnicy: nie sądzę, by ciągi białych znaków występowały często w tekstach na 4p. A nawet jeśli jakieś występowały, to użytkownicy pewnie zazwyczaj albo nie zwracali na nie uwagi, albo od razu poprawiali je (bo trudno powiedzieć, czy komuś może się przydać ciąg białych znaków w "zwykłym paragrafie").

1 użytkowników online, w tym zalogowanych: 0, gości: 1