Sto visualizzando articoli su una pagina. I titoli degli articoli a volte si estendono su due righe e possono persino avere una sola parola sulla seconda riga. Questo è molto indesiderabile. Usando jQuery/CSS, quale sarebbe il metodo migliore per determinare a livello di codice una nuova dimensione font per i titoli per tenerli su una riga?Determinare a livello di carattere il carattere per il display a linea singola
risposta
Genere di un hack, ma: Qualcosa di simile si arriva vicino. Probabilmente ha bisogno di un po 'più di tweeking. Fondamentalmente, clona l'elemento e imposta il testo del clone su & nbsp, in modo da avere un'idea di quale sarebbe l'altezza di una linea. Quindi diminuisce la dimensione del carattere dell'elemento finché non diventa più piccolo dell'altezza target.
Ricordare che è necessario allegare questa funzione al ridimensionamento del genitore().
$(document).ready(function() {
$(".shrink").each(function() {
var targetHeight = $(this).clone().html(" ").insertAfter($(this));
while ($(this).height() > targetHeight.height()) {
$(this).css("font-size", parseInt($(this).css("font-size")) - 1);
}
targetHeight.remove();
});
});
Sei sicuro che css ("fontSize") restituirà qualcosa se non è stato precedentemente impostato * con Javascript *? –
Buon punto: l'ho appena testato, restituisce bene. Sono anche andato avanti e ho verificato che restituisce comunque un risultato se non impostato in css, e lo fa. –
Sto solo indovinando qui - Possiamo farlo utilizzando JS per conoscere l'altezza del contenitore del testo e quindi diminuire la dimensione del carattere se necessario? Immagino che questo introdurrà il ridimensionamento dei contenuti della pagina a causa del cambiamento.
Si può semplicemente contare quanti caratteri ci sono nel titolo e calcolare una dimensione del carattere basata su questo. Più caratteri = dimensione del carattere più piccola.
Metterei i tappi su quanto grande e quanto piccola sarebbe la dimensione del font, ma per evitare risultati stupidi.
Una soluzione semplice sarebbe quella di mettere un elemento proprio alla fine della linea e ridurre la dimensione del testo fino a quando il suo offsetHeight era corretto. Per esempio, avvolgere il pieno-stop:
<span id="check">.</span>
È ora possibile controllare dove il vostro punto fermo è, e ridurre le dimensioni del testo fino a quando è più vicino a dove si sperava. Se si imposta l'altezza della linea su questa frase particolare per essere molto grande, sarebbe più facile da determinare.
Il conteggio dei caratteri è una soluzione, ma è necessario tenere conto della larghezza dei caratteri. "W" è più largo di "i", a meno che non utilizzi font a larghezza fissa.
Inoltre, non è possibile garantire che il carattere di vostra scelta sarà disponibile nel browser del cliente, che le sue impostazioni font-size saranno stessi tuo ar, ecc
È possibile, tuttavia, combinare due soluzioni - prima, per esempio, per dimensioni di carattere approssimative usando un algoritmo di conteggio dei caratteri, si supponga che i caratteri abbiano una larghezza fissa e quindi si correggano i calcoli con il lato client js, se js determina che la linea è stata divisa comunque.
Richiede un po 'di messa a punto, ma credo che si possano ottenere risultati accettabili.
Suppongo che tu abbia una dimensione di testo predefinita, quindi impostala e controlla l'offsetHeight dell'elemento. Se si tratta, ovviamente, di due linee, ridurre la dimensione del carattere fino alla offsetHeight riduce drasticamente di circa il 50%
Un esempio utilizzando jQuery ...
var defaultSize = 36; // if title is taller than this, it will be shrinked
$(".articleTitle").each(function() {
var h = $(this).height();
var i = defaultSize;
while(h > defaultSize) {
i--;
this.style.fontSize = i + 'px';
h = $(this).height();
}
});
- 1. . Regex .NET Sostituisci carattere di corrispondenza sconosciuto a linea singola
- 2. Linea carattere di continuazione a Scala
- 3. Come determinare il risultato dell'assegnazione della costante di carattere multi-carattere a una variabile char?
- 4. Il carattere `A` non è implementato per il tipo` A`
- 5. Imposta il carattere del carattere dell'interfaccia utente Segoe a livello di codice
- 6. Modificare un tipo di carattere a livello di codice
- 7. cambiando il carattere del vertsplit di vim a 2
- 8. Determinare a livello di programmazione tramite il browser?
- 9. Sostituire il carattere di virgoletta singola (') da una stringa
- 10. carattere jolly per singola cifra mysql
- 11. Come applicare sia il carattere grassetto che il carattere corsivo a una stringa NSAttributa?
- 12. Cambiare carattere a livello di codice su System Semibold
- 13. goccia linea di log che contiene il carattere hash
- 14. Come cambiare il carattere di un'etichetta al livello di programmazione?
- 15. Aggiungi un nuovo carattere di linea a textarea invece di inviare il modulo
- 16. Determinare se il backup a livello di sistema è abilitato a livello di programmazione
- 17. Utilizzare a livello di codice il carattere di tabulazione in .NET?
- 18. Verificare se il carattere personalizzato può visualizzare il carattere
- 19. codice carattere HTML per sottolineare il carattere successivo
- 20. Leggi il file carattere per carattere in Rust
- 21. Inserire il carattere di ritorno a capo in vim
- 22. Impossibile eliminare il database a causa di carattere non valido
- 23. Nuovo carattere di linea in VB.Net?
- 24. C# applica Colore a Carattere
- 25. NSPredicate corrisponde a qualsiasi carattere
- 26. Decode & # 55357; a carattere reale
- 27. Plist contiene il carattere "&"
- 28. Punto di rottura dell'eclisse in lambda a linea singola/singola?
- 29. Rasoio: come sfuggire il carattere punto accanto a una variabile?
- 30. C++ controlla se il carattere unicode è a larghezza intera
Come sono in stile? Che taglia/unità? –
Pixel, proprio ora. Ma se il metodo richiedesse unità, potrei cambiare. – Sampson
Questo è un duplicato di un'altra domanda: http: // StackOverflow.it/questions/875183/how-to-measure-characters-in-javascript-and-or-with-jquery/875200 # 875200 – Kornel