2017-02-08 2 views
3

Ich versuche, ein Feld von Wörtern zu machen, die ungleich verteilt sind.Wie Randomise Wortabstand in einem Absatz?

Hier ist ein sehr einfaches Beispielbild:

random word panel

Verwenden von text-align und Wortabstand ich in der Nähe bin gekommen ..

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>

aber ich d mag den Abstand zwischen Wörtern zufällig randomisieren. Ist das mit CSS möglich? Ich bin offen für die Änderung der HTML, aber diese Panels sind dynamisch generiert und könnte eine beliebige Anzahl von Wörtern haben.

Irgendwelche Vorschläge?

Codepen for those who prefer

+0

Ich fürchte, mit CSS so etwas nur nicht erreichbar. – Chris

+0

Wenn Sie Javascript zu der Mischung hinzufügen, können Sie eine Reihe von Zufallszahlen generieren und diese durchlaufen, indem Sie in jeder Schleife n Leerzeichen hinzufügen. – Bardo

+0

@Bardo Vielen Dank für den Vorschlag. Ich dachte, das könnte der Fall sein. Ich werde noch ein bisschen länger mit dem CSS spielen und sehen, ob ich irgendwo hinkomme. – sol

Antwort

3

Eine Option ist white-space: pre-wrap auf Ihrem Element verwenden und js zwischen den einzelnen Wörtern Zufallszahl der weißen Räume zu erzeugen.

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

Danke. Beide Antworten, die ich erhalten habe, haben funktioniert, aber ich denke, das ist eine elegante Methode und beantwortet die Frage direkter. – sol

3

Verwenden JS zufällige Position auf Seite zu generieren. Ich habe einfach zufällige Position, können Sie komplexeren Algorithmus

$(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

Danke, das ist großartig. Ich mag, wie es auch die vertikale Ausrichtung ändert (was ich nicht einmal verlangt habe). Wenn ich nichts mit CSS finden kann, werde ich so etwas implementieren. Es könnte cool sein, den Algorithmus anzupassen, um auch die Schriftgröße zu ändern. Danke nochmal – sol

+0

Danke für den aktualisierten Code mit Schriftgrößenänderung. Dies ist eine großartige Lösung, aber ich habe die andere Antwort gewählt, da sie etwas einfacher und näher an der gestellten Frage ist. Prost – sol

Verwandte Themen