2013-02-23 3 views
1

У меня есть класс «t_data», который предназначен для настройки внешнего вида для большинства моих таблиц.css: как наследовать весь класс

Хотя, в некоторых случаях мне нужно сделать дополнительные специализации таблиц: допустим, что таблицы для «клиентов» и «заказы» выглядят по-другому.

По умолчанию способ наследования стилей для описания CSS-определения для обоих классов в том же блоке, что-то вроде этого:

table.t_data, table.t_data_order, table.t_data_customer 
{ 
    background-color: #080; 
} 

Таким образом работает хорошо до некоторой степени ... пока я не слишком много различных определения.

Прямо сейчас у меня есть уже что-то вроде этого:

table.t_data thead tr th, table.t_data thead tr td, table.t_data tbody tr th,  table.t_data tbody tr td, table.t_data tfoot tr th, table.t_data tfoot tr td, 
table.t_group thead tr th, table.t_group thead tr td, table.t_group tbody tr th,  table.t_group tbody tr td, table.t_group tfoot tr th, table.t_group tfoot tr td 
{ 
    border: #333 1px solid; 
} 

Для того, чтобы сделать персонализировать t_data выглядеть по-разному для t_data_customer и/или t_data_order мне нужно будет тройные этот блок ... и существует высокий риск пропустить некоторые элементы ... у меня также есть более 10 таких блоков для различных элементов (например, фон, шрифт и т.д.)

есть ли CSS или даже без CSS решения для подобных вещей?

спасибо!

P.S. Если у вас нет решения, но только идеи, не стесняйтесь делиться ими! Любые мысли приветствуются

+0

Это невозможно в родном CSS, но есть прекомпиляторы CSS, которые предлагают наследование и многое другое, например. МЕНЬШЕ: http://lesscss.org/ –

+1

Использование HTML-элементов с несколькими классами может помочь. – nwellnhof

ответ

1

К сожалению, вы не можете сделать это с помощью CSS. К счастью, вы можете использовать прекомпиляторы CSS для этого для вас (примеры: LESS & Sass). Чтобы быть более точным, вы можете использовать Mixins (поддерживается на обоих языках).

Mixins позволяет вставлять все свойства класса в другой класс , просто введя имя класса в качестве одного из его свойств. Это как переменные, но для целых классов. Mixins могут также вести себя как функции и принимать аргументы, как показано в примере ниже.

.rounded-corners (@radius: 5px) { 
    -webkit-border-radius: @radius; 
    -moz-border-radius: @radius; 
    -ms-border-radius: @radius; 
    -o-border-radius: @radius; 
    border-radius: @radius; 
} 

#header { 
    .rounded-corners; 
} 
#footer { 
    .rounded-corners(10px); 
} 

(пример из LESS). Это то, что вы могли бы сделать со своим классом t_data.

+0

Не использовал его еще, но, скорее всего, продолжит LESS - это звучит как очень хорошая идея. – Budda

1

Что о добавлении нового класса общего CSS для таблиц и целевого

.common td 
.common th { 
} 

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

td { 
    /* Sensible default for all table cells */ 
} 

Следующий шаг - найти имя класса, которое является «общим» для ваших таблиц с альтернативным стилем. Популярная платформа twitter bootstrap использует «table-bordered» для таблицы с границами, другие утверждали бы, что было бы лучше найти семантический общий знаменатель. Но это зависит от вас.

Это не про семантический или нет, но с тех пор пилы презентация Николь Салливан, я не могу найти презентацию, но я могу найти цитаты из него: http://css-tricks.com/semantic-class-names/

В презентации по Николь Салливан Недавно я увидел на саммите CSS, она вызвала несколько крупных компаний для объявления того же цвета в файлах CSS буквально тысячи раз.

Я пытаюсь найти смысл для того, что мы пишем в css-файлах и нацеливаться на большие общие знаменатели.

+0

Я правильно понимаю, что вы предлагаете всем распространенным материалам в форматирование по умолчанию, чтобы уменьшить количество классов t_data, которые необходимо повторно использовать? Это не будет работать, поскольку я использую таблицы во многих сценариях, и вам нужно будет убедиться, что каждый класс переопределит стиль по умолчанию. На самом деле речь идет не только о таблицах. – Budda

+0

Это зависит от сайта и сайта, но я ищу создание разумного дефолта, например. таблица должна иметь более или менее одинаковый внешний вид на всем сайте, чтобы поддерживать согласованность дизайна. Тогда у вас будет несколько разных таблиц, надеюсь, с чем-то общим, которое может быть написано с использованием того же класса. – orjan

0

Вместо определения многих классов вы можете использовать идентификатор и класс.

С идентификатором вы определяете основной CSS и с классами, которые вы определяете.

<table id="mainstyle" class="variation1"> ... 
+0

У меня часто бывает несколько таблиц на странице, и использование идентификаторов для форматирования не похоже на коррекцию – Budda