[CSS] Макагня с рамками таблиц

kruzer25

<html><head><style>
table {
display:table;
border-spacing:0px;
border-collapse:collapse;
empty-cells:show;
margin-top:0;
margin-bottom:0;
padding:0;
}
td, th, tr {
border-width:inherit;
border-style:inherit;
border-color:inherit;
font-size:inherit;
disabledfont-size:7pt;
margin:0;
padding:0;
height:0; max-height:0;
}
tr {display: table-row;}
tbody {display: table-row-group;}
thead {display: table-header-group;}
tfoot {display: table-footer-group;}
td {display: table-cell;padding: 0px;}
th {display: table-cell;padding: 0px;}
</style></head><body>
<table style="border-width:2px;border-color:red;border-style:solid">
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
</tr>
</table>
</body></html>

Почему border не показывается для ячеек, и рамка только вокруг самой таблицы; но, если в описаниях tr/td inherit заменить на соответствующие значения из table - всё работает так, как хочется? inherit - он же как раз из table соответствующие значения должен брать?

dedwowan

Почему border не показывается для ячеек
Потому что так устроен мир =) Ты все сделал правильно, расслабься и сделай теперь так, чтобы просто работало -)

kruzer25

Ну тогда скажи, что надо сделать, чтобы работало правильно. Прописывать рамки для каждой ячейки в отдельности - не хочу.

dedwowan

table tr td {
border: 2px solid red
}

kruzer25

Это не труъ.
Пример: хочу на одной странице сделать дохрена таблиц, каждую - с рамкой своего цвета. Вполне естественное желание - чтобы этот цвет задавался только в одном месте. Другое, настолько же естественное желание - не трогать при изменении цвета какой-то таблицы глобальные стили (может, у меня к ним и доступа нет). Что делать?

pitrik2

inherit - он же как раз из table соответствующие значения должен брать?
это почему?
инхери т же с непосредственного отца берется, разве нет?

kruzer25

Ага.
У td стоит inherit - значит, берём непосредственного отца, это tr; у tr тоже inherit - берём его непосредственного отца, а это уже table... разве не так?

pitrik2

у tr тоже inherit - берём его непосредственного отца, а это уже table... разве не так?
не так
у tr отец другой

с добрым утром

kruzer25

Блин.
А какой отец у tr?

kruzer25

БЛЯТЬ!
Какого хрена отец tbody даже когда его нет?
Если в описание border:inherit для td, tr и th добавить tbody - всё работает.
Руки бы кому-нибудь оторвать

dedwowan

tbody
А для разных цветов у разных таблиц есть такая хрень, называется клас
т.е. пишешь не table tr td, а
table.className tr td

kruzer25

table.className tr td
А теперь внимательно перечитай мой пост - я не хочу каждый раз, когда появляется новая таблица с новым цветом, что-то добавлять в файл стилей.

dedwowan

Ну, раз уж ты предпочитаешь просто срать CSS'ми директивами в файл, то можешь прямо в файле их и указывать
<STYLE> </STYLE> тебе в помощь.

artimon

Какого хрена отец tbody даже когда его нет?
Это стандарт html.

bestmoviemaker

