Domanda

Ho un tag cloud e ho bisogno di sapere come posso cambiare il font-size per i tag più utilizzati.

Ho bisogno di impostare un min-font-size e di un max-font-size.

È stato utile?

Soluzione

Si potrebbe utilizzare una valutazione lineare o logaritmico del numero di elementi associati a un determinato tag relativo al più grande etichetta, moltiplicarlo per la differenza tra le dimensioni massime dei caratteri minimi e, quindi aggiungerlo alla dimensione del font minimo. Ad esempio, la matematica in pseudocodice potrebbe essere:

let min = 12, max = 24
for each tag
    font = (items / items in biggest tag) * (max - min) + min

Altri suggerimenti

Per rendere @ risposta di Delan più chiaro ho creato alcuni esempi in lingue mi è familiare.

esempio in Javascript

var tags =
[
    { Name: "c#", Uses: 100 },
    { Name: ".net", Uses: 75 },
    { Name: "typescript", Uses: 50 },
    { Name: "lua", Uses: 50 },
    { Name: "javascript", Uses: 25 },
    { Name: "jquery", Uses: 1 },
    { Name: "c++", Uses: 0 },
];

var max = 100; // Should be computed
var min = 0;   // Should be computed

var fontMin = 10;
var fontMax = 20;

for (var i in tags)
{
    var tag = tags[i];

    var size = tag.Uses == min ? fontMin
        : (tag.Uses / max) * (fontMax - fontMin) + fontMin;
}

Esempio in C #

var tags = new List<Tag>
{
    new Tag { Name = "c#", Uses = 100 },
    new Tag { Name = ".net", Uses = 75 },
    new Tag { Name = "typescript", Uses = 50 },
    new Tag { Name = "lua", Uses = 50 },
    new Tag { Name = "javascript", Uses = 25 },
    new Tag { Name = "jquery", Uses = 5 },
    new Tag { Name = "c++", Uses = 5 },
};

int max = tags.Max(o => o.Uses);
int min = tags.Min(o => o.Uses);

double fontMax = 20;
double fontMin = 10;

foreach (var tag in tags)
{
    double size = tag.Uses == min ? fontMin
        : (tag.Uses / (double)max) * (fontMax - fontMin) + fontMin;
}

Prova:

<div data-i2="fontSize:[10,30]">
    <span data-i2="rate:1">A</span>
    <span data-i2="rate:4">B</span>
    <span data-i2="rate:7">C</span>
    <span data-i2="rate:12">G</span>
    <span data-i2="rate:5">H</span>
</div>

Poi

i2.emph();

http://jsfiddle.net/EUaC5/1/

sono arrivato fino a questo:

max_word_count = 412  # should count from list
min_word_count = 44   # should count from list
difference = max_word_count - min_word_count
min_weight = 99 / difference * min_word_count

for each tag
    weight = 99 / difference * this_word_count - min_weight + 1

Il che mi ha dato ha pesato le parole tra 1 e 100. Funziona perfettamente per me in znaci.net/arhiv.

NOTA BENE:. Io non sono bravo in matematica

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top