Come posso cambiare lo spessore del mio tag <hr>


312

Voglio cambiare lo spessore della mia regola orizzontale ( <hr>) in CSS. So che può essere fatto in HTML in questo modo -

<hr size="10">

Ma ho sentito che questo è deprecato come menzionato qui su MDN . Nel CSS ho provato a usare height:1pxma non cambia lo spessore. Voglio che la <hr>linea sia 0.5pxspessa.

Sto usando Firefox 3.6.11 su Ubuntu


Lo voglio davvero sottile, l'utente non dovrebbe notare che è lì a meno che non lo cerchi specificamente. Comunque provando ...
— Srikar Appalaraju l'

7
Puoi anche provare a rendere più il colore dello sfondo in modo che si
— fonda

4
Poiché 1px è minimo, dovresti rendere la linea grigia chiara se vuoi che sia meno evidente.
— Gert Grenander,

2
@MovieYoda: le dimensioni possono diventare subpixel, ma il rendering verrà arrotondato al pixel più vicino. È come aspettarsi un valore intero pari a 1.23784 ... Impossibile. Puoi impostarlo su questo tipo di valore ma verrà arrotondato al numero intero più vicino. Teoricamente potresti renderizzare le larghezze arrotondate a 1/3 di pixel sugli LCD a causa delle specifiche tecnologiche, ma dubito che i browser lo facciano davvero. Le dimensioni subpixel rimanenti non possono essere di alcun colore perché sono correlate solo a uno dei fosfori RGB.
— Robert Koritnik,

15
Non mezzo pixel, mezzo px. La domanda non è completamente sciocca. reddit.com/r/shittyprogramming/comments/20zyea/…
— Luke Rehmann

Risposte:


524

Per coerenza rimuovere eventuali bordi e utilizzare l'altezza per lo <hr>spessore. L'aggiunta di un colore di sfondo darà uno stile <hr>all'altezza e al colore specificati.

Nel tuo foglio di stile:

hr {
    border: none;
    height: 1px;
    /* Set the hr color */
    color: #333; /* old IE */
    background-color: #333; /* Modern Browsers */
}

O in linea come lo hai:

<hr style="height:1px;border:none;color:#333;background-color:#333;" />

Spiegazione più lunga qui


10
perché stai facendo border:none? Qualche ragione? Anche il bordo aggiunge spessore?
— Srikar Appalaraju,

11
Sì, vogliamo usare il colore di sfondo per visualizzare la linea per coerenza. FF usa il bordo per creare il <hr> ma cioè non lo fa. Questo li renderà entrambi uguali.
— Gregg B,

2
Sì, ho sempre trovato i tag <hr> cross-browser odiosi. È bello farli comportarsi correttamente.
— Gregg B,

Oppure, se hai solo bisogno di una tantum, puoi farlo in linea con<hr style="border: none; height:1px; color:#333; background-color:#333;">;
— Jesse Chisholm

1
Quanti anni di IE per il fallback color?
— trysis,

53

Rendering sub-pixel nei browser

Il rendering dei sub-pixel è complicato. Non puoi aspettarti che un monitor esegua il rendering di una linea sottile inferiore a un pixel. Ma è possibile fornire dimensioni sub-pixel. A seconda del browser, li rendono in modo diverso. Controlla questo post sul blog di John Resig al riguardo.

Fondamentalmente se il tuo monitor è un LCD e stai disegnando linee verticali, puoi facilmente disegnare una linea di 1/3 pixel. Se lo sfondo è bianco, indica il colore della linea #f0f. A prima vista questa linea sarà larga 1/3 di pixel. Anche se avrà un po 'di colore, se ingrandissi il monitor, vedresti che solo un segmento dell'intero pixel (costituito da RGB) sarà scuro. Questa è praticamente la tecnica utilizzata per i suggerimenti di tipo fine, ad esempio ClearType .

Ma le linee orizzontali possono raggiungere solo un pixel intero. Questa è la limitazione tecnologica dei monitor LCD. I CRT erano ancora più complicati con i loro fosfori triangolari (a meno che non fossero del tipo a griglia di apertura, ad esempio Sony Trinitron), ma questa è una storia diversa.

Fondamentalmente fornire una dimensione sub-pixel e aspettarsi che venga visualizzato in questo modo è come aspettarsi che una variabile intera memorizzi un numero di 1,2034759349. Se capisci che è impossibile, dovresti capire che i monitor non sono in grado di eseguire il rendering di dimensioni sub-pixel.