так загрузи css-таблицу и допиши нужные классы в самом файле:
<link href = "styles.css" rel = "stylesheet" type = "text/css">
<style type = "text/css">
.lala { color: #ccccff; }
</style>

kruzer25

Тогда надо бы, чтобы отсутствие tbody влекло за собой такие же последствия, как и отсутствие tr

kruzer25

А разве по тому же стандарту можно пихать <style> в body?
Допустим, у меня есть доступ только к маленькому кусочку готового html...
ЗЫ: Но проблема уже решена, просто написал inherit и для tbody.

bestmoviemaker

в <head>.
внутри <body> можно непосредственно в самом теге описать стиль:
... <a href = "lalala.htm" style = "color: #ccffcc;">lalala</a> ...

kruzer25

внутри <body> можно непосредственно в самом теге описать стиль:
И для чего ты этот стиль укажешь?
Если для таблицы - то ячейки его воспринимать не будут, как я уже описал в первом посте (если не использовать tbody, всё решилось его использованием).
А если для каждой ячейки проставлять - это пиздец геморрой и нихрена не правильно.

bestmoviemaker

А если для каждой ячейки проставлять - это пиздец геморрой и нихрена не правильно.
ясный пень. спросил о "внутри body" - я ответил, как бывает. для много-раз-повторных элементов с одним стилем дублировать style несколько коряво. здесь, действительно, лучше описывать в css-таблице или внутри пары <style> тегов в <head>.

kruzer25

Чорд.
А почему в ИЕ7 не работает?
<html><head><style>
table {
display:table;
border-spacing:0px;
border-collapse:collapse;
border-width:2px;
border-style:solid;
border-color:green;
empty-cells:show;
margin-top:0;
margin-bottom:0;
padding:0;
}
td, tbody, th, tr {
border-width:inherit;
border-style:inherit;
border-color:inherit;
font-size:inherit;
disabledfont-size:7pt;
margin:0;
padding:0;
height:0; max-height:0;
}
tr {display: table-row;}
tbody {display: table-row-group;}
thead {display: table-header-group;}
tfoot {display: table-footer-group;}
td {display: table-cell;padding: 0px;}
th {display: table-cell;padding: 0px;}
</style></head><body>
<table style="border-width:2px;border-color:red;border-style:solid"><tbody>
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
</tr>
</tbody></table>
</body></html>

kruzer25


The Cascading Style Sheets (CSS) attribute is not inherited.
Это означает, что то, что я пишу border:inherit, никак ни на что не влияет, или что по умолчванию оно не наследуется?

yolki

казалось бы, причём здесь WOF?

kruzer25

В общем, пришлось делать жутко извращённое решение.
Для фф/оперы:
tbody,tr,td,th { border:inherit; }

Насколько я понимаю, это не по стандарту, но вроде бы работает.
А для ие (уж совсем не по стандарту):
tbody,tr,td,th { border:expression(this.parentNode.style.border); }

ЗЫ: Ну неужели для такой простой задачи в css нет нормального решения "по стандарту"?

dedwowan

tbody,tr,td,th { border:inherit; }
Почему это не по стандарту?
Да и в css решение есть. Используется-ли это решение конкретным браузером - вопрос другой.

kruzer25

Ну, мне тут вчера никто не ответил на пост с цитатой из msdn, но у меня возникло такое ощущение, что свойство border, вообще-то, наследоваться не может; и вообще, border - это составное свойство из border-style, border-size и border-color; "inherit" обрабатывается как значение border-style, но border-style может принимать только значения none/solid/остальные, и inherit в этом списке нет - так что берётся значение по умолчанию, т.е. none.

kruzer25

Да и в css решение есть.
Какое?
Пока что я нашёл только два решения - с border:inherit и с выражениями, оба, похоже, не по стандарту; и ни одно из этих двух не поддерживается тремя браузерами сразу.

dedwowan

Мсдн - это взгляд майкрософт на стандарты и описывает он поведение только линейки браузеров ИЕ.
Стандарт CSS надо смотреть на W3C и если там написано, что у бордера значение по дефолту - инхерит, значит должно быть - инхерит. Что тебе отвечать на приведенную фразу с МСДНа я лично не знаю. В Майкрасофт не работаю и что именно они заявили этой фразой - не знаю.
Вообще, пора бы уже привыкнуть, что взгляд разных разработчиков на то, как надо следовать стандартам - разные.
P.S. А ты правильные доктайпы прописал?

pitrik2

но border-style может принимать только значения none/solid/остальные, и inherit в этом списке нет
с border:inherit и с выражениями, оба, похоже, не по стандарту
вот стандарт
http://www.w3.org/TR/REC-CSS2/box.html
border вполне себе inherit
Value:  	[ <'border-width'> || <'border-style'> || <color> ] | inherit

MSDN - это не стандарт для CSS и более того, это не стандарт для HTML
с добрым утром

kruzer25

А ты правильные доктайпы прописал?
Да.
Насчёт msdn - я и не говорил, что это авторитет; более того, я даже не был уверен, что правильно понял эту фразу, и спросил здесь. Вот только не ответил никто.

kruzer25

О, а вот другой стандарт:

Value: <border-width> || <border-style> || <color>

Value: none | dotted | dashed | solid | double | groove | ridge | inset | outset
Похоже, что в данном случае ИЕ7 поддерживает только css1...

pitrik2

Похоже, что в данном случае ИЕ7 поддерживает только css1...
да в общем-то в большинстве случаев
изз цсс2 там всего чуть чуть реализовано, некторые селекторы и позиционирование
Оставить комментарий
Имя или ник:
Комментарий: