Jump to content
  • 0

Кто подскажет, кто расскажет...


gordi
 Share

Question

24 answers to this question

Recommended Posts

  • 0

А в чем прикол? У меня (Хром 16, ФФ10б, IE9, дальше не проверял), вроде бы, всё работает ожидаемо: первый див (подпадающий только под селектор класса) - синий, второй (подпадающий также под соседский селектор) - красный жирный. Или я в упор не вижу чего-то очевидного?

Link to comment
Share on other sites

  • 0

А в чем прикол? У меня (Хром 16, ФФ10б, IE9, дальше не проверял), вроде бы, всё работает ожидаемо: первый див (подпадающий только под селектор класса) - синий, второй (подпадающий также под соседский селектор) - красный жирный. Или я в упор не вижу чего-то очевидного?

А должно ли быть так, что

*~*.XXX {...}
или
*+*.XXX {...}

Меняет оформление блока с одним и тем же классом?

Link to comment
Share on other sites

  • 0

Насколько я понимаю, да. Соседний селектор применяется, если перед элементом с классом в рамках того же предка есть что угодно (сразу перед ним во втором случае и неважно где перед ним - в первом). В коде он идет последним (при одинаковой специфичности), поэтому перекрывает просто селектор по классу...

Link to comment
Share on other sites

  • 0

Насколько я понимаю, да. Соседний селектор применяется, если перед элементом с классом в рамках того же предка есть что угодно (сразу перед ним во втором случае и неважно где перед ним - в первом). В коде он идет последним (при одинаковой специфичности), поэтому перекрывает просто селектор по классу...

Возможно вы и правы, но любой другой символ вместо "~" или "+", все это дело для второго по html-коду блока отменяет.

Также, если сразу после

</body>

добавить хотя бы <br>, начинает работать только

*~*.XXX {...}

и это не понятно :)

Edited by gordi
Link to comment
Share on other sites

  • 0

Насколько я понимаю, да. Соседний селектор применяется, если перед элементом с классом в рамках того же предка есть что угодно (сразу перед ним во втором случае и неважно где перед ним - в первом). В коде он идет последним (при одинаковой специфичности), поэтому перекрывает просто селектор по классу...

Меня единственное смущает, это последняя звёздочка после "+".

*+* - выходит это можно расценивать, как Применять к любому элементу, перед которым идёт любой другой элемент?

Насколько я понимаю, да. Соседний селектор применяется, если перед элементом с классом в рамках того же предка есть что угодно (сразу перед ним во втором случае и неважно где перед ним - в первом). В коде он идет последним (при одинаковой специфичности), поэтому перекрывает просто селектор по классу...

Возможно вы и правы, но любой другой символ вместо "~" или "+", все это дело для второго по html-коду блока отменяет.

Также, если сразу после

</body>

добавить хотя бы <br>, начинает работать только

*~*.XXX {...}

и это не понятно :)

После закрывающего тега body?

Link to comment
Share on other sites

  • 0

Меня единственное смущает, это последняя звёздочка после "+".

*+* - выходит это можно расценивать, как Применять к любому элементу, перед которым идёт любой другой элемент?

*+*.hackcss - любой элемент с классом hackcss следующий после любого элемента.

Звездочку можно использовать в любом месте.

Link to comment
Share on other sites

  • 0

Насколько я понимаю, да. Соседний селектор применяется, если перед элементом с классом в рамках того же предка есть что угодно (сразу перед ним во втором случае и неважно где перед ним - в первом). В коде он идет последним (при одинаковой специфичности), поэтому перекрывает просто селектор по классу...

Меня единственное смущает, это последняя звёздочка после "+".

*+* - выходит это можно расценивать, как Применять к любому элементу, перед которым идёт любой другой элемент?

Насколько я понимаю, да. Соседний селектор применяется, если перед элементом с классом в рамках того же предка есть что угодно (сразу перед ним во втором случае и неважно где перед ним - в первом). В коде он идет последним (при одинаковой специфичности), поэтому перекрывает просто селектор по классу...

Возможно вы и правы, но любой другой символ вместо "~" или "+", все это дело для второго по html-коду блока отменяет.

Также, если сразу после

</body>

добавить хотя бы <br>, начинает работать только

*~*.XXX {...}

и это не понятно :)

После закрывающего тега body?

Да.

Можно вопрос поставить иначе.

Почему и первый и второй блок оформлены по разному?

По идее, с учетом последней строки стилей с *+*, визуал обоих блоков должен быть одинаковым, а это не так :)

Link to comment
Share on other sites

  • 0

