Firefoxのテキストオヌバヌフロヌ、すべお、すべお、すべお

䞀郚のテキストを1行に衚瀺する必芁がある堎合、倚くの堎合、問題が発生する可胜性がありたす。 さらに、テキストは非垞に長くなる可胜性があり、通垞、このテキストが配眮されるブロックの幅は、少なくずもブラりザヌりィンドりず同じサむズによっお制限されたす。 これらの堎合、 text-overflowプロパティが発明されたした。これはCSS3勧告に含たれおおり、かなり前にIE6で最初に実装されたした。 このプロパティがブロックに䜿甚され、そのテキストがブロック自䜓よりも広い堎合、テキストは切り捚おられ、末尟に省略蚘号が蚭定されたす。 ここではすべおがそれほど単玔ではありたせんが、少し埌で説明したす。

Internet Explorerを䜿甚するず、他のブラりザヌはどうですか text-overflowプロパティは珟圚CSS3仕様から陀倖されおいたすが、Safariはそれをサポヌトしおいたす少なくずもバヌゞョン3では、Operaもサポヌトしおいたすバヌゞョン9以降、-o-overflow-textプロパティず呌ばれたす。 Firefox-いいえ、サポヌトしおいたせん。第3バヌゞョンでもサポヌトしおいたせん。 悲しいけれど本圓。 しかし、あなたは䜕かできたすか







もちろん、あなたはそれをするこずができたす。 このプロパティに぀いおむンタヌネットで怜玢したずころ、Firefoxの堎合ず同様に、簡単な解決策がある蚘事に出䌚いたした。 ゜リュヌションの本質

  1. max-widthたたは単にwidthを䜿甚しお、ブロックを幅で制限したす。
  2. ::を䜿甚しお、省略蚘号3぀のドットを含む自動生成コンテンツを䜜成したす。


以䞊です。 蚘事の詳现を読んでください。

解決策は悪くありたせんが、問題がありたす

  1. テキストは、文字の䞭倮盞察的に蚀えばで切り捚おるこずができ、その「切り株」が衚瀺されたす。
  2. テキストがブロックの幅より小さい堎合でも、省略蚘号は垞に衚瀺されたす぀たり、ブロックからドロップアりトされず、省略蚘号は䞍芁です。




最初のステップ





たず、2番目の問題、぀たり、䞍芁な楕円の衚瀺を回避する方法に焊点を圓おたす。 圌の頭を壊しお「少し」実隓しお、解決策を芋぀けたした。 説明しようず思いたす。

䞀番䞋の行は、省略蚘号付きの別のブロックが必芁であるずいうこずです。これは、テキストの幅が倧きくなりすぎた堎合にのみ衚瀺されたす。 それから、私は萜䞋するフロヌティングブロックのアむデアを思い぀きたした。 怖いように聞こえたすが、それは単にそこにあり、右に抌されるブロックを意味したすが、テキストの幅が倧きくなるず、テキストはブロックを次の行に抌したす。

緎習に移りたしょう。さもなければ、説明するのは難しいです。 HTML構造を蚭定したしょう

     <div class = "ellipsis">
       <div>非垞に長いテキスト</ div>
       <div> </ div>
     </ div>


非垞にコンパクトではありたせんが、小さいほど成功したせんでした。 したがっお、ブロックコンテナヌDIV.ellipsis、テキストを含むブロック、および省略蚘号を含む別のブロックがありたす。 テキストをコピヌするずきに䜙分な3぀のドットが必芁ないため、「省略蚘号ブロック」は実際には空であるこずに泚意しおください。 たた、远加のクラスが存圚しないこずを恐れないでください。この構造は、CSSセレクタヌによっお適切に察凊されたす。 CSS自䜓は次のずおりです。

     .ellipsis
     {
      オヌバヌフロヌ非衚瀺。
      空癜nowrap;
      行の高さ1.2em;
      高さ1.2em;
      境界線1pxの赀䞀色;
     }

     .ellipsis> DIV最初の子
     {
       float巊;
     }
     .ellipsis> DIV + DIV
     {
       float右;
      マヌゞントップ-1.2em;
     }
     .ellipsis> DIV + DIV ::埌に
     {
      背景色癜;
      内容 '...';
     }


以䞊です。 Firefox、Opera、Safariが意図したずおりに動䜜するこずを確認したす。 IEでは、非垞に奇劙ですが、予枬可胜な結果が埗られたす。 IE6ではすべおがなくなりたしたが、IE7では生成されたコンテンツをサポヌトしおいないため、動䜜したせん。 しかし、IEに戻りたす。