Stile sicuro per browser incrociati

Ma il modo in cui le regole orizzontali che si fondono vengono generalmente eseguite utilizzando i colori. Quindi, se lo sfondo è ad esempio bianco ( #fff) puoi sempre rendere HR molto chiaro. Come #eee.

Lo stile sicuro tra browser per una regola orizzontale molto leggera sarebbe:

hr
{
    background-color: #eee;
    border: 0 none;
    color: #eee;
    height: 1px;
}

E usa un file CSS invece di stili in linea. Forniscono una definizione centrale per l'intero sito non solo un elemento particolare. Rende molto meglio la manutenibilità.


8

Stavo cercando il modo più breve per disegnare una linea 1px, poiché l'intero carico di CSS separati non è la soluzione più veloce o più breve.

Fino a HTML5, il WAS era un modo più breve per 1px hr: <hr noshade> ma .. L'attributo noshade di <hr> non è supportato in HTML5. Usa invece CSS. (né altri atti usati prima, come dimensioni, larghezza, allineamento ) ...


Ora, questo è piuttosto complicato, ma funziona bene se è necessaria la maggior parte 1px ora semplice:

Variazione 1, BLACK hr: (migliore soluzione per il nero)

<hr style="border-bottom: 0px">

Uscita: FF, Opera - nero / Safari - grigio scuro


Variazione 2, GRIGIO h (il più breve!):

<hr style="border-top: 0px">

Uscita: Opera - grigio scuro / FF - grigio / Safari - grigio chiaro


Variazione 3, COLORE come desiderato:

<hr style="border: none; border-bottom: 1px solid red;">

Uscita: Opera / FF / Safari: 1px rosso.


Mi farebbe piacere, se per favore qualcuno lo testerà per Chrome e IE. Le prime due variazioni sono piuttosto complicate, esp. 2a variazione, che visualizza prima il NERO 1px.
— Muscaria,

Mi piace questa soluzione perché non codifica alcuna informazione sul colore, il che può essere utile per la compatibilità con la modalità oscura. Funziona bene su Chrome.
— tresf,

6

Consiglierei di impostare HRse stesso su un valore 0pxelevato e utilizzare invece il suo bordo per essere visibile. Ho notato che quando si ingrandisce e si riduce (ctrl + rotellina del mouse) lo spessore di HRse stesso cambia, mentre quando si imposta il bordo rimane sempre lo stesso:

hr {
    height: 0px;
    border: none;
    border-top: 1px solid black;
}

Vedo che negli ultimi Chrome sta cambiando spessore lungo il resto della pagina. Quel che è peggio, può scomparire se rimpicciolisci :(
— Pavel Alexeev il

5

L'attributo height è stato deprecato in html 5. Quello che vorrei fare è creare un bordo attorno a hr e aumentare lo spessore del bordo in quanto tale: hr style = "border: solid 2px black;"


1

Ho aggiunto opacità alla linea, quindi sembra più sottile:

<hr style="opacity: 0.25">

0

Credo che il miglior risultato per lo styling <hr>tag sia il seguente:

hr {
color:#ddd;
background-color:
#ddd; height:1px;
border:none;
max-width:100%;
}

E per il codice HTML è sufficiente aggiungere: <hr>.


0

Ecco una soluzione per una linea nera da 1 pixel senza bordo o margine

hr {background-color:black; border:none; height:1px; margin:0px;}
  • Testato su Google Chrome

Ho pensato di aggiungere questo perché le altre risposte non includono: margin:0px;.

  • dimostrazione

hr {background-color:black; border:none; height:1px; margin:0px;}
<div style="border: 1px solid black; text-align:center;">
<div style="background-color:lightblue;"> ↑ container ↑ <br> <br> <br> ↓ hr ↓ </div>
<hr>
<div style="background-color:lightgreen;"> ↑ hr ↑ <br> <br> <br> ↓ container ↓ </div>
</div>


-4

Suggerisco di usare la costruzione come

<style>
  .hr { height:0; border-top:1px solid _anycolor_; }
  .hr hr { display:none }
</style>

<div class="hr"><hr /></div>

Heheheh :) Non l'ho mai visto prima :)
— Prakash Raman
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.