2012-03-19 9 views
5

Mam starą zawartość zawierającą tabele o szerokości określonej za pomocą atrybutu szerokości HTML, tak jak: <table width="250">. Ten atrybut jest nadpisywany przez regułę dla selektora CSS table. Czy mogę przestać to przesłonić, aby tabele miały szerokość określoną w atrybucie HTML (co nie zawsze jest równe 250 pikselom, to tylko przykład)? Mogę wybrać tabele, które nie powinny mieć nadpisanych szerokości za pomocą selektora #column1 table.Zatrzymaj CSS przesłonięcie atrybutu szerokości HTML

+1

dlaczego nie można po prostu usunąć css 'width' regułę, który zastępuje atrybut? – fcalderan

+0

Ponieważ jest to _lot_ starej importowanej treści. Mógłbym napisać skrypt find-replace, który zrobiłby to dla wszystkich tabel, które pasują do tabeli # column1, ale dobrze byłoby znaleźć prostszy sposób. – tog22

+0

Przypuszczam, że byłoby lepiej usunąć wszystkie inline szerokość i wysokość atrybutów, w przeciwnym razie trzeba będzie prawdopodobnie dodać inne style inline, jak sugeruje Christopher Kenney – fcalderan

Odpowiedz

4

Spróbuj tego:

#column1 table { 
    width: auto; 
} 

Tak wiesz, css będzie zawsze zastępują starych atrybutów HTML inline. Zwykle jest to problem przy korzystaniu z edytora WYSIWYG.

Rozwiązałem ten problem dla starego html wygenerowanego przez edytor WYSIWYG w cms z javascript i jquery. I iteracyjne nad stołem (S) i odczytać wysokość i szerokość atrybut które następnie przekształcają się inline CSS:

var $table = $('#column1 table'); 
$table.css({ 
    "width" : $table.attr('width'), 
    "height" : $table.attr('height') 
}); 
+1

To nie działa, próbowałem. Oblicza tabelę tak, jakby nie zastosowano do niej atrybutu szerokości CSS lub HTML. – tog22

+0

Po prostu użyj szerokość: 250px zamiast auto. –

+0

@ tog22 Dodałem rozwiązanie javascript (i jquery), z którego kiedyś korzystałem. –

5

Nie można zastąpić z css html ale można dodać atrybut style na przykład:

style = " width: 250px;" 

edit: można zastąpić ją na zewnątrz poprzez umieszczenie ważne na końcu reguły css, które będą się znosić wszelkie inne atrybuty CSS w stosunku do tego, czego zmienia!.

np

#column1 table { 
    width: 250px !important; 
} 
+0

Dzięki, ale zobacz mój komentarz wyjaśniający na oryginalne pytanie. – tog22

+0

po wyjaśnieniu użytkownika to wygląda na właściwą odpowiedź: +1 – fcalderan

+0

@ togg22: tak, ważne! Jednak nie użyłbym go jako style = "...", ale raczej w arkuszu stylów. W przeciwnym razie możesz zrobić find-replace, który i tak byłby zalecany! – Chris

0

Czy możesz nam powiedzieć, dlaczego używasz wbudowanych atrybutów html w ten sposób?

Jeśli nie masz bardzo silnego powodu, radzę przenieść dowolne elementy stylu do CSS. I jest o wiele lepiej, jeśli CSS ma własny plik, a nie jest również wbudowany.

Lepiej jest zawsze oddzielać treść od prezentacji.

+0

Wiem, zobacz mój komentarz wyjaśniający na oryginalne pytanie. – tog22

0

Możliwą, choć niefortunną odpowiedzią, która przyszła mi do głowy, jest zastąpienie reguły dla selektora CSS table jednym z :not(#column1) table. Będzie to jednak działać tylko w niektórych nowoczesnych przeglądarkach, a nie w IE.

0

Jak stwierdzono, sugeruję, aby użyć do tego arkusza stylów! Po prostu zaimplementuj to w swoim stylu.css:

table { 
    width:250px; 
} 

, a jeśli nie wystarczy, możesz dodać!ważne, jak:

table { 
    width:250px !important; 
} 

i dodać stylów jak to w czołowej części swojej HTML:

<link rel="stylesheet" type="text/css" href="css/stlyes.css"> 

W przeciwnym razie trzeba by dodać style = "width: 250px" bezpośrednio do każdej tabeli . Jeśli chcesz ponownie zmienić szerokość, na przykład 260px, będziesz musiał zmienić wszystkie z nich ponownie.

Jednakże, jeśli masz dostęp do kodu HTML, robi Find-Wymienić będzie zalecane, mimo to mieć czysty kod. Prawie każdy, nawet bardzo proste TextEdit Programm powinien mieć opcję Find-Wymienić ...

0

wiem, że to pytanie zadano 2 lata temu, ale może to być pomocne dla innych, którzy mają podobne problemy. Można użyć selektora atrybutu CSS:

table:not([width]) { 
    width: 250px; 
} 

pamiętać, że nie będzie działać pod IE 9 o ile wiem.

+0

Nie sądzę, że to odpowiada na moje pytanie, prawda? – tog22