それたでの間、䜕が行われたかを分析したす。 最初に、ブロックの高さずテキスト行の高さを知る必芁があるため、メむンブロックの行の高さず高さを蚭定したす。 margin-topブロックに同じ倀を省略蚘号で蚭定したすが、負の倀を蚭定したす。 したがっお、ブロックが次の行に「ドロップ」されない堎合は、テキストの行1行より䞊になり、リセットされるずそのレベルになりたす実際、それは䜎くなり、1行だけ匕き䞊げられたす。 特に省略蚘号を衚瀺する必芁がない堎合に䞍芁な非衚瀺を非衚瀺にするために、オヌバヌフロヌを実行したす。メむンブロックでは非衚瀺になりたす。 これにより、ブロックの倖偎右偎にあるテキストを削陀するこずもできたす。 テキストが突然ラップしおブロックを抌し䞋げないようにするために、ホワむトスペヌスnowrapを実行し、ハむフンを犁止したす-テキストは垞に1行になりたす。 テキストを含むブロックの堎合は、floatleftを蚭定しお、ブロックを省略蚘号ですぐにダンプしお最小幅を占有しないようにしたす。 䞡方のブロックがメむンブロックDIV.ellipsis内でフロヌティングフロヌト巊/右であるため、テキストのあるブロックが空の堎合、メむンブロックは折りたたたれたす。そのため、メむンブロックの高さを固定したす高さ1.2em。 そしお最埌に、擬䌌芁玠::を䜿甚しお、省略蚘号を衚瀺したす。 この擬䌌芁玠では、背景を蚭定しお、その䞋に衚瀺されるテキストずオヌバヌラップさせたす。 メむンナニットのフレヌムを蚭定したす。これは、ナニットの寞法を確認するためだけで、埌で削陀したす。

Firefoxが、OperaやSafariなどの疑䌌芁玠をサポヌトしおいる堎合ポゞショニングposition / floatなどのゞョブ、省略蚘号に別のブロックを䜿甚しないこずが可胜です。 最埌の3぀のルヌルを次のものに眮き換えおみおください。

     .ellipsis> DIV最初の子::埌
     {
       float右;
      内容 '...';
      マヌゞントップ-1.2em;
      背景色癜;
      䜍眮盞察;
     }


OperaずSafariを芋るず、すべおが以前ず同じように機胜し、省略蚘号付きの远加ブロックはありたせん。 ただし、Firefoxは残念です。 しかし、私たちが決定するのは圌のためです。 さお、元のHTML構造を䜿甚する必芁がありたす。



第二段階





お気づきかもしれたせんが、テキストがブロックに収たる堎合の省略蚘号の倖芳の問題を取り陀きたした。 ただし、もう1぀問題がありたす。テキストは文字の途䞭で途切れたす。 たた、これはIEでは機胜したせん。 䞡方を克服するには、ブラりザにネむティブのテキストオヌバヌフロヌルヌルを䜿甚する必芁があり、Firefoxに察しおのみ䞊蚘の゜リュヌションを䜿甚したす代替手段はありたせん。 「Firefoxのみ」の゜リュヌションを䜜成する方法に぀いおは埌ほど説明したすが、テキストオヌバヌフロヌを䜿甚しお機胜するものを取埗しおみたしょう。 CSSの調敎

     .ellipsis
     {
      オヌバヌフロヌ非衚瀺。
      空癜nowrap;
      行の高さ1.2em;
      高さ1.2em;
      境界線1pxの赀䞀色; 
      テキストオヌバヌフロヌ省略蚘号。
       -o-text-overflow省略蚘号;
      幅100; 
     } 
     .ellipsis *
     {
      衚瀺むンラむン;
     }

     / * 
     .ellipsis> DIV最初の子
     {
       float巊;
     }
     .ellipsis> DIV + DIV
     {
       float右;
      マヌゞントップ-1.2em;
     }
     .ellipsis> DIV + DIV ::埌に
     {
      背景色癜;
      内容 '...';
     } 
     * /


結局のずころ、あたり線集したせん。 本䜓のスタむルに3行が远加されたした。 それらの2぀には、テキストオヌバヌフロヌが含たれたす。 IEには幅を100に蚭定する必芁がありたす。これにより、テキストがブロックを無限に抌し出さず、text-overflowプロパティが機胜したす。 実際、幅は制限されおいたす。 原則ずしお、DIVはすべおのブロック芁玠ず同様に、コンテナヌの幅党䜓に匕き䌞ばされ、幅100は圹に立たず、有害でさえありたすが、IEはレむアりトの問題を抱えおいたす。 䞀郚のブラりザSafariおよびOperaでは、ブロック芁玠があるため、テキストオヌバヌフロヌが機胜しない堎合があるため、すべおの内郚芁玠もむンラむンにしたした。 最埌の3぀のルヌルに぀いおコメントしたした。この堎合、それらは必芁ではなく、すべおを壊す競合ためです。 これらのルヌルは、Firefoxでのみ必芁になりたす。

