Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Поместить блочный элемент в инлайн? (https://javascript.ru/forum/jquery/70702-pomestit-blochnyjj-ehlement-v-inlajjn.html)

plug-ugly 26.09.2017 19:53

Поместить блочный элемент в инлайн?
 
Всем здравствуйте!

Такое вот задание "Оберните все <h2> в один <i>.", данную операцию предлагают сделать с помощью wrapAll.
Все бы ничего, но ведь <i> это инлайн элемент и он не может оборачивать блочные, коем является <h2>.

Объясните, пожалуйста, в чем я не прав, может я упустил какие-нибудь нюансы, или вновь моя невнимательность меня подводит?

рони 26.09.2017 20:00

plug-ugly,
не вижу препятствий

void() 26.09.2017 20:01

Раньше так не рекомендовали делать, но в html5 все изменилось и теперь официально поощряется. Ну не то, чтобы поощряется, но это нормально.

plug-ugly 26.09.2017 20:24

Понятно, спасибо.

j0hnik 26.09.2017 20:28

Если это экзамен, то напоминает экзамен по вождению, когда мент говорит: "Припаркуйтесь вот тут", а там знак, парковка запрещена :stop: :(

j0hnik 26.09.2017 20:30

Цитата:

Сообщение от void() (Сообщение 465566)
Раньше так не рекомендовали делать, но в html5 все изменилось и теперь официально поощряется. Ну не то, чтобы поощряется, но это нормально.

https://validator.w3.org/ :no:

Rasy 26.09.2017 20:38

Да, фразовые элементы не должны содержать заголовки, элементы управляющие потоком документа. Это грубая ошибка. Обратимся к спеке - phrasing-content-2

laimas 26.09.2017 20:40

Цитата:

Сообщение от void()
Ну не то, чтобы поощряется, но это нормально.

Это как было ненормальным семантически так и осталось. Что-то было по поводу связки А и Н, и теперь любое из вложенности не считается невалидным, но чтобы все и как угодно.... Так можно считать нормальным и таблицу в span, strong, ... так что ли?

void() 26.09.2017 20:58

Цитата:

Сообщение от laimas (Сообщение 465577)
Это как было ненормальным семантически так и осталось. Что-то было по поводу связки А и Н, и теперь любое из вложенности не считается невалидным, но чтобы все и как угодно.... Так можно считать нормальным и таблицу в span, strong, ... так что ли?

А, точно! Вот я об этом А и Н! И по-моему там было еще про А и IMG и что-то еще... Возмжно даже что в ссылку можно положить DIV и это не будет считаться ошибкой. Тоже смутно помню, т.к. давно читал уже. Почему-то запомнилось, что теперь можно все)

laimas 26.09.2017 21:14

Цитата:

Сообщение от void()
было еще про А и IMG

IMG это не блочный элемент.

laimas 27.09.2017 07:41

Цитата:

Сообщение от Rise
Ссылка и заголовок? А что мешает разместить ссылку внутри заголовка?

Да. Сейчас ничего, хоть <a><h1>... хоть <h1><a>.

laimas 27.09.2017 08:12

Цитата:

Сообщение от Rise
а раньше что парсер их разделял?

А раньше на <a><h1> ругалось. Собственно на какие-то мелочи все "кладут", судя по анализу верстки, точно также как разработчики браузеров на рекомендации W3C. :)

Rasy 27.09.2017 11:11

Цитата:

Сообщение от Rise
А что мешает разместить ссылку внутри заголовка? Ничего.

Сео. Например, список товаров, которые содержат три одинаковых ссылки: заголовок, картинка и подробнее.

Проще обернуть весь блок в <a> и задать одну ссылку на товар, если дизайн требует кликабельности целого блока. Атрибут onclick и другие решения с js неудобны.

Цитата:

Сообщение от Rise
Так вот правило одно "блочные не должны быть внутри не блочных", а кто какой читайте стандарты.

Именно так, но есть исключение для ссылки. Эта возможность появилось давно с приходом html5. Просто стандартизация html5 была недавно. Старая статья с пруфом на стандарты.
http://html5doctor.com/block-level-links-in-html-5/

Белый шум 27.09.2017 12:09

Цитата:

Changes in HTML5
Although previous versions of HTML restricted the a element to only containing phrasing content (essentially, what was in previous versions referred to as “inline” content), the a element is now transparent; that is, an instance of the a element is now allowed to also contain flow content (essentially, what was in previous versions referred to as “block” content)—if the parent element of that instance of the a element is an element that is allowed to contain flow content.
http://w3c.github.io/html-reference/a.html
??

Rasy 27.09.2017 12:10

Цитата:

Сообщение от Rise
Это лишь фантазия автора статьи ничем необоснованная


Белый шум,
это, это :)

Белый шум 27.09.2017 12:58

Rise,
https://www.w3.org/TR/html51/textlev...l#elementdef-a
??

Белый шум 27.09.2017 13:13

лолчто? В примере стандарта - не серьёзно? %))
Ну вот ещё прямым текстом -
Цитата:

Content model:
Transparent, but there must be no interactive content or a element descendants.
Или опять - "ничего удивительного если стандарт писали как валидатор и автор статью без пруфов на домыслах"? :)

Rasy 27.09.2017 13:23

Цитата:

Сообщение от Белый шум
лолчто? В примере стандарта - не серьёзно? %))

Тут уже проблема в эго... Ничего не докажешь. Когда человек сам пишет домыслы, а два собеседника - неоспоримые аргументы.:)
В самой статье есть пруф (see WCAG 2)
Цитата:

Сообщение от Rise
А где там пруфы на стандарты ты сам то читал?

Да читал, и думал, что это не так сложно повторить.:) Example 7
Using a link to wrap block level elements in HTML5.

laimas 27.09.2017 13:29

Rise,
разрешено теперь, то есть не считается ошибкой. Спор ни о чем. ;)

Белый шум 27.09.2017 13:46

Цитата:

Сообщение от Rise
но все таки прямым текстом ясно об этом нигде не сказано кроме черновика

Слово "Transparent" в стандарте - это ссылка, по которой ясно написано что это означает.

P.S.: да, стандарты читать сложно, поэтому это делают редко ))

Белый шум 27.09.2017 14:03

Rise,
Там это где? А то я уже запутался.

Цитата:

3.2.4.3. Transparent content models

Some elements are described as transparent; they have "transparent" in the description of their content model. The content model of a transparent element is derived from the content model of its parent element: the elements required in the part of the content model that is "transparent" are the same elements as required in the part of the content model of the parent of the transparent element in which the transparent element finds itself.
https://www.w3.org/TR/html51/dom.html#transparent

Rasy 27.09.2017 14:11

Rise,
Ты просто чванишься тут задействовав весь спектр эмоций.:) Трактуешь что-то нелогичное и несвязанное. Это же надо такой бред нести. :lol:
Цитата:

Сообщение от Rise
А ты читал что там написано?

Вот этим тебе и стоит заняться:)

Rasy 27.09.2017 14:15

Белый шум,
Не трать больше энергии. Он сам ничего не понимает. Возможно, даже где находится. Я предупреждал...

Rasy 27.09.2017 14:19

Прям настроение поднялось.:D
<iframe src="//coub.com/embed/4jz7o6f?muted=false&autostart=false&originalSize=false&startWithHD=false" allowfullscreen="true" frameborder="0" width="634" height="480"></iframe>

Белый шум 27.09.2017 14:33

Цитата:

Сообщение от Rise (Сообщение 465662)
Белый шум,
А ты можешь перевести на русский, а то мне кажется ты не понимаешь что там написано?

Вполне возможно, мой английский оставляет желать лучшего. Но общую мысль я вроде бы уловил:
Цитата:

Некоторые элементы описываются как transparent; они имеют "transparent" в описании их контентной модели. Контентная модель транспарентных элементов это производная от контентной модели их родительского элемента: элементы, в чьей контентной модели указано "transparent" имеют ту же контентную модель, которая указана в поле "контентная модель" их родителя.
Интересно прочитать твою версию перевода :)

j0hnik 27.09.2017 15:44

Райс это для ссылок, спаном нельзя блочные заворачивать.

j0hnik 27.09.2017 16:00

Ссылкой можно блок обернуть, код будет валидный.
Спаном нельзя блок обернуть, код будет не валидный.

так можно
<a href="/">
	<h1>Header</h1>
</a>


