2017-02-07 12 views
0

単語が1つ以上の音節に分割されていて、複数の場合はハイフンで区切ります。単語を音節に分割し、ハイフンで区切って表示しないでください。

例:Floccinaucinihilipil-ificationをFloccinaucinihilipilificationから取得したいと考えています。

現在のブラウザではハイフンで区切られていますが、文法上の問題はありません。

理由:辞書に表示されていたような用語を表示したいと思います。そこで最も簡単なのは、ブラウザがどのように壊れてしまうかにアクセスすることですが、1行に表示することです。

言い換えれば、少なくとも狭い音節を表示するのに十分なスペースがあれば、ユーザーエージェントに表示されるように単語にアクセスする方法はありますか?

+0

ChromeはMacのみとAndroid上でこれをサポートしています。 http://caniuse.com/#feat=css-hyphens –

+0

https://stackoverflow.com/questions/3738490/finding-line-wraps –

答えて

1

ちょっと面倒なことがあれば、単語の折り返しがどこにあるのかを判断することは可能です。しかし、あなたはまた、プラットフォームとおそらくユーザの言語に依存することができるハイフネーション辞書を持つブラウザに依存している。

これはFirefoxで動作する1つの方法です。私はChromeやWebKitにすべての可能な場所で確実にハイフネーションさせることができず、特定の幅以下のハイフネーションをあきらめただけです。

testbed.innerHTML = testbed.innerHTML.replace(/./g, '<span>$&</span>'); 
 
outer = testbed.getBoundingClientRect(); 
 
match = [...testbed.querySelectorAll('span:not(:first-child)')].filter(e => e.getBoundingClientRect().x == outer.x); 
 
match.forEach(e => e.classList.toggle('match', true)); 
 
output = [...testbed.children].map(e => (e.classList.contains('match') ? '-' : '') + e.textContent).join(''); 
 
console.log(output);
div#testbed { 
 
    width: 0; 
 
    hyphens: auto; 
 
} 
 
span.match { 
 
    background: magenta; 
 
}
<div id=testbed lang=en>Floccinaucinihilipilification</div>

+0

**ワウ!**素晴らしい作品です。このコードをお寄せいただきありがとうございます。私は現時点では完全に理解していませんが、学ぶ機会として捉えています。 – springfeld

0

自動ハイフネーションを使用する場合は、Hyphenatorのようなサードパーティのjsライブラリを使用する必要があります。

&shy;などのマークを手作業でhtml内に配置することができます。

関連する問題