䜕が起こったのかを芋お、続けたしょう 。





第䞉段階





冒頭で述べたペヌゞこの蚘事を曞く前にをもう䞀床芋たずき、興味のあるこずを考えお、巧劙な関連アむデアの䞻題に぀いおのコメントに目を通したした。 そしお、コメントで、FirefoxずIEで動䜜する別の゜リュヌションに関する興味深いリンクを芋぀けたした明らかに、この人物ず最初の蚘事の著者には、他のブラりザヌは存圚したせん。 そのため、この゜リュヌションでは、必芁に応じお省略蚘号を挿入する必芁がある芁玠のオヌバヌフロヌむベントずアンダヌフロヌむベントにハンドラヌを掛けるこずで、この珟象テキストオヌバヌフロヌの欠劂ず著者は異なる方法で戊いたす。 悪くはありたせんが、この゜リュヌションはリ゜ヌスの点で非垞に高䟡なようです。 しかし、圌がこれをどのように達成したかを理解するず、興味深いこずに遭遇したした。぀たり、CSS -moz-bindingプロパティです。 私が理解しおいるように、これはIEのアナログ動䜜であり、゜ヌスが異なるだけです。 ただし、詳现には觊れたせん。この方法では、CSSを䜿甚しお芁玠にJavaScriptハンドラヌを掛けるこずができるずのみ蚀いたす。 奇劙に聞こえたすが、動䜜したす。 私たちがするこず

     .ellipsis
     {
      オヌバヌフロヌ非衚瀺。
      空癜nowrap;
      行の高さ1.2em;
      高さ1.2em;
      境界線1pxの赀䞀色;
      テキストオヌバヌフロヌ省略蚘号。
       -o-text-overflow省略蚘号;
      幅100; 
       -moz-bindingurlmoz_fix.xml省略蚘号;
      ズヌム1; 
     }
     .ellipsis *
     {
      衚瀺むンラむン;
     }
    
     .moz-ellipsis> DIV最初の子 
     {
       float巊; 
      ディスプレむブロック; 
     } 
     .moz-ellipsis> DIV + DIV 
     {
       float右;
      マヌゞントップ-1.2em; 
      ディスプレむブロック; 
     } 
     .moz-ellipsis> DIV + DIV ::埌 
     {
      背景色癜;
      内容 '...';
     }


ご芧のずおり、ここでも倚くの倉曎を加えおいたせん。 IE7のこのステップでは、奇劙なグリッチがありたす。ズヌムを蚭定しないず、すべおがゆがみたす。メむンナニットに1最も簡単なオプションを蚭定したす。 ルヌル.ellipsis *たたは.moz-ellipsis> DIV + DIVIE7にはたったく関係ありたせんルヌルを削陀削陀、コメントアりトするず、グリッチは消えたす。 これはすべお奇劙です。誰かが問題を知っおいるなら、私に知らせおください。 それたでの間、ズヌム1を回避しお、Firefoxに進みたす。

-moz-bindingプロパティには、省略蚘号識別子を含むmoz_fix.xml呜什ファむルが含たれたす。 このxmlファむルの内容は次のずおりです。

 <xml version = "1.0">
 <bindings xmlns = "http://www.mozilla.org/xbl" xmlnshtml = "http://www.w3.org/1999/xhtml">

 <binding id = "ellipsis" applyauthorstyles = "false">
	 <実装>
		 <constructor> <[CDATA [
			 this.style.mozBinding = '';
			 this.className = this.className + 'moz-ellipsis';
		 ]]> </ constructor>
	 </ implementation>
 </ binding>

 </ bindings>


このコンストラクタヌが行うこずは、セレクタヌが機胜した芁玠にmoz-ellipsisクラスを远加するこずだけです。 これはFirefoxgeckoブラりザヌでのみ機胜するため、moz-ellipsisクラスが芁玠に远加されるだけで、このクラスに远加のルヌルを远加できたす。 圌らは䜕を達成したした。 this.style.mozBinding = ''の必芁性に぀いおはよくわかりたせんが、衚珟の経隓からは安党にプレむする方が良いです䞀般的に私はFirefoxのこちら偎に慣れおいないので、誀解される可胜性がありたす。

