Moc děkuji za tento seriál. Srozumitelně a nenásilně vysvětluje typografické základy, spoustu jsem toho nevěděl.
Zajímalo by mě, zda existuje nějaký jednoduchý (tzn. jen HTML/CSS, bez použití JS) a spolehlivý způsob, jak zachovat správné zalamování řádků českého textu (tedy bez jednopísmenných slov na konci řádku atd.) u responzivního designu. Manuálně to nelze (při změně šířky stránky by se to rozpadlo).
A další věc, se kterou často bojuji, je přesný tisk textu z prohlížeče. Typicky třeba smlouvy. Různé prohlížeče (a na různých OS) produkují různé výsledky. Existuje nějaký způsob, jak získat alespoň z 90% stejný výstup?
Reseni je snadne, musis naucit browser sazet cestinu. A protoze by pak musel umet sazet i vsechny dalsi potencielni jazyky, nikdo to neresi.
Jinak to samozrejme muzes (castecne a v mezich) resit tim, ze do html vlozis prislusne hinty na tema nedelitene mezery a podobne. Problem je pak typicky v tom, ze ti vznikaji radky s jednim slovem a podobne zhuverilosti, ktere vypadaji jeste mnohem hur, nez kdyz to neresis.
BTW: js to samozrjeme nijak neresi, pokud ovsem v tom js nenapises kompletni sazbu. A ani to ti stejne nepomuze, protoze ty nevis a nemas jak zjistit spoustu informaci, ktere pro tu sazbu potrebujes.
To se řeší úpravou textu před publikováním (ať už manuálně nebo automaticky) – v místech, kde se nemá text dělit (nejen neslabičné předložky a spojky, ale třeba také čísla a jednotky apod.) se vloží neoddělitelná mezera (někdy se jí říká „tvrdá mezera“, non-breaking space). Pak je ještě dobré zapnout hyphens: auto
a doufat, že prohlížeč bude podporovat dělení slov pro váš jazyk, případně v problematických slovech vyznačit místa možného dělení ručně (pomocí znaku soft hyphen, volitelného rozdělení).
Tisk se dá nastylovat stejně, jako zobrazení pro obrazovku. Pomocí media queries se jen určí, že se daný styl má použít pro tisk.
Ano, řeší se to tak, ale problém to nevyřeší. Navíc vkládat nbsp všude tam, kde se to nesmí zalomit, je neuvěřitelná práce, u delších textů v podstatě nemožná. A to se bavíme jen o pevně daném textu. V případě, že se text může měnit, není reálné nedělitelné mezery vkládat.
Totéž tisk. Samozřejmě znám a používám media queries, ale ani tak nejsou tiskové výstupy stejné, liší se nejen mezi jednotlivými OS, ale dokonce i mezi browsery v rámci stejného OS.
OK, beru to tak, že snadné řešení prostě neexistuje. Za mě by to měly řešit prohlížeče, tak, jako to dělají textové procesory. Ale to je asi sci-fi.
Uz v dobach DOSu jsem pouzival program vlnka, ktery automaticky doplnil nezalomitelne mezery pro vsechny jednopismenkove predlozky, jako priprava pro sazbu LaTeXem. Fungovalo to tak na 99.9 % spravne. Prijde mi zvlastni, ze by na tohle neexistoval nejaky frikulinsky javascript pro browsery? Ta vlnka to i v dlouhem (>100 stran) textu udelala velmi rychle, v dobach prvnich pentii, tak predpokladam ze i pres pomalost javascriptu by to mohly dnesni pocitace zvladnout v nepostrehnutelnem case?
Ty neoddělitelné mezery problém řeší. A když vy chcete, aby to prohlížeč dělal automaticky, stejně tak to můžete dělat automaticky před publikováním. Takže to není nemožné. Naopak to jako autor máte v ruce a můžete to dělat přesně podle svých potřeb, nenechávat to na nějakém automatu v prohlížeči. Reálné to je i když se může text měnit. I pokud ten text mění uživatel, pořád tam při ukládání můžete pustit nějaký automat, který může fungovat přinejlepším stejně dobře, jako by fungoval automat v prohlížeči.
Textové procesory to řeší z titulu toho, že ten text editují, ne že ho zobrazují. A na webu tu možnost řešit to při editaci máte.
To, že se stránky zobrazují různě v různých prohlížečích, když to nepředefinujete pomocí stylů, je normální – prohlížeče mají různé výchozí styly. To samozřejmě platí i pro tiskové styly. Neuvedl jste žádný konkrétní příklad, ale nemyslím si, že by nešlo stránky nastylovat tak, aby vypadaly ve všech moderních prohlížečích stejně. Leda byste použil nějaký styl, který zatím podporuje jeden prohlížeč a jiný ne.
Já netvrdím, že to nejde udělat. Já jsem napsal, že mě zajímá, zda se to dá udělat čistě pomocí HTML/CSS, bez JS nebo skriptu na straně serveru. Já vím, že se to ručně (víceméně) nebo aplikací třetí strany dá provést, a asi i automatizovat, tak mě o tom prosím pořád dokola nepřesvědčujte. Občas jsou vaše příspěvky v diskuzích k věci a mají hlavu a patu, ale jindy se za každou cenu snažíte přesvědčit ostatní, že máte pravdu vy. Což je myslím tento případ, ale pro mě je to uzavřená věc, můžete si ušetřit další energii. Děkuji.
20. 9. 2024, 15:29 editováno autorem komentáře
Když napíšete „nelze (rozpadlo by se to)“ a „neuvěřitelná práce“, nemůžete se divit, že si to někdo vykládá tak, že tvrdíte, že to nejde.
Řešení s vkládáním neoddělitelných mezer do HTML je správné a je to to nejlepší možné řešení, protože to máte jako autor v rukou a je jen na vás, jak kvalitně to uděláte. Že vám se to nelíbí není můj problém.
Nikoli, prohlížeč odpovídá spíš tiskárně – podle pokynů sazeče to zobrazí. Že dříve sazeč sázel text do jednoho layoutu, takže mohl třeba neslabičné předložky a spojky uvnitř řádku zanedbat? Ano, mohl, dnes musí myslet na to, že se řádek či stránka může zalomit kdekoli. Je to pracnější, v prohlížečích nejde dělat tak kvalitní typografii, jako při sazbě do jednoho konkrétního zrcadla – ale ve skutečnosti HTML+CSS pořád dává víc možností řešit typografii, než kolik se reálně na webu používá.
Nelíbí se mi jen to, že za plnohodnotné řešení vydáváte něco, co jím zdaleka není. Například pokud budu mít v zadání "formátovat odstavce do bloků", nedělitelné mezery to rozbijí, resp. to bude vypadat hnusně, protože některá slova budou slepená např. se spojkami.
A ano, JE to neuvěřitelná práce, protože i kdybych na předformátování použil nějakou aplikaci třetí strany, tak se potom orientovat v HTML kódu, který je zaplaven nbsp; značkami je opravdu chuťovka. Obzvláště pokud jde třeba o šablonu smlouvy na 5 stran A4.
Nehledě na to, že určité části textu mohou být formátovány jinak než zbytek, mohou tam být vynucená zalomení řádků, vložené konstanty a proměnné, jejichž obsah není předem znám a čte se z databáze atd atd atd.
Takže ne, vaše řešení není to nejlepší možné. Je to jen jediný postup, který je momentálně k dispozici, ale problém to zdaleka neřeší. Čisté řešení by bylo, kdyby to správně vysázel browser, a je jedno, jestli by to uměl sám od sebe, nebo by mu to definovala nějaká vlastnost CSS.
Jenže ono to plnohodnotné řešení je. Problém je v něčem jiném – že vy se v tom neorientujete.
Formátování odstavce do bloku nic nerozbije. To, že budou slova slepená s neslabičnými slovy, tedy budou na stejném řádku, je záměr – proto se tam ta neoddělitelná mezera dává. Protože když to nebude na jednom řádku, zůstalo by neslabičné slovo na konci řádku a navazující slovo by bylo až na dalším řádku. A to je přesně to, čemu se chceme vyhnout.
Pokud jste tím „slepené“ myslel to, že tam budou mezery pevné šířky, zatímco ve zbytku odstavce bude šířka mezer proměnlivá, pak se mýlíte. Spletl jste si neoddělitelnou mezeru s mezerou pevné šířky. Neoddělitelná mezera je stejně pružná, jako klasická mezera.
Neuvěřitelná práce to není. Nemáme devadesátá léta, takže text nebude zaplaven entitami . Píše se rok 2024, už dost dlouho tu máme Unicode, které má neoddělitelnou mezeru a mnohé další mezery v sobě. Třeba úzkou neoddělitelnou mezeru, kterou oddělíte jednotlivé části data psaného čísly. Nebo „číselnou mezeru“ (figure space), kterou použijete pro oddělení skupin řádů v číslech („oddělovač tisíců“).
Určité části textu vskutku mohou být formátovány jinak, než zbytek textu. Právě proto to musí být autor, který určí, co má jak vypadat. Prohlížeč nemá křišťálovou kouli, aby vytušil záměr autora.
Data uložená v databázi mohou rovněž obsahovat různé typy mezer, nebo je tam můžete doplnit automaticky před vložením do HTML (když máte ten automat, který by v prohlížeči některé mezery nahrazoval nezlomitelnými mezerami).
Takže ano, moje řešení je nejlepší možné. Váš postup problém neřeší, v tom máte pravdu. Já jsem ale myslel jiný postup, který odpovídá roku 2024, a který jsem výše popsal. Kdyby se to pokoušel dělat prohlížeč sám od sebe, bude to ve spoustě případů špatně. Určitě by to nedělal lépe, než to může udělat autor webu. Tak proč to řešit v prohlížeči, když už máme řešení, které může být stejně dobré, jako to v prohlížeči, ale může být i lepší?
Jestli vám vadí zobrazení speciálních znaků ve zdrojovém kódu, tak si ho vypněte. Ale vy budete tvrdit, že pak sice ve zdrojovém kódu pohledem nerozpoznáte běžnou mezeru od nezlomitelné, ale budete vědět, že tam někde ty nezlomitelné mezery jsou, takže je to stejně pořád nepřehledné.
Pokud znáte rozdíl mezi nezlomitelnou mezerou a mezerou s pevnou šířkou, pak nerozumím tomu, proč píšete nesmysly o slepení slov se spojkami.
Neoddělitelná mezera je stejně pružná, jako klasická mezera.
No - vysvětlujte to textovým editorům... ;oD
Píše se rok 2024, už dost dlouho tu máme Unicode, které má neoddělitelnou mezeru a mnohé další mezery v sobě.
A proto, když vezmete pěkně zformátovaný text z officeového textového editoru, a clipboardem ho vložíte do formuláře redakčního systému, se drtivá většina tohoto formátování ztratí - dílem ji sežere clipboard, zbytek zredukuje kontrola validity vstupu. ;o)
No - vysvětlujte to textovým editorům... ;oD
Textový editor nepotřebuje pružnou šířku mezer, protože nezobrazuje text zarovnaný do bloku ani nic podobného. Pokud jste myslel textový procesor – textové procesory holt nejsou sázecí programy, i když se tak tváří.
dílem ji sežere clipboard
Clipboard nic nesežere. Clipboard jen zprostředkovává komunikaci mezi zdrojovým a cílovým programem. Záleží na cílovém programu, který z formátů obsahu, který nabídl zdrojový program, si vybere a jak ho použije.
Mohlo mne napadnout, že tu někdo bude slovíčkařit...
Přestože textové procesory opravdu nejsou sázecí programy, drtivá většina textů dostane svou finální úpravu právě zde, a skončí na laserové tiskárně nebo vyexportované v PDF - s úzkými nedělitelnými mezerami mezi pružnými mezerami u blokově zarovnaných řádků.
Běžný uživatel si s hledáním pružných nedělitelných mezer hrát nebude.
Clipboard není vždy pouhý zprostředkovatel komunikace - proto lze mít v paměti i text ze zavřeného programu.