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.