Элементы тегов HTML с пользовательскими тегами вместо использования классов

0

Вместо того, чтобы использовать стандартный класс = "someclass", я отклонился от этого шаблона и "пометил" div таким образом:

<html>
<head>
<style type="text/css">
div[tag1]
{
background-color:Red;
}
</style>
</head>
<body>
<div tag1>test</div>
<div>test</div>
</body>
</html>

Каковы недостатки такого подхода (помимо очевидного факта, что это может смутить некоторых разработчиков)? Будет ли он работать в любом браузере? (Я проверил FF, IE и Chrome - он работал во всех них). Для меня это выглядит более кратким, чем использование класса. Благодарю!

  • 1
    похоже, что вы хотите создать колесо новым .... каждый использует класс или идентификатор, так почему вы хотите придумать новый путь? и, кстати ... я думаю, у вас возникнут проблемы, если вы начнете использовать jquery / bootstrap и тому подобное
  • 0
    Согласен, я не понимаю, почему вы хотели бы сделать это.
Показать ещё 1 комментарий
Теги:

2 ответа

1

Я вижу несколько недостатков вашего подхода

Специфика: все атрибуты в элементе, за исключением идентификатора, анализируются как классы. Выбирая идти с <div someAtt>, это всегда будет иметь специфику класса: 0,0,1,0.

Селекторы: вы не создаете более короткие селектора:

class элемента также является атрибутом. Вы можете выбрать элемент с таким классом:

[class="tag1"]{
 color:red;
 }

Это, по сути, является "нормальным" способом выбора элемента с атрибутом, который имеет значение. Способ, которым мы выбираем классы, является скорее сокращением для вышеуказанного правила:

.tag1{
 color:red
 }

Поскольку вы предлагаете настраиваемый атрибут, ваш селектор будет:

[tag1]{
color:red
}

Если вы подсчитываете символы, селектор атрибутов "longhand" занимает самое большое место и селектор классов. Вы не делаете таблицу стилей короче с вашим подходом. Ваш селектор всегда будет длиннее хотя бы одним символом. Это огромная сделка? Нет. Но со временем это будет, и теперь вам нужно обучить кого-то, кто возьмет ваш стиль за ваш подход.

Расширяемость. Еще одна проблема с добавлением недопустимого атрибута к вашей разметке - расширяемость. Ваша цель должна быть расширяемой разметкой и CSS, поэтому вам нужен шаблон, который можно использовать повторно. если вы собираетесь иметь tag1, tag2 и т.д., это не расширяемый шаблон.

Как вы планируете заниматься многоразовыми стилями? Вы говорите, что <div tag1 tag2 tag3 tag4> может произойти в какой-то момент в будущем. Как вы планируете стилизовать это?

div[tag1][tag2][tag3][tag4]{
color:red;
border-color:red;
outline-color: red;
background-color: red;
}

[tag1]{
color:red
}
[tag2]{
border-color:orange
}
[tag3]{
outline-color:yellow
}

Я вижу tag как атрибут многократного использования, который может принимать изменяющееся значение:

<div tag="one">

Что приводит к этому селектору:

   [tag="one"]{
   color: green
   }

Что в конечном счете, означает, что вы повторили "класс" подход, но с более селектором и вовсе не к стенографии (подобно ., Что так же, как [class=""].

Valid Markup: следующая проблема, которую я вижу в вашем подходе, заключается в том, что вы используете недопустимые атрибуты. В HTML5 вы можете использовать подход data-* чтобы в значительной степени создать любые атрибуты, которые вы хотите в несколько нормализованном шаблоне. Но недействительные атрибуты, такие как tag1 могут отбрасывать любые валидаторы HTML. Кроме того, я не знаю, как устройства чтения с экрана или другие устройства доступности могут работать с недопустимыми или неизвестными атрибутами.

"Соседний путь": последний вопрос, который я вижу, более философский. Мы получаем большую свободу и гибкость в HTML и CSS, чем на других языках разработки. Веб-браузеры намного, гораздо более прощают ошибки, которые мы делаем в HTML и CSS, чем скомпилированные языки. Мы не должны приравнивать свободу к тому, чтобы отличаться от мудрости следующих стандартов и передовых методов.

0

Единственным недостатком, о котором я могу думать, является то, что вы заблокируете свой css для типа тега. т.е. с классом, который вы могли бы сделать:

<div class="alignRight"> Some thing </div>
<table class="alignRight">table data</table>

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

  • 0
    Спасибо, в своей разметке я в основном все равно использую "div", чтобы не возникало проблем
  • 0
    Я предполагаю, что будут некоторые пуристы, которым это не понравится, и у них есть смысл, так как вы только усложняете свой код без выгоды. Не уверен, почему вы думаете, что это хорошо, если в вашем html меньше 8 символов, но если это наиболее важно для вас, идите вперед =)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню