2016-08-17 10 views
4

私はレスポンスフッタを作成しようとしていますが、これは他の応答要素にとっても面白いかもしれません。改行後の要素を隠す

行がその位置で壊れている場合、要素を非表示にする可能性はありますか?

<footer> 
John Doe · Main Street 123 · Sometown · +12 3456 789 
</footer> 

私は、ワイドスクリーン用にしたい:

John Doe · Main Street 123 · Sometown · 012 3456 789 

そして、例えば小さい画面用:

John Doe · Main Street 123 · Sometown 
012 3456 789 

または

John Doe · Main Street 123 
Sometown · 012 3456 789 

など

したがって、改行が必要なときに分割線が消えると、分割線が消え、線の終わりまたは開始時には見えなくなります。

編集:いくつかの可能なマークアップ

<footer> 
John&nbsp;Doe<span class="hide-when-linebreak"> · </span>Main&nbsp;Street&nbsp;123<span class="hide-when-linebreak"> · </span>Sometown<span class="hide-when-linebreak"> · </span>+12&nbsp;3456&nbsp;789 
</footer> 

は、このための任意の解決策を見つけていない、多分起動する方法のアイデアがありますか?あなたが動的にページのロードやウィンドウのすべてのサイズ変更にフッターの内容を設定するには、このJavaScript関数を使用することができ

Thxを

+0

まず第一に、あなたはので、ここで非表示にする任意の個々の要素を_have_ませんこれは単なる1行のテキストです。最初に適切なHTML構造を作成し、CSSを介してそれらの箇条書きを挿入する必要があります。 //(現在) "行の最初の要素"であるということに基づいて要素を選択する方法はCSSにはありません。ネガティブマージンと隠れたオーバーフローを使って何らかの形でエフェクトを偽造することは可能かもしれません。 – CBroe

+0

しかしまず第一に、私はあなたの_ "もう必要ではありません"と挑戦します。それらの弾丸が異なる意味を持つコンテンツ部分を互いに光学的に分離する必要がある場合、私はあなたがラインの最後であってもそれらをそのまま残すべきだと主張します。そうでなければ、純粋に改行に頼って、異なる意味のテキスト部分の分離を伝えます。それはちょっと薄いものです。私は、これらの場合には弾丸が常に行末にとどまることを知ります。次のものの始まりに壊れません。 – CBroe

+4

私はこの状況に直面する可能性があるので、大きな疑問に思っています。私はCSSやjavascriptに関係なく答えを検索しますが、この状況は100%有効な状況+1 –

答えて

3

$(window).on('resize load', function() { 
 
    var footer = 'John Doe · Main Street 123 · Sometown · +12 3456 789' + 
 
       ' · [email protected] · www.example.com'; 
 
    footer = footer.trim().replace(/&/g, '&amp;') // encode HTML entities 
 
          .replace(/</, '&lt;') 
 
          .replace(/([^·])\s+/g, '$1&nbsp;'); // don't allow breaks here 
 
    var $footer = $('footer'); 
 
    var html = ''; // actual content to be put in footer 
 
    var height = 0; // actual height of the footer 
 
    footer.split(/· /).forEach(function (part, i) { 
 
     $footer.html(html + (i ? '· ': '') + part); // try, and see what we get 
 
     // Depending on height increase, place a break or a non-breaking space 
 
     $footer.html(html += (i ? ($footer.height() > height ? '<br>' : '·&nbsp;') : '') 
 
          + part); 
 
     height = $footer.height(); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<footer></footer>

0

あなたはそれを行うことはできません1話あたりの改行に基づいていますが、単純なメディアクエリを使用してもほぼ同じ効果を達成できます。

編集:StackOverflowのブレークポイントでは動作しないように見えます...ここにペンがあります:http://codepen.io/memoblue/pen/oLVEOX

div { 
 
    display: inline; 
 
} 
 

 
@media (max-width: 600px) { 
 
    div { 
 
    display: block; 
 
    } 
 
    .sm-hidden { 
 
    display: none; 
 
    } 
 
}
<footer> 
 
    <div>John Doe · Main Street 123 <span class="sm-hidden">·</span></div><div> Sometown · +12 3456 789</div> 
 
</footer>

+0

ありがとう、それも試しました。はい。しかし、悲しいことに、これは単語の長さとフォントサイズを知っている場合にのみ機能します。 – Matthias

+0

。しかし、この場合はデザインが賢明ですが、コンテンツにレイアウトを指示させるのではなく、いくつかのブレークポイントでコンテンツをより厳格なものにする方が良いと思います。私はあなたがそれをショットを与え、それがどのように見えるかをお勧めしたい:)トリックは、ブレークポイントの右のコンボを見つけることです... – memo