Sostituisci e ripristina lo stile CSS: auto o none non funzionano


130

Vorrei sostituire il seguente stile CSS definito per tutte le tabelle:

table {
        font-size: 12px;
        width: 100%;
        min-width: 400px;
        display:inline-table;
    }

Ho una tabella specifica con la classe chiamata 'other'.
Infine, la decorazione della tavola dovrebbe apparire come:

table.other {
    font-size: 12px;
}

Quindi ho bisogno di rimuovere 3 proprietà: width, min-widthedisplay

Ho provato a ripristinare con noneo auto, ma non ho aiutato, intendo questi casi:

table.other {
    width: auto;
    min-width: auto;
    display:auto;
}
table.other {
    width: none;
    min-width: none;
    display:none;
}

Risposte:


195

Credo che il motivo per cui la prima serie di proprietà non funzionerà è perché non c'è autovalore per display, quindi la proprietà dovrebbe essere ignorata. In tal caso, inline-tableavrà comunque effetto, e poiché widthnon si applica agli inlineelementi, quell'insieme di proprietà non farà nulla.

La seconda serie di proprietà nasconderà semplicemente la tabella, poiché è quello che display: noneserve.

Prova tableinvece a ripristinarlo su :

table.other {
    width: auto;
    min-width: 0;
    display: table;
}

Modifica: il min-width valore predefinito è 0noauto


strano, sto guardando con firebug - la larghezza minima non è stata sostituita dall'auto
sergionni

6
@sergionni Oh sì, ho dimenticato - min-widthha un valore predefinito di 0- reference.sitepoint.com/css/min-width
Yi Jiang

ho guardato di nuovo a firebug, c'è anche un problema, che ci sono tabelle nidificate, quindi l'override dovrebbe essere applicato a tutta la gerarchia
sergionni

1
@sergionni Puoi farlo aggiungendo table.other tableal selettore utilizzato per le proprietà di ripristino
Yi Jiang

1
width: autoquando tutto ciò che volevo scavalcare era width: 100%- Grazie
Meredith,

18

"none" non fa ciò che si presume faccia. Per "cancellare" una proprietà CSS, è necessario riportarla al suo valore predefinito, che è definito dallo standard CSS. Quindi dovresti cercare le impostazioni predefinite nel tuo riferimento preferito.

table.other {
    width: auto;
    min-width: 0;
    display:table;
}

10
Set min-width: inherit /* Reset the min-width */

Prova questo. Funzionerà.


2
Questa dovrebbe essere una risposta accettata. min-width: 0non fa la stessa cosa
v010dya,

Giusto, ma cosa succede se un genitore ha un min-width? lo otterrai invece di un vero default.
adi518,

7

La displayproprietà predefinita per una tabella è display:table;. L'unico altro valore utile è inline-table. Tutti gli altri displayvalori non sono validi per gli elementi della tabella.

Non c'è autoun'opzione per ripristinarlo ai valori predefiniti, anche se se lavori in Javascript, puoi impostarlo su una stringa vuota, il che farà il trucco.

width:auto;è valido, ma non è il valore predefinito. La larghezza predefinita per una tabella è 100%, mentre width:auto;l'elemento occuperà solo la larghezza necessaria.

min-width:auto;non è permesso. Se impostato min-width, deve avere un valore, ma impostarlo su zero è probabilmente buono come ripristinarlo al valore predefinito.


idea interessante su JS. sembra quello di cui ho bisogno e proverò prima con i CSS.
sergionni,

1

Bene, display: none;non visualizzerà affatto la tabella, prova display: inline-block;con le dichiarazioni di larghezza e larghezza minima che rimangono 'auto'.


0

Ho finito per usare Javascript per perfezionare tutto.

Il mio violino JS: https://jsfiddle.net/QEpJH/612/

HTML:

<div class="container">
    <img src="http://placekitten.com/240/300">
</div>

<h3 style="clear: both;">Full Size Image - For Reference</h3>
<img src="http://placekitten.com/240/300">

CSS:

.container {
    background-color:#000;
    width:100px;
    height:200px;

    display:flex;
    justify-content:center;
    align-items:center;
    overflow:hidden;

}

JS:

$(".container").each(function(){
    var divH = $(this).height()
    var divW = $(this).width()
    var imgH = $(this).children("img").height();
    var imgW = $(this).children("img").width();

    if ( (imgW/imgH) < (divW/divH)) { 
        $(this).addClass("1");
        var newW = $(this).width();
        var newH = (newW/imgW) * imgH;
        $(this).children("img").width(newW); 
        $(this).children("img").height(newH); 
    } else {
        $(this).addClass("2");
        var newH = $(this).height();
        var newW = (newH/imgH) * imgW;
        $(this).children("img").width(newW); 
        $(this).children("img").height(newH); 
    }
})

0

Il modo migliore che ho trovato per ripristinare un'impostazione di larghezza minima è:

min-width: 0;
min-width: unset;

unset è nelle specifiche, ma alcuni browser (IE 10) non lo rispettano, quindi 0 è un buon fallback nella maggior parte dei casi. larghezza minima: 0;

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.