Zastąp i zresetuj styl CSS: auto lub none nie działają

133

Chciałbym zastąpić następujące style CSS zdefiniowane dla wszystkich tabel:

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

Mam konkretną tabelę z klasą o nazwie 'other'.
Wreszcie dekoracja stołu powinna wyglądać następująco:

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

więc muszę usunąć 3 właściwości: width, min-widthidisplay

Próbowałem zresetować za pomocą nonelub auto, ale nie pomogło, mam na myśli te przypadki:

table.other {
    width: auto;
    min-width: auto;
    display:auto;
}
table.other {
    width: none;
    min-width: none;
    display:none;
}
sergionni
źródło

Odpowiedzi:

196

Uważam, że powodem, dla którego pierwszy zestaw właściwości nie zadziała, jest brak autowartości dla display, więc tę właściwość należy zignorować. W takim przypadku inline-tablenadal będzie obowiązywać, a ponieważ widthnie dotyczy inlineelementów, ten zestaw właściwości nic nie da.

Drugi zestaw właściwości po prostu ukryje tabelę, ponieważ do tego display: nonesłuży.

tableZamiast tego spróbuj zresetować go do :

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

Edycja: min-width domyślnie 0nieauto

Yi Jiang
źródło
dziwne, szukam z Firebug - min-width nie nadpisane przez auto
sergionni
6
@sergionni O tak, zapomniałem - min-widthma domyślną wartość 0- reference.sitepoint.com/css/min-width
Yi Jiang
Szukałem ponownie Firebug, nie ma również problemu, że ther're mieć tabele zagnieżdżone, więc nadrzędne powinny być stosowane do wszystkich hierarchii
sergionni
1
@sergionni Możesz to zrobić, dodając table.other tabledo selektora używanego do resetowania właściwości
Yi Jiang
1
width: autokiedy wszystko, co chciałem zastąpić, to width: 100%- Dziękuję
Meredith
18

„none” nie robi tego, co zakładasz. Aby „wyczyścić” właściwość CSS, musisz przywrócić jej wartość domyślną, która jest zdefiniowana w standardzie CSS. Dlatego powinieneś sprawdzić wartości domyślne w swoim ulubionym źródle.

table.other {
    width: auto;
    min-width: 0;
    display:table;
}
tenfour
źródło
10
Set min-width: inherit /* Reset the min-width */

Spróbuj tego. To będzie działać.

Jaskółka oknówka
źródło
2
To powinna być akceptowana odpowiedź. min-width: 0nie robi tego samego
v010dya
1
Racja, ale co jeśli rodzic ma min-width? dostaniesz to zamiast prawdziwego bankructwa.
adi518
7

Domyślną displaywłaściwością tabeli jest display:table;. Jedyną użyteczną wartością jest inline-table. Wszystkie inne displaywartości są nieprawidłowe dla elementów tabeli.

Nie ma autoopcji, aby zresetować go do wartości domyślnych, chociaż jeśli pracujesz w Javascript, możesz ustawić go na pusty ciąg, który załatwi sprawę.

width:auto;jest prawidłowy, ale nie jest wartością domyślną. Domyślna szerokość tabeli to 100%, podczas gdy width:auto;spowoduje, że element zajmie tylko tyle szerokości, ile potrzebuje.

min-width:auto;nie jest dozwolone. Jeśli ustawisz min-width, musi mieć wartość, ale ustawienie jej na zero jest prawdopodobnie tak dobre, jak przywrócenie wartości domyślnej.

Spudley
źródło
ciekawy pomysł na JS. wygląda na to, czego potrzebuję, i najpierw spróbuję z CSS.
sergionni
1

Cóż, w display: none;ogóle nie wyświetli tabeli, spróbuj display: inline-block;z deklaracjami width i min-width pozostałymi jako „auto”.

Steven
źródło
0

Skończyło się na tym, że użyłem Javascript do udoskonalenia wszystkiego.

Moje skrzypce 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); 
    }
})
Użytkownik
źródło
0

Najlepszy sposób, w jaki znalazłem, aby przywrócić ustawienie minimalnej szerokości, to:

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

specyfikacja nie jest ustawiona, ale niektóre przeglądarki (IE 10) tego nie przestrzegają, więc 0 jest dobrym rozwiązaniem w większości przypadków . min-width: 0;

AdamLukem
źródło