2017-02-08 20 views
3

私は不均等に分布している単語のパネルを作ろうとしています。段落内の単語間隔をランダム化する方法は?

body { 
 
    width: 500px; 
 
    margin: 50px auto 0; 
 
} 
 
p { 
 
    background: lightgrey; 
 
    padding: 2em; 
 
    font-size: 2em; 
 
    font-family: sans-serif; 
 
    word-spacing: 2em; 
 
    text-align: center; 
 
} 
 
p span { 
 
    font-size: 1em; 
 
    color: white; 
 
}
<p>one two three four five six seven eight nine ten eleven twelve thirteen fourteen <span>fifteen</span> sixteen seventeen eighteen nineteen twenty</p>

しかし、私は」..

random word panel

は、テキスト整列および単語間隔は、私が近づいてきた使用:

はここで非常に基本的なサンプル画像です単語間の間隔をランダム化するのが好きです。これはCSSで可能ですか?私はHTMLを変更することができますが、これらのパネルは動的に生成され、任意の数の単語を持つことができます。

提案がありますか?

Codepen for those who prefer

+0

私は、CSSを使用してそのようなことが実現可能ではないかと思います。 – Chris

+0

ミックスにjavascriptを追加すると、一連の乱数を生成し、各ループにn個のスペースを追加してループすることができます。 – Bardo

+0

@Bardo提案に感謝します。私はそれが事実かもしれないと思った。 CSSをもう少し長く試してみて、どこに行ってもどうか見てください。 – sol

答えて

3

一つの選択肢であるを使用することができ、単にランダムな位置をしました。

var min = 1; 
 
var max = 15; 
 
var newText = $('p').html().replace(/\s/g, function() { 
 
    return " ".repeat(parseInt(Math.random() * (max - min) + min)) 
 
}); 
 
$('p').html(newText)
body { 
 
    width: 500px; 
 
    margin: 50px auto 0; 
 
} 
 
p { 
 
    background: lightgrey; 
 
    padding: 2em; 
 
    font-size: 1.5em; 
 
    font-family: sans-serif; 
 
    text-align: center; 
 
    white-space: pre-wrap; 
 
} 
 
p span { 
 
    font-size: 1em; 
 
    color: white; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p>one two three four five six seven eight nine ten eleven twelve thirteen fourteen <span>fifteen</span> sixteen seventeen eighteen nineteen twenty</p>

+0

ありがとう。私が受け取った両方の答えはうまくいったが、これはエレガントな方法であり、質問にもっと直接的に答えていると思う。 – sol

3

利用JSページ上のランダムな位置を生成します。私はあなたが各単語の間にホワイトスペースの乱数を生成するためにあなたの要素とJSにwhite-space: pre-wrapを使用するために、より複雑なアルゴリズムに

$(document).ready(function() { 
 
    var texts = $('p').text().split(' '); 
 

 
    $('p').text(''); 
 
    $.each(texts, 
 
    function() { 
 
     $('p').append(
 
     $('<span>', { 
 
      text: this, 
 
      "class": this == 'fifteen' ? 'active' : '', 
 
      css: { 
 
      left: Math.floor(Math.random() * $('p').width()), 
 
      top: Math.floor(Math.random() * $('p').height()), 
 
      fontSize: Math.floor(Math.random() * 20) + 10 
 
      } 
 
     }) 
 
    ); 
 
    }); 
 
});
p { 
 
    width: 100%; 
 
    height: 400px; 
 
    position: relative; 
 
} 
 
p span { 
 
    position: absolute; 
 
    font-size: 18px; 
 
    color: #555; 
 
} 
 

 
p span.active { 
 
    color: #00aaff; 
 
    font-weight: bold; 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p>one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty</p>

+0

ありがとう、これは素晴らしいです。私はそれが垂直方向のアライメントをどのように変化させるか(私は要求しなかった)も好きです。私がCSSで何かを見つけることができないなら、私はこのようなものを実装します。アルゴリズムを調整してフォントサイズを変更することも涼しいかもしれません。ありがとうございました – sol

+0

フォントサイズの変更を行っていただきありがとうございます。これはすばらしい解決策ですが、もう少し簡単で、質問された質問に近いので、私はもう1つの答えを選びました。乾杯。 – sol

関連する問題