Плохо ли использовать атрибуты CLASS без соответствующего правила CSS?

Например, если я хочу выбрать некоторые элементы с определенным классом, используя jQuery, и только по этой причине, всегда ли ожидается, что эти классы ДОЛЖНЫ быть определены в css?.

<div class="xyz">
something
</div>

<div class="xyz">
something else
</div>

//with example jQuery
$(".xyz").hide();

//is it wrong no element 'xyz' is defined in css?

person CRice    schedule 14.05.2010    source источник
comment
можно использовать этот метод, но если вы отвечаете за предоставление уникальных идентификаторов, всегда используйте идентификаторы   -  person jAndy    schedule 14.05.2010
comment
Это не плохой тон, но немного не по-джентльменски.   -  person Dan Diplo    schedule 20.08.2010
comment
@SecondRikudo Как это может быть дубликатом, если его спросили за три года до другого?   -  person CRice    schedule 26.11.2014
comment
@CRice, потому что на другой вопрос есть лучший ответ.   -  person Madara's Ghost    schedule 26.11.2014
comment
Должен быть вариант «закрыто, так как есть лучший ответ в другом месте», тогда   -  person CRice    schedule 21.04.2018


Ответы (7)


Использование классов CSS и, в зависимости от случая, идентификаторов (уникальных!!) прекрасно подходит и часто является единственным решением, позволяющим сохранить валидность вашего HTML-кода при предоставлении дополнительных атрибутов, используемых сценариями.

Хотя использование нестандартных атрибутов также часто работает нормально, это предотвратит проверку вашего html-кода и может вызвать проблемы в будущем.

Однако в некоторых случаях могут быть атрибуты, которые также можно использовать, например rel для ссылок, которые часто используются для скриптов, изменяющих поведение ссылок.

http://www.w3.org/TR/html401/struct/global.html#h-7.5.2 также упоминается, что класс является универсальным:

С другой стороны, атрибут класса присваивает элементу одно или несколько имен классов; можно сказать, что элемент принадлежит к этим классам. Имя класса может быть общим для нескольких экземпляров элемента. Атрибут class имеет несколько ролей в HTML:

  • В качестве селектора таблицы стилей (когда автор хочет назначить информацию о стиле набору элементов).
  • Для обработки общего назначения пользовательскими агентами.
person ThiefMaster    schedule 14.05.2010

Это вполне приемлемо. Поскольку обработка на стороне клиента становится все более распространенным явлением (с помощью jQuery, ExtJS, Prototype и т. д.), имеет смысл создавать эффективный код, который может использовать мощную поддержку селекторов, предоставляемую этими библиотеками.

person Mike Trpcic    schedule 14.05.2010

Я так не думаю.

Вы не отделяете данные от презентации, если используете такие классы, как «правильный», «розовый» и т. д.

Я использую классы, чтобы определить, что находится внутри элемента.

<div class="product">

Я могу использовать его с CSS и JS, но иногда мне просто нравятся классы, чтобы я мог легко отлаживать.

person Keyo    schedule 14.05.2010

Атрибут класса указывает имя класса для элемента.

Атрибут class в основном используется для указания на класс в таблице стилей. Однако его также можно использовать в JavaScript (через HTML DOM) для внесения изменений в элементы HTML с указанным классом.

источник

использование атрибутов класса без соответствующего правила css - неплохая форма...

даже лучше использовать класс в качестве «держателя данных», чем любые другие атрибуты, такие как rel, title и т. д.

person Reigel    schedule 14.05.2010

Я бы сказал, что это нормально. Атрибут называется class, а не cssstyleclass или что-то в этом роде. Имеет смысл определять элементы, имеющие что-то общее с атрибутом класса.

person Jarrett Widman    schedule 14.05.2010

На самом деле очень хитро. Сначала вы не задумываетесь об этом, но с помощью иерархии классов вы можете проделывать кое-какие забавные вещи.

Facebook, например, использует HTTP-заголовок User-Agent для установки конкретных классов браузера в теге body. Он не используется все время, но его можно использовать для написания специфичного для браузера CSS, и он превосходит многие другие альтернативы, потому что это просто точечное использование CSS, и в конечном итоге вы группируете специфичные для браузера вещи вместе с общими правилами CSS, продвигая локальность в вашем CSS-файлы. Это важно, когда вам нужно поддерживать файлы CSS в течение длительного периода времени.

a { color: blue; }
.ie7 a { color: black; }

Потому что то, как CSS «каскадирует» приведенное выше правило CSS для тега привязки, будет более конкретным при отображении с помощью Internet Explorer 7. Это будет через специфика селектора заставляет теги привязки быть черными в IE7, без хакерских и непонятных приемов CSS.

Как упоминалось другими, его также можно использовать через JavaScript. Я считаю очень полезным использовать классы CSS в качестве логического флага. например Я могу использовать его для создания очень простого элемента управления водяным знаком.

<input type="text" value="watermark" class="watermark" />

$('input').focus(function(e) { 
    var target = $(this);
    if (target.hasClass('watermark')) {
        target.val('');
        target.removeClass('watermark');
    }
});

Этот фрагмент jQuery будет работать нормально, но что более тонко, так это то, что теперь у меня есть две вещи. Логика и стиль в одном кадре. Потому что водяной знак, используемый здесь как флаг, также можно использовать для применения определенного визуального стиля через CSS, в зависимости от состояния этого ввода. например Возможно, мне не нужен сероватый курсивный шрифт, когда водяной знак активен.

Таких примеров еще много, и я призываю вас больше экспериментировать.

person John Leidegren    schedule 14.05.2010

Я не думаю, что это плохая практика. Если они вам нужны, вы должны их использовать. Тонально это имеет смысл.

Если вы не хотите, возможно, у вас есть родительский элемент, который окружает все элементы, или вы можете найти что-то еще, что у них общего, и перевести это в селектор. $("div#somediv > div").hide() Но это будет стоить вам больше времени и мыслей, как будто вы просто даете им урок.

person meo    schedule 14.05.2010