Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    99

    Personalizzare le Dotted line

    Ciao... Desideravo personalizzare le "Dotted Line" tra cui lo spazio fra ogni punto, la dimensione eccettera... Pur avendo googolato non sono riuscito a trovare esempi che si adattassero al mio caso. Ecco qui l'immagine finale:

    https://gyazo.com/1e1ca88f2a989b07c52030a4baaa41db

    Questo è il codice...
    codice HTML:
    <style> 
    section {    
     display: flex;    
     align-items: baseline;     
    margin-bottom:1%; 
    } 
    section > * {  
     padding: 0;   margin: 0; 
    } 
    #dot {     
    flex: 1;   
    border-bottom: 3px dotted #e5e5e5;   
    margin-left:2%;   
    margin-right:3%;     
    }
     </style>  
    
    <div id="pannello">
    <section> 
    <p ><strong>Prodotto 1:</strong></p>
      <span id="dot"></span> 
    <h3>  Euro 100 </h3>
     </section>
    <section> 
    <p ><strong>Prodotto 2:</strong></p> 
    <span id="dot"></span> 
    <h3>  Euro 120 </h3> 
    </section> 
    <section>
    <p ><strong>Prodotto 3:</strong></p>
    <span id="dot"></span> 
    <h3>  Euro 50 </h3>
     </section>
     </div>
    C'è qualcuno in gamba con css che mi può dare una mano? Grazie!

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, a parte la dimensione (impostabile attraverso la sotto-proprietà border-width) non è possibile personalizzare lo spazio tra i punti. Anzi, ti dirò di più, ogni browser ha il suo personale modo di renderizzare quel tipo di bordi.

    Una soluzione per ottenere ciò che vuoi è l'uso del linear-gradient sulla proprietà background-image.
    Su stackoverflow una risposta con degli esempi: How to increase space between dotted border dots

    Vedi se riesci ad applicare questa soluzione per il tuo elaborato. Fai sapere se hai bisogno di ulteriore aiuto.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    99
    Ciao, ti ringrazio per l'intervento... Ho visto più volte quell'esempio e tanti altri su stackoverflow/google e purtroppo, probabilmente per mia incapacità, non sono riuscito ad adattarlo al codice che ho postato sopra (che per me sarebbe praticamente perfetto, chiaro e semplicissimo da modificare).

    Ho provato persino a creare un div e sostituirlo allo span, modificare lo span o provare con hr, ma se alcuni non tengono conto degli allineamenti e relative distanze altri non vengono neanche visualizzati.

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, ho provato il tuo codice (inserendo ovviamente il tutto in un documento HTML) e direi che già così è abbastanza simile all'immagine allegata che, se non ho capito male, dovrebbe essere il risultato che vuoi ottenere. ma forse ho capito male

    Prima di provare ad impostare il codice, puoi chiarire?
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    99
    Ciao... Più che simile direi che è uguale, perché il link dell'immagine è il risultato del codice html che ho postato...
    Ciò che io voglio fare è modificare lo <span>. Ossia decidere la distanza fra punti, la relativa dimensione dei punti e poter modificare il margine fra <p> e <h3>. Come tu hai osservato il border-bottom non si presta alla personalizzazione e quindi mi occorre lavorare su linear-gradient. Ma tutte le volte che ho provato con linear-gradient ho fallito, ovvero non sono materialmente riuscito.

  6. #6
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Allora ho capito male, pensavo che con "Ecco qui l'immagine finale" tu volessi intenedere che quello doveva essere il risultato che volevi ottenere.

    Ma tutte le volte che ho provato con linear-gradient ho fallito, ovvero non sono materialmente riuscito
    Col linear-gradient puoi ottenere dei punti alla distanza stabilita ma presumo che se imposti una larghezza della linea maggiore di un pixel, non saranno mostrati dei punti tondi ma dei rettangolini.

    Hai provato a vedere il fiddle linkato da chi ha risposto su quella discussione di stackoverflow?
    https://jsfiddle.net/yyp67pbg/

    Un'altra proposta, sempre su quella discussione, è quella di usare uno pseudo-elemento e impostare una serie di punti nel content, quindi usare il letter-spacing per ottenere la distanza voluta tra i punti.

    codice:
    hr:after {
    content:".......................................................................";
    letter-spacing: 4px; /* Use letter-spacing to increase space between dots*/
    }
    Qui la fonte

    Magari giocando anche su font-size puoi impostare anche una diversa dimensione dei punti.

    Hai provato questa soluzione?
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    99
    Le ho provate tutte ma proprio tutte! Purtroppo (probabilmente perché non sono capace io) nessun esempio si adatta al mio caso. Che sarebbe quello sopra con una piccola modifica in cui possa modificarne la distanza.

    Stackoverflow me lo sono spulciato e rispulciato. Ogni singolo esempio l'ho preso in esame cercando di fare un modello analogo ridiscutendo tutto il codice al fine di ottenere un risultato attendibile. Ho provato con i <div> ho provato con <ul> ho provato anche con <hr> e relativo content...

    Per esempio ora che ricordo, il modello che avevo provato con <hr> mi permetteva di modificare la distanza tra i punti, ma non la dimensione dei punti e relativo colore con magine.

    Ma possibile che è così complessa questa cosa?

  8. #8
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ti rispondo solo ora perché la cosa mi ha incuriosito e ho speso un po' di tempo per cercare e provare diverse soluzioni.

    Effettivamente non c'è un modo semplice per personalizzare una linea puntinata, come chiedi tu. Ho provato con gli pseudo-elementi impostando un content con la serie di punti testuali e definendo font-size e letter-spacing; poi ho provato anche con una combinazione di background-image e radial-gradient per creare un pattern di punti/cerchi. Sono riuscito a combinare qualcosa ma effettivamente i risultati prevedono delle impostazioni alquanto complicate che rendono il procedimento, per effettuare delle personalizzazioni, difficile e poco intuitivo; come d'altronde hai potuto constatare tu stesso. Ho quindi abbandonato l'idea di usare questi tipi di soluzioni.

    Ho poi cercato altre soluzioni e tra quelle più valide ho trovato la possibilità di usare SVG+XML dentro background-image.
    In sostanza si tratta di impostare un markup XML usando le apposite definizioni SVG per creare la linea puntinata, quindi inserire il tutto nel background-image. A quel punto, per la personalizzazione basterà modificare i valori dei relativi attributi SVG.

    Certo, anche questa soluzione non è il massimo della semplicità ma, con qualche indicazione e qualche accorgimento, si può arrivare ad usarla con buoni risultati.

    Qui un esempio XML per creare la linea puntinata in SVG:
    codice:
    <svg width="100%" height="100%">
      <line x1="3" x2="100%" y1="50%" y2="50%" stroke="#e5e5e5" stroke-width="6" stroke-linecap="round" stroke-dasharray="1 10"/>
    </svg>
    Una volta definito il codice XML che restituisce l'immagine SVG è possibile codificarlo così che nel CSS sia letto come stringa URL.
    Può aiutare l'uso di un codificatore tipo questo: URL-encoder for SVG

    Il codice è abbastanza intuitivo. Ho impostato width e height del contenitore <svg> al 100% in modo tale che, una volta inserito come background, l'immagine si estenda per l'intero contenitore in cui è applicata (ad esempio il tuo span o magari uno pseudo elemento CSS).
    L'elemento <line> costruisce la linea SVG. Per le sue proprietà puoi eventualmente consultare qualche documentazione, vedi ad es. qui: <line> - SVG Scalable Vector Graphics | MDN

    Qui l'esempio che ho realizzato per il tuo caso:
    codice HTML:
    <!DOCTYPE HTML>
    <html lang="it">
      <head>
        <title>Esempio</title>
          <style> 
            #pannello {                                 /* Contenitore principale */
              display: block;
              width: 600px;
              margin: 0 auto;
              padding: 0;
              list-style-type: none;
              font-size: 16px;
              font-weight: bold;
            }
            #pannello > li {                            /* Riga */
              display: flex;
              align-items: baseline;
              padding: .2em 0;
            }
            #pannello > li > span:first-child {         /* Etichetta */
    
              font-size: 1em;
              font-weight: bold;
            }
            #pannello > li > span:last-child{           /* Prezzo */
              display: flex;
              align-items: baseline;
              flex: 1;
              font-size: 1.15em;
              font-weight: bold;
            }
            #pannello > li > span:last-child:before {   /* Linea divisoria */
              content: "";
              display: inline-block;
              flex: 1;
              background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25'%3E%3Cline x1='3' x2='100%25' y1='50%25' y2='50%25' stroke='%23e5e5e5' stroke-width='6' stroke-linecap='round' stroke-dasharray='1 10'/%3E%3C/svg%3E");
              /* Attributi SVG:
                x1              : x iniziale; usare un valore pari alla metà di stroke-width così che il primo punto sia tangente al lato sinistro
                x2              : x finale; usare '100%' per estendere l'immagine SVG all'intero spazio disponibile
                y1              : y iniziale; usare '50%' così che la linea sia centrata in verticale
                y2              : y finale; come y iniziale
                stroke          : colore linea
                stroke-width    : spessore linea
                stroke-linecap  : forma delle sommità di ogni tratto; usare 'round' per ottenere punti rotondi
                stroke-dasharray: vettore dei tratti con alternanza pieno e vuoto, ad esempio '1 10', dove 1 è la parte piena e 10 è la parte vuota (non considerando le forme delle sommità di ogni tratto)
              */
              height: 6px;      /* usare lo stesso valore di stroke-width */
            }
            #pannello > li > span:first-child,
            #pannello > li > span:last-child:before {   /* Margini laterali linea */
              margin-right: 15px;
            }
        </style>
      </head>
      <body>
        <ul id="pannello">
          <li><span>Prodotto 1:</span><span>Euro 100</span>
          <li><span>Prodotto 2:</span><span>Euro 120</span>
          <li><span>Prodotto 3:</span><span>Euro 50</span>
        </ul>
      </body>
    </html>
    Ho commentato i vari attributi SVG per avere chiaro come puoi personalizzare il tutto ma se hai bisogno di ulteriori chiarimenti, riguardo il codice, chiedi pure.

    Tieni conto che puoi modificare direttamente i valori dentro il codice già definito in background-image, senza ripartire ogni volta dal codice XML e ripetere la codifica URL, però fai attenzione a riportare correttamente le entità numeriche relative ai caratteri riservati che sono stati codificati (ad es. %25 per %, %23 per #, ecc.).

    Per ciò che hai chiesto, mi pare sia un buon compromesso.
    Prova e fai sapere; buon proseguimento.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    99
    Ciao, sei andato oltre le mie aspettative! Il lavoro che hai fatto è perfetto e dal codice che hai scritto ho capito che neanche ad impegnarmi riuscirò a raggiungere questi livelli di scrittura. Tenuto conto anche che non sono in grado di interpretare il codice in toto, dove pur impegnandomi avrei senza dubbio difficolta a capirlo, ho notato la parte commentata e questa particolarità dice molto su come lavori. Ho apprezzato molto... Grazie!

  10. #10
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, mi fa piacere tu abbia apprezzato capisco anche le tue difficoltà nel comprendere pienamente il codice ma, tranquillo, nonostante i miei 20epassa anni di esperienza, anche io mi trovo spesso a dovermi sforzare per poter apprendere cose nuove (come si dice: "non si finisce mai di imparare")... e poi, puoi sempre chiedere aiuto sul forum

    Per il momento ti auguro un sereno periodo di festività e buon proseguimento
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.