Меня единственное смущает, это последняя звёздочка после "+".

*+* - выходит это можно расценивать, как Применять к любому элементу, перед которым идёт любой другой элемент?

*+*.hackcss - любой элемент с классом hackcss следующий после любого элемента.

Звездочку можно использовать в любом месте.

Да, но есть всё таки одно НО. Зацени, я ставлю <br /> в начале и всё обламывается. http://jsfiddle.net/qvVUU/

Хотя не, тут я уже тупанул вроде, тогда непонятно, где же подвох?

Можно вопрос поставить иначе.

Почему и первый и второй блок оформлены по разному?

По идее, с учетом последней строки стилей с *+*, визуал обоих блоков должен быть одинаковым, а это не так :)

Нее, не, тут есть подвох какой-то))

Дружище, а приведи свой пример с непоняткой плз

Link to comment
Share on other sites

  • 0

Меня единственное смущает, это последняя звёздочка после "+".

*+* - выходит это можно расценивать, как Применять к любому элементу, перед которым идёт любой другой элемент?

*+*.hackcss - любой элемент с классом hackcss следующий после любого элемента.

Звездочку можно использовать в любом месте.

Да, но есть всё таки одно НО. Зацени, я ставлю <br /> в начале и всё обламывается. http://jsfiddle.net/qvVUU/

Хотя не, тут я уже тупанул вроде, тогда непонятно, где же подвох?

Можно вопрос поставить иначе.

Почему и первый и второй блок оформлены по разному?

По идее, с учетом последней строки стилей с *+*, визуал обоих блоков должен быть одинаковым, а это не так :)

Нее, не, тут есть подвох какой-то))

Так и я о том же :)

Причем IE6 все эти выкрутасы по фигу :)

Типа антихак для него на рисовался :)

Сам не знаю что с этим делать, вроде и ни к чему фишка, где ее, когда использовать, но есть проблема и как быть не понятно :)

Edited by gordi
Link to comment
Share on other sites

  • 0

Почему и первый и второй блок оформлены по разному?

По идее, с учетом последней строки стилей с *+*, визуал обоих блоков должен быть одинаковым, а это не так :)

К обоим блокам применяется правило .hackcss {}

Ко второму блоку применяется правило *+*.hackcss {} поскольку только у этого элемента с этим классом есть предшествующий сестринский элемент.

Причем IE6 все эти выкрутасы по фигу :)

Естественно пофигу. Точно также как и div > p или div[class]

Link to comment
Share on other sites

  • 0

Почему и первый и второй блок оформлены по разному?

По идее, с учетом последней строки стилей с *+*, визуал обоих блоков должен быть одинаковым, а это не так :)

К обоим блокам применяется правило .hackcss {}

Ко второму блоку применяется правило *+*.hackcss {} поскольку только у этого элемента с этим классом есть предшествующий сестринский элемент.

Причем IE6 все эти выкрутасы по фигу :)

Естественно пофигу. Точно также как и div > p или div[class]

Тогда почему добавление <br> сразу после </body>

меняет оформление первого блока?

Link to comment
Share on other sites

  • 0

Почему и первый и второй блок оформлены по разному?

По идее, с учетом последней строки стилей с *+*, визуал обоих блоков должен быть одинаковым, а это не так :)

К обоим блокам применяется правило .hackcss {}

Ко второму блоку применяется правило *+*.hackcss {} поскольку только у этого элемента с этим классом есть предшествующий сестринский элемент.

Причем IE6 все эти выкрутасы по фигу :)

Естественно пофигу. Точно также как и div > p или div[class]

Тогда почему добавление <br> сразу после </body>

меняет оформление первого блока?

У меня такого не происходит. В фф по крайней мере. Приведи пример.

Да, и, кстати в html ничего кроме body пихать нельзя, парсер выкинет любой другой элемент наружу и вставит в конец body

Link to comment
Share on other sites

  • 0

Тогда почему добавление <br> сразу после </body>

меняет оформление первого блока?

Потому что у первого блока также появляется предшествующий сестринский элемент - <br />

Да лана? У меня такого не происходит. Покажите примерчик, люди)

Парсер в Хроме и ФФ, как минимум, вставляет <br> в конец, перед закрывающим body

Тогда почему добавление <br> сразу после </body>

меняет оформление первого блока?

В смысле?


<body>
....
</body>
<br>

Так?

Ага)

Link to comment
Share on other sites

  • 0

Да лана? У меня такого не происходит. Покажите примерчик, люди)

Смотри исправленную версию поста :)