この手法では倖郚ファむルず䞀般的にJavaScriptを䜿甚するこずに泚意しおください。 怖がらないでください。 たず、ファむルがロヌドされず、JavaScriptが無効になっお動䜜しない堎合、倧䞈倫です。ナヌザヌは最埌に省略蚘号が衚瀺されず、テキストはブロックの最埌で切り取られたす。 ぀たり、この堎合、「邪魔にならない」゜リュヌションが埗られたす。 あなた自身で芋るこずができたす。



したがっお、Opera、Safari、およびIEのテキストオヌバヌフロヌを実装するBig Fourブラりザヌのスタむルを取埗し、Firefoxで゚ミュレヌトしたす。



第4ステップ





この堎所に終止笊を打぀こずは可胜ですが、私たちの゜リュヌションを少し改善したいず思いたす。 任意のブロックにコンストラクタヌをハングさせお、それに応じお制埡を取埗できるので、それを利甚しおみおください。 構造を簡玠化したす。

     <div class = "ellipsis">非垞に長いテキスト</ div>


そうそう あなたは私に同意するず思いたす-これはあなたが必芁なものです

次に、スタむルから䞍芁なものをすべお削陀したしょう。

     .ellipsis
     {
      オヌバヌフロヌ非衚瀺;
      空癜nowrap;
      行の高さ1.2em;
      高さ1.2em;
      テキストオヌバヌフロヌ省略蚘号。
       -o-text-overflow省略蚘号;
      幅100;
       -moz-bindingurlmoz_fix.xml省略蚘号;
     }

     .moz-ellipsis> DIV最初の子
     {
       float巊;
     }
     .moz-ellipsis> DIV + DIV
     {
       float右;
      マヌゞントップ-1.2em;
     }
     .moz-ellipsis> DIV + DIV ::埌
     {
      背景色癜;
      内容 '...';
     }


最埌に赀いフレヌムを削陀したした:)

そしお、moz_fix.xmlを少し远加したしょう。

 <xml version = "1.0">
 <bindings xmlns = "http://www.mozilla.org/xbl" xmlnshtml = "http://www.w3.org/1999/xhtml">

 <binding id = "ellipsis" applyauthorstyles = "false">
	 <実装>
		 <constructor> <[CDATA [
			 関数ブロック{
				 setTimeout関数{
					 block.style.mozBinding = '';
  					 var t = document.createElement 'DIV';
					 whileblock.firstChild
				  		 t.appendChildblock.firstChild;
					 block.appendChildt;
					 block.appendChilddocument.createElement 'DIV';
					 block.className = block.className + 'moz-ellipsis';
				 }、0;
			 }this;
		 ]]> </ constructor>
	 </ implementation>
 </ binding>

 </ bindings>


ここで䜕が起こっおいたすか 最初のHTML構造を再䜜成したす。 ぀たり、ブロックに関するこれらの問題は、Firefoxでのみ自動的に行われたす。 JavaScriptコヌドは最高の䌝統で曞かれおいたす:)

残念ながら、手玙の途䞭でテキストが途切れる状況を避けるこずはできたせんただし、おそらく、䞀時的に、私の決定はただ非垞に粗雑であり、将来的には解決する可胜性がありたす。 しかし、この効果を少し滑らかにするこずができたす。 これを行うには、画像透明なグラデヌションのある癜い背景ずスタむルのいく぀かの倉曎が必芁です。

     .moz-ellipsis> DIV最初の子
     {
       float巊; 
      マヌゞン右-26px; 
     }
     .moz-ellipsis> DIV + DIV
     {
      フロヌト右;
      マヌゞントップ-1.2em; 
      背景urlellipsis.pngrepeat-y;
      パディング巊26px; 
     }


私たちは人生を芋お楜しんでいたす。



これで終わりたす。



おわりに





サヌドパヌティのレむアりトの小さな䟋を瀺したす。 Wikipediaペヌゞの 1぀最初に衚瀺されたペヌゞ の目次を取埗し、䞊蚘の方法を適甚したした。

䞀般に、この゜リュヌションは、ストレッチを䜿甚する堎合にのみナニバヌサルず呌ぶこずができたす。 それはすべお、レむアりトずその耇雑さに䟝存したす。 ファむルたたはタンバリンが必芁になる堎合がありたす。 ほずんどの堎合、うたくいくず思いたす。 そしお、あなたは今出発点を持っおいたす;

この蚘事から、おもしろくお䟿利なこずを孊んだこずを願っおいたす。

頑匵っお




All Articles