а так нет
<span>
	<h1>Header</h1>
</span>


родители не причем

Белый шум 27.09.2017 16:06

Rise,
Да, написали мудрёно, но это для обобщения - видимо там есть и другие транспарентные элементы, не только a.

j0hnik 27.09.2017 16:35

Райс если дело в родителе, почему ниже код валидный??

ins родитель а и это инлайновый элемент

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<div>

		<ins>
			<a href="#">
				<h1>Header</h1>
			</a>
		</ins>

	</div>
</body>
</html>

j0hnik 27.09.2017 20:41

<ins>Текст</ins>
<div>Текст</div>
<a href="">Текст</a>


Чем ins прозрачнее div-a или ссылки?? они не могут содержать своего контента??

вот не прозрачный тоже валидный
<ins>текст
	<a href="#">
		<h1>Header</h1>
	</a>
</ins>

Белый шум 27.09.2017 23:01

j0hnik,
Речь про:
Цитата:

Content model:
Transparent.
https://www.w3.org/TR/html51/edits.html#elementdef-ins
, а не какую-то иную прозрачность :)

j0hnik 28.09.2017 00:09

Белый шум,
понятно,
все эти элементы для которых исключения транспарентные
a, ins, del, object, video, audio, map, noscript, slot, canvas, custom element
которые перечислил Райс.
ими же можно оборачивать блоки

вот только зачем такое сложное объяснение, если можно сказать проще:
Инлайновые элементы не должны внутри себя содержать блочные
исключения составляют a, ins, del, object, video, audio, map, noscript, slot, canvas, custom element.
вот и все объяснение.

просто опять появляются исключения
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<a href="#">
		<h1>Header</h1>
	</a>
</body>
</html>


боди не блочный и не транспарентый, а код валидный :-?

Белый шум 28.09.2017 00:36

j0hnik,
в стандарте не сказано, что родитель транспарентных элементов может быть только блочным. Там сказано, что он принимает ту же контентную модель, что и родитель. Т.е. если <h1> может быть потомком <body>, то он может быть и потомком <body><a> - никакого исключения тут нет.

j0hnik 28.09.2017 02:32

Цитата:

Сообщение от Белый шум (Сообщение 465775)
j0hnik,
Там сказано, что он принимает ту же контентную модель, что и родитель.

Вот это определение мне нравится! :)
Шум, спасибо за разъяснения!

рони 28.09.2017 03:36

:-?
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
   <script>
$(function() {
    $("h2").wrapAll("<i>")
});
  </script>
</head>

<body>
    <h2>1</h2>
    <h2>2</h2>
    <h2>3</h2>
    <h2>4</h2>
    <h2>5</h2>

</body>
</html>


<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
   <script>
$(function() {
    $("h2").wrapInner("<i>")
});
  </script>
</head>

<body>
    <h2>1</h2>
    <h2>2</h2>
    <h2>3</h2>
    <h2>4</h2>
    <h2>5</h2>

</body>
</html>

Белый шум 28.09.2017 07:56

Ну, браузеры всегда относились лояльно к ошибкам стандарта на сайтах...

Тут ещё такой вопрос - контентная модель (еяпп) описывает только разрешение отношений предок-потомок, а не блочную модель:
Цитата:

Content model
A normative description of what content must be included as children and descendants of the element.
https://www.w3.org/TR/html51/dom.html#content-model

Т.е. такой код разрешён:
<div>
 Каждый <a href="#">охотник</a> желает знать где <ins>сидит</ins> фазан
</div>
Но ссылка при этом не станет блочной (хотя она внутри <div>) - т.е. браузер не поместит слово "охотник" в отдельный блок с шириной 100% (как если бы существовал стиль: "div>a, div>ins { display:block; }").

Но где в стандарте html5 описывается блочная модель элемента - я что-то не вижу...

Rasy 28.09.2017 11:07

https://www.w3.org/TR/html5/ - официальная верси w3c
http://w3c.github.io/html/ - последняя рабочая версия

Цитата:

https://html.spec.whatwg.org/multipage/ - здесь вы найдете чрезвычайно экспериментальные идеи. Не думайте, что если о чем-то говорится в этом документе, то это хоть где-то реализовано или хотя бы детально продумано.


Часовой пояс GMT +3, время: 04:57.