Я думала он имеет ввиду


<body>
<br>
<div></div>
<div></div>
</body>

Ага)

Да мне такое и в голову не могло придти :)

Link to comment
Share on other sites

  • 0

Да лана? У меня такого не происходит. Покажите примерчик, люди)

Смотри исправленную версию поста :)

Я думала он имеет ввиду


<body>
<br>
<div></div>
<div></div>
</body>

Ага)

Да мне такое и в голову не могло придти :)

Да, в том-то и дело, поэтому я его спецом. переспросил :D

Link to comment
Share on other sites

  • 0

Стоп, ошибся надо <br> после <body> ставить :)

Должно быть так


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
<title>hackcss</title>
<style type="text/css">
* {margin:0;padding:0;}
.hackcss {border:#00a 1px solid;color:#00a;margin:10px auto;padding:7px;width:400px;}
*+*.hackcss {border:#a00 1px solid;color:#a00;font:bold 12px arial;}
</style>
</head>
<body>
<br>
<div class="hackcss">
<p>Google Crome, FireFox, OPERA, IE7(8)</p>
<p>.hackcss {border:#00a 1px solid;color:#00a;}</p>
</div>

<div class="hackcss">
<p>Google Crome, FireFox, OPERA, IE7(8)</p>
<p>*~*.hackcss {border:#a00 1px solid;color:#a00;}</p>
<p>*+*.hackcss {border:#a00 1px solid;color:#a00;}</p>
</div>
</body>
</html>

И все блоки будут оформлены по последней строке стилей.

Поэтому вопрос остается прежним. Почему добавление <br> меняет оформление блоков?

Хочу сказать ответа не знаю, потому и тему завел.

Edited by gordi
Link to comment
Share on other sites

  • 0

Стоп, ошибся надо <br> после <body> ставить :)

Должно быть так


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
<title>hackcss</title>
<style type="text/css">
* {margin:0;padding:0;}
.hackcss {border:#00a 1px solid;color:#00a;margin:10px auto;padding:7px;width:400px;}
*+*.hackcss {border:#a00 1px solid;color:#a00;font:bold 12px arial;}
</style>
</head>
<body>
<br>
<div class="hackcss">
<p>Google Crome, FireFox, OPERA, IE7(8)</p>
<p>.hackcss {border:#00a 1px solid;color:#00a;}</p>
</div>

<div class="hackcss">
<p>Google Crome, FireFox, OPERA, IE7(8)</p>
<p>*~*.hackcss {border:#a00 1px solid;color:#a00;}</p>
<p>*+*.hackcss {border:#a00 1px solid;color:#a00;}</p>
</div>
</body>
</html>

И все блоки будут оформлены по последней строке стилей.

Поэтому вопрос остается прежним. Почему?

У меня такого не происходит. Приведи пример, не издевайся :D

Тупанул. Оксана уже чуть выше объяснила, почему.

Потому что теперь первым элементом становиться <br>

Link to comment
Share on other sites

  • 0

.hackcss — любой элемент с классом "hackcss"

* + *.hackcss (эквивалентно * + .hackcss, звездочка специфичности не меняет) — любой элемент с классом "hackcss", непосредственно следующий за любым элементом (т.е. не первый ребенок у своего родителя).

* ~ *.hackcss (эквивалентно * ~ .hackcss, звездочка специфичности не меняет) — любой элемент с классом "hackcss", идущий после любого элемента (т.е. тоже не первый ребенок у своего родителя).

Если первый див является первым ребенком родителя, к нему применяется только правило для .hackcss. Если перед ним идет <br> — он уже не первый ребенок, поэтому к нему применются оба правила. Второй див всегда не первый ребенок, поэтому к нему всегда применяются оба правила.

IE6 соседских селекторов тупо не понимает. IE7-8, по идее, понимает +, но не должен понимать ~ (насколько мне известно).

По-моему, всё логично :)

  • Like 2
Link to comment
Share on other sites

  • 0

У td родитель - tr. Соответственно, в каждом tr к первой td применяется только правило по классу, ко второй (как к не первому ребенку) — оно же + правило с соседским селектором. А br им ни разу не старший брат (а всего лишь двоюродный прадедушка — брат table, родителя tbody, который родитель tr-кам), поэтому ни на что не влияет.

Link to comment
Share on other sites

  • 0

Как бы там ни было, для таблицы этот трюк может быть полезен, часто не имея возможности поменять класс в html, можно стилями при помощи добавки *+* к одноименному классу, оформление в одном из столбцов изменить :)

Edited by gordi
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy