[HTML] Line-height non funziona ç_ç

  • Creatore Discussione Creatore Discussione Koboshi
  • Data di inizio Data di inizio

Koboshi

Nuovo Utente
7 Mag 2018
9
0
1
33
Ciau a tutti! Avevo bisogno di creare un tastino scroll-to-top per l'e-commerce che sto curando al momento. Per realizzarlo ho creato un div tondo con all'interno un'icona tonda, entrambi delle stesse dimensioni. L'icona è una della libreria di font awesome e di conseguenza si comporta come testo quindi per centrarla verticalmente ho usato line-height solo che dall'alto dell'icona spunta uno "spicchio" di div. Qualcuno di voi saprebbe dirmi come mai? Vi allego il codice e spero che qualcuno di voi possa aiutarmi a venir a capo del mio problema. Ringrazio sin da ora chiunque di voi vorrà provarci.

HTML:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Documento senza titolo</title>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous">
<style>
#toTop {
    display: none;
    position: fixed;
    bottom: 20px;
    right: 30px;
    z-index: 99;
    background-color: #FFFFFF;
    color: #ffc11e;
    cursor: pointer;
    font-size: 40px;
    border-radius: 50%;
    height: 40px;
    width: 40px;
    line-height: 40px;
}
#toTop:hover {
    background-color: #ffc11e;
    color: #fff;
}
</style>
</head>
<body>
    
<div onClick="topFunction()" id="toTop" title="Go to top"><i class="fas fa-chevron-circle-up"></i></div>
    
    <div style="min-height: 2500px; background-color: #ccc"></div>

<script>

window.onscroll = function() {scrollFunction()};

function scrollFunction() {
    if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) {
        document.getElementById("toTop").style.display = "block";
    } else {
        document.getElementById("toTop").style.display = "none";
    }
}

function topFunction() {
    document.body.scrollTop = 0;
    document.documentElement.scrollTop = 0;
}
</script>
</body>
</html>
 
Ciao, ho testato il tuo codice e devo dire che inizialmente non sono riuscito a riprodurre il problema. In sostanza non vedevo lo "spicchio" che hai menzionato ma vedevo regolarmente l'icona tonda con un bordo attorno. Ho provato poi a variare qualche valore e ho capito che quel bordo non dovrebbe esserci, o almeno è ciò che ti aspetti (se ho capito bene).

Presumo che questo bordo (che forse può apparire come uno spicchio a seconda di come viene renderizzato il carattere stesso) dipenda dal fatto che l'icona (carattere) non si allinei e non si dimensioni perfettamente col contenitore. C'è da tener conto che, essendo un carattere, la sua grafica interna (nonostante sia un cerchio) potrebbe non corrispondere esattamente con i limiti della dimensione del carattere stesso o potrebbe comunque non essere così regolare. Inoltre questo, essendo un carattere, può essere trattato in modo differente da un normale elemento (come può essere un div) perché potrebbe subire delle "regolazioni" legate alla gestione del rendering propria degli elementi di testo che vengono visualizzati a schermo. Posso pensare quindi a funzioni che migliorano la leggibilità, a funzioni di antialiasing, allo zoom e altre varie caratteristiche che sono gestite del browser o addirittura del sistema operativo.

Detto questo, penso che sarebbe inutile cercare di far coincidere perfettamente i due "cerchi" (quello dell'icona/font con quello creato col div), potresti però risolvere in modi alternativi.

Uno tra vari è quello di cambiare icona, cioè usare quella analoga senza cerchio (che ha nome angle-up) opportunamente centrata nel div. A quel punto il cerchio sarà creato dal div stesso. Ovviamente i colori risulteranno invertiti per cui ti basterà riassegnarli opportunamente sullo stato normale e sull'hover.

Prova quindi a modificare l'elemento <i> in questo modo:
Codice:
<i class="fas fa-angle-up"></i>
e applicare questo CSS:
Codice:
#toTop {
    display: none;
    position: fixed;
    bottom: 20px;
    right: 30px;
    z-index: 99;
    background-color: #ffc11e;
    color: #fff;
    cursor: pointer;
    font-size: 40px;
    border-radius: 50%;
    height: 40px;
    width: 40px;
    line-height: 1;
    text-align: center;
}
#toTop:hover {
    background-color: #fff;
    color: #ffc11e;
}
#toTop>i {
    line-height: 0;
}

Prova e vedi se può andare.
 
Sì, è perfetto. Non so come ho fatto a non pensarci, mi sento proprio scema. Ti ringrazio tantissimo!
 

Discussioni simili