Потому что в HTML4 по пьяному делу смешали в одной классификации логическую роль элемента (контейнер для текста, контейнер для абзацев, выделение внутри текста, придание фрагменту текста интерактивности ссылки и т.п.) и визуальное представление по умолчанию (с новой строки или нет). Забыв, правда, объяснить, почему и в «блочные» элементы другие «блочные» можно вкладывать далеко не во все и не всегда (напр. P, DT, H1-H6, ADDRESS — «блочные», но могут содержать только текст). Поэтому не дурите головы себе и другим «блочностью и строчностью», а просто соблюдайте 2 правила: В HTML: строго соблюдайте Content model, указанную в спецификации для каждого элемента. Если для элемента указано, что его Content model — «phrasing content», значит, внутри может быть только текст и его фрагменты в пределах абзаца, и неважно, к какому типу контента относится сам этот элемент (тому же Phrasing, как span, Flow, как p, или Interactive, как button). Чтобы не запоминать Content model для каждого элемента, почаще сверяйтесь со спецификацией и/или валидатором. В CSS: по возможности старайтесь, чтобы у каждого элемента с display:block/table/flex («блочного снаружи») был явный контейнер с фактическим display:block/inline-block/table-cell («блочный внутри»). Тоже абсолютно вне зависимости от того, что это за элементы.Если соблюдать оба этих правила, то и логическая, и визуальная структуры страницы будут логичными и устойчивыми, и вопросов не будет возникать ни у парсеров при разборе страницы (в т.ч. у поисковиков), ни у браузеров при ее отрисовке. Первое правило строго обязательно, второе — опционально, но крайне желательно