1. Михаил

    13.08.2008 13:53

    Вопрос будет ламерский :-\

    Вот решил немного освоить html, в качестве пособия выбрал intuit.ru. И один тест меня очень смутил:
    Как будет отображен следующий код:
    <P>aaaaaaaaa<DIV>bbbbbbbbb</DIV><DIV>ccccc<P>ccccc</DIV>?

    1.
    aaaaaaaaa
    bbbbbbbbb
    ccccc
    ccccc

    2.
    aaaaaaaaa
    bbbbbbbbb
    cccccccccc

    3.
    aaaa aaa aabbbbbbbbb
    ccccc
    ccccc

    На вскидку у меня получалось, что выглядеть должно примерно вот так:

    aaaaaaaaa

    bbbbbbbbb
    ccccc

    ccccc

    Решил проверить на практике: в трех браузерах (Mozilla 3, Epiphyny-Webkit и Opera 9,5) все так и выглядит, но методом copy-paste получается только один отступ - второй.

    В итоге я что-то туплю: первый пробел появляется как отступ между блоками (ну, вроде бы <p> не может включать <div>, так что должен закрыться перед ним)?

    Почему тогда во втором случае появляется "лишний" символ перевода строки, ведь <div> может включать параграф (просто единственное приходящее мне в голову объяснение - параграф сразу же и закрывается пустым)?
  2. Иван Сагалаев

    13.08.2008 14:02

    Как будет отображен следующий код: <P>aaaaaaaaa<DIV>bbbbbbbbb</DIV><DIV>ccccc<P>ccccc</DIV>?

    По идее, правильный ответ: "В зависимости от CSS и Content-Type".

    Решил проверить на практике: в трех браузерах (Mozilla 3, Epiphyny-Webkit и Opera 9,5) все так и выглядит, но методом copy-paste получается только один отступ - второй.

    Не понял... Если "все так и выглядит", то что значит "методом copy-paste получается только один отступ - второй"?

    Почему тогда во втором случае появляется "лишний" символ перевода строки, ведь <div> может включать парагра

    Это не "перевод строки" :-). В большинстве браузеров элементу <p> в дефолтных стилях назначаются верхний и нижний margin'ы. Соответственно в куске:

    <DIV>ccccc<P>ccccc</DIV>
    

    Вторая группа "ccccc" находится внутри <p> и сверху и снизу от нее должны быть отступы.

  3. Михаил

    13.08.2008 14:17

    Имелось в виду что будет без CSS и с Content-Type text/html
    Не понял... Если "все так и выглядит", то что значит "методом copy-paste получается только один отступ - второй"?
    Т.е. отображаются два отступа, но вот если попробовать это выделить и загнать в любой текстовый редактор, то выясняется, что верхний действительно margin'ы, а вот нижний (как раз где <DIV>ccccc<P>ccccc</DIV>) никуда не исчезает.
    Т.е. выглядит так, как будто там стоит пустой <p> и в итоге получается пропуск строки. Хотя по логике все должно быть так, как вы описали %-|
  4. Вика

    13.08.2008 15:01

    Вообще это не валидно.
    Тут мне недавно выгребать баги валидации на чужом сайте пришлось.
    Блочный элемент в строчном - это неправильно.

    Наверное, надо избегать таких конструкций.
  5. Отщеплен новый топик "Валидный HTML с незакрытыми тегами".
  6. Иван Сагалаев

    13.08.2008 15:45

    Т.е. отображаются два отступа, но вот если попробовать это выделить и загнать в любой текстовый редактор, то выясняется, что верхний действительно margin'ы, а вот нижний (как раз где <DIV>ccccc<P>ccccc</DIV>) никуда не исчезает.

    Ах вот, в чем дело... Тогда это ровно никакого отношению к margin'ам не имеет. У браузера есть какое-то понятие о том, как перегнать выделенный HTML в простой текст, но оно в лучшем случае приблизительное и нигде не определено. Так что проверять этим я бы точно ничего не стал :-)

  7. Михаил

    13.08.2008 16:16

    Понятно, что не имеет, но мне просто захотелось понять, что же это на самом деле парсится. В принципе, надо быть проще - любой юзерский CSS, выделяющий элементы уровня блока покажет, что все так. как должно быть (последние ccccc в параграфе). Просто напугалм меня эти интуиты своими ответами :-)
    Короче, надо медитировать над оригинальной спецификацией.

bbcode