Div в div фон: html — Как задать фон блоков?

Почему некоторые разработчики ругают вёрстку на «div»

В вёрстке есть очень удобный HTML-тег — <div>. Этот блок не имеет оформления сам по себе, но с его помощью которого можно оформлять и структурировать веб-страницы.

Встречается мнение, что вёрстка на блоках <div> устарела. Рассказываем, в чём причина и когда это действительно так.

Зачем нужен <div>

Изначальная задача этого тега — собрать в кучу разные другие теги, чтобы получилось что-то единое, с чем можно работать как с одним объектом. Этот тег появился в стандарте HTML3 в 1995 году, и на тот момент это было мощным решением: верстальщики получили возможность применять стили сразу к группе тегов.

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

Олды здесь: как сверстать веб-страницу на таблицах

С появлением <div> все перешли на блочную вёрстку, которая работает так:

  1. Верстальщик создаёт блок на странице и наполняет его содержимым.
  2. В стилях он прописывает, как этот блок выглядит и как ведёт себя по отношению к другим — например отталкивает, отступает, заставляет перенестись на новую строку и т. д.
  3. Блоки можно вкладывать друг в друга сколько угодно раз, причём для каждого блока-контейнера можно задавать свои стили и поведение.

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

Пример вёрстки на <div>

Часто код оборачивают в блоки для того, чтобы браузер или настройки стилей сами разместили элементы по своим местам. Вот как это выглядит на примере нашего проекта про портфолио фотографа — там мы оборачиваем в <div> каждый элемент, чтобы они автоматически разместились по сетке:

<div>Михаил Максимов</div>
<div><a href="mailto:[email protected]">[email protected]</a></div>
<div><a href="https://t. me/thecodemedia">Телеграм</a></div>

А вот пример пустых блоков, которые потом наполнятся жизнью в скрипте — взяли из проекта с игрой Quatro:

<!DOCTYPE html>
<html lang="ru" >
<head>
  <meta charset="UTF-8">
  <title>Игра Quarto</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <!-- подключаем нормализатор стилей, чтобы игра везде выглядела одинаково -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css">
  <!-- подключаем свой файл со стилями -->
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <!-- блок с доской -->
  <section><div></div></section>
  <!-- блок для оповещения, которое появится в конце игры -->
  <div></div>
  
  <!-- основной скрипт игры -->
  <script  src="script.js"></script>
</body>
</html>
В пустых блоках появились фигуры и поле — на странице этого нет, но мы добавили их через скрипт

В чём проблема

Проблема в том, что иногда таких блоков становится слишком много и в них можно запутаться. Многие ругают вёрстку на <div> из-за подобного кода:

<div>
  <div>
    <div>
      <div>
        <div>
          <p>
            Привет, это журнал «Код»!
          </p>
        </div>
      </div>
    </div>
  </div>
</div>

Технически в этом нет ничего плохого, но с ходу разобраться в таком сложно. 

Вторая проблема связана с семантикой — в HTML5 появилось много новых тегов, которые работают так же, как <div>, но упрощают понимание структуры. Также новые теги помогают слабовидящим пользоваться сайтом с помощью скринридеров — специальных программ, которые озвучивают всё, что есть на странице. Чтобы им было проще, используют не <div>, а другие теги.

Пример неадаптированного кода:

<div>
  <h2>Привет, это журнал «Код»</h2>
  <div>
    <a href="#">Это как</a>
    <a href="#">Это баг</a>
    <a href="#">Что как</a>
  </div>
</div>
<div>
  <div>
    <div>
      <h2>Что такое HTML</h2>
    </div>
    <div>
      <p>
        HTML — основа всего, что происходит внутри вашего браузера.  Если вы знаете HTML, то можете сами создавать сайты, красиво оформлять статьи и документы в интернете и даже устроиться на работу веб-разработчиком. Давайте копнём.
      </p>
    </div>
  </div>
</div>
<div>
  <div>
    <h3>Напишите нам</h3>
    <div>
      <a href="[email protected]">[email protected]</a>
    </div>
  </div>
</div>

А вот адаптированная версия с учётом семантики. Внешне всё будет выглядеть точно так же, но поисковым роботам и специальным программам для чтения с экрана будет гораздо проще понять, что на странице к чему относится:

<header>
  <h2>Привет, это журнал «Код»</h2>
  <nav>
    <a href="#">Это как</a>
    <a href="#">Это баг</a>
    <a href="#">Что как</a>
  </nav>
</header>
<main>
  <article>
    <header>
      <h2>Что такое HTML</h2>
    </header>
    <section>
      <p>
        HTML — основа всего, что происходит внутри вашего браузера.  Если вы знаете HTML, то можете сами создавать сайты, красиво оформлять статьи и документы в интернете и даже устроиться на работу веб-разработчиком. Давайте копнём.
      </p>
    </section>
  </article>
</main>
<footer>
  <section>
    <h3>Напишите нам</h3>
    <address property="email">
      <a href="[email protected]">[email protected]</a>
    </address>
</footer>
<header>
  <h2>Привет, это журнал «Код»</h2>
  <nav>
    <a href="#">Это как</a>
    <a href="#">Это баг</a>
    <a href="#">Что как</a>
  </nav>
</header>
<main>
  <article>
    <header>
      <h2>Что такое HTML</h2>
    </header>
    <section>
      <p>
        HTML — основа всего, что происходит внутри вашего браузера. Если вы знаете HTML, то можете сами создавать сайты, красиво оформлять статьи и документы в интернете и даже устроиться на работу веб-разработчиком.
Давайте копнём. </p> </section> </article> </main> <footer> <section> <h3>Напишите нам</h3> <address property="email"> <a href="[email protected]">[email protected]</a> </address> </section> </footer>

И всё-таки, как правильно?

Если вам нужно быстро собрать прототип страницы, чтобы убедиться в том, что всё работает, — верстайте как угодно, это всё черновой проект, который потом переделывать во что-то нормальное. Но помните, что нет ничего более постоянного, чем временное, — если черновой проект работает, вы его, скорее всего, так и понесёте миру. 

Если вы делаете сайт со сложной вёрсткой, где всё удобнее заверстать дивами, — делайте. Главное, чтобы вы сами не запутались в блоках, а браузер в любом случае покажет всё правильно.

А вот если у вас есть SEO-задача по продвижению сайта или вы делаете сайт, которым будет удобно пользоваться слабовидящим людям, тогда лучше использовать семантику и теги HTML5 вместо стандартных <div> в каждом разделе.  

Что такое SEO

Что дальше

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

Текст:

Михаил Полянин

Редактор:

Максим Ильяхов

Художник:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Соцсети:

Виталий Вебер

Как сделать фоновое изображение div внутри другого div отзывчивым? — HTML и CSS — Форумы SitePoint

thehung1724

1

Я некоторое время боролся с этой проблемой, и мне просто интересно, есть ли у кого-нибудь совет! В основном я хочу размещать изображения внутри контейнера, размер которых будет изменяться вместе с окном браузера. Итак, как еще я могу сделать его отзывчивым? Заранее спасибо!

HTML

 
<дел> <дел>

CSS

 #раздел-специальных-блюд{
    background: url('../images/special-dishes-bg.jpg') центр без повторов;
    минимальная высота: 560 пикселей;
    отступ: 71px 0 65px 0;
    положение: родственник;
}
.Специальные блюда{
    фон: url('../images/wooden-bg.png') центр без повторов;
    минимальная высота: 424px;
}
 

РайанРиз

2

Предполагая, что вы сделаете ширину/высоту блока hte одинаковыми… вы можете сделать background-size:contain;.

Это максимально растянет изображение, чтобы оно соответствовало размерам родительских элементов.

Однако это может привести к искажению изображения.

http://www.w3schools.com/cssref/playit.asp?filename=playcss_background-size&preval=contain

1 Нравится

ДэйвМаксвелл

3

РайанРиз:

Предполагая, что вы сделаете ширину/высоту блока hte одинаковыми… вы можете сделать background-size:contain;.

Это максимально растянет изображение, чтобы оно соответствовало размерам родительских элементов. Однако это может привести к искажению изображения.

Это также будет работать с неквадратными блоками при условии, что относительная форма блока соответствует тому же соотношению, что и изображение (например, если изображение в 3 раза шире, чем его высота, блок должен быть в 3 раза шире, чем его высота).

high) — я использую его для вставки логотипа в заголовок и могу изменить размер окна, чтобы логотип сохранял единообразный вид по всей форме окна.

Ничего… Я перечитал и понял, о чем вы. Изображение может исказиться (т. е. стать пиксельным), если вы используете изображение, которое слишком маленькое для содержимого… то, которое я использовал, больше, чем требуется, поэтому мое изображение никогда не искажалось.

thehung1724

4

Спасибо @RyanReese

Моя проблема полностью решена. Но не могли бы вы сказать мне, когда использовать содержат , а покрывают ?

РайанРиз

5

Зависит от ситуации и от того, какой вид вы хотите.

http://www.w3schools.com/cssref/css3_pr_background-size.asp

Я ненавижу связывать w3schools, но они дают возможность поиграть с этим.

Прочитайте эти описания и попробуйте различные свойства. Должно быть очевидно, что каждый из них будет делать.

Так что отвечать вам — это в каждом конкретном случае.

thehung1724

6

Привет @DaveMaxwell

Можете ли вы объяснить это просто мне понять. Извините за плохой английский. Заранее спасибо

thehung1724

7

Спасибо. Я потрачу время, чтобы прочитать это

thehung1724

8

Еще один вопрос. Как я могу увеличить высоту изображения в зависимости от высоты содержимого?

РайанРиз

9

По мере увеличения размера div изображение должно корректироваться соответствующим образом. Я не уверен, что вы имеете в виду. Это автоматизировано.

ДэйвМаксвелл

10

thehung1724:

Привет @DaveMaxwell

Не могли бы вы объяснить это просто, чтобы я понял. Извините за плохой английский. Заранее спасибо

Извините — это было мое непонимание смысла его поста. Он говорил об искажении самого изображения, которое может произойти, если вы используете изображение, заметно меньшее, чем пространство, в котором оно должно быть. Например, пытаясь использовать изображение 10×10 в пространстве размером 40×40.

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

Я думал, что он имел в виду искажение изображения (растягивающееся в ширину, но сохраняющее ту же высоту), но это не то, что он написал.

ПолОБ

11

thehung1724:

Но не могли бы вы сказать мне, когда использовать сдерживание, а когда укрытие?

Содержать означает, что ваше фоновое изображение будет масштабироваться до тех пор, пока оно полностью не уместится на имеющемся у вас фоне. Это, вероятно, означает, что вокруг изображения будет пустое пространство, чтобы оно поместилось.

Обложка означает, что изображение будет закрывать весь фон с сохранением соотношения сторон. Это достигается путем масштабирования фонового изображения таким образом, чтобы наименьший размер достигал максимальной ширины/высоты элемента.

Вы можете увидеть живой пример здесь.

thehung1724

12

Привет @RyanReese

Пожалуйста, посмотрите мой живой пример . При изменении размера браузера фон слишком мал для внутреннего содержимого, я имею в виду автоматическое увеличение высоты.

ронпат

13

Попробуйте изменить «содержать» на «100% 100%»:

style.css (строка 898)

 .special-dishes {
    фон: url('../images/wooden-bg.png') центр без повторов;
    размер фона: 100% 100%;
    минимальная высота: 424px;
} 

ПолОБ

14

Как сказал Рон, вы можете растянуть изображение на 100% на 100%, но изображение будет искажено, и результаты будут довольно плохими при некоторых размерах.

То, что вы пытаетесь сделать, не очень удобно для Интернета, поскольку вы пытаетесь в основном повесить плавный текст на фиксированное изображение. Было бы нормально, если бы вы использовали это только для логотипа, но вряд ли вы получите хорошие результаты со всем этим текстом.

Вам нужно немного переосмыслить это, я думаю

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

Единственной альтернативой будет метод старой школы, при котором вы берете начало и конец изображения, а затем повторяете среднюю часть, чтобы элемент мог расти. Конечно, затем вам нужно будет создать разные наборы изображений, чтобы они также соответствовали вашим контрольным точкам.

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

система Закрыто

15

Эта тема была автоматически закрыта через 91 день после последнего ответа. Новые ответы больше не допускаются.

студентов Mizzou запускают проект по предоставлению двуязычных новостей латиноамериканским сообществам штата • Миссури Индепендент

Четыре студента факультета журналистики Университета Миссури в Колумбии запустили проект по предоставлению двуязычных новостей через платформы социальных сетей латиноамериканскому населению средней части штата Миссури.

«Так мало латиноамериканских или латиноамериканских новостей», — сказала Лорен Хаббард, президент отделения Национальной ассоциации латиноамериканских журналистов MU и один из организаторов проекта. «Но также так мало новостей на испанском языке, чтобы они могли понять и усвоить».

«Из-за этого они могут не знать, что происходит в общинах, в которых они живут».

Их проект под названием De Veras направлен на повышение доступности информации об иммиграционных юридических услугах, образовании и здравоохранении для латиноамериканского сообщества Миссури, среди прочих услуг.

Они приняли участие в конкурсе студенческих инноваций Института журналистики Рейнольдса 2023 года, где в этом году основное внимание уделяется удовлетворению местных потребностей с помощью служебной журналистики, и теперь являются финалистами.

Студенты — Эрик Галисия, Лорен Хаббард, Кристал Санчес и Шэрон Кинтана Ортис — посетили три города в центре Миссури со значительным латиноамериканским населением, чтобы рассказать о проекте и узнать о потребностях жителей.

В Милане, небольшом городке примерно в 100 милях к северу от Колумбии, по данным переписи 2020 года, 42% населения составляют латиноамериканцы.

В середине девяностых в регион пришли мясокомбинаты, которые настойчиво набирали рабочих из Мексики и городов вдоль американо-мексиканской границы. Многие остались.

Санчес, который испытал «культурный шок», переехав из более разнообразного Чикаго в Колумбию, чтобы учиться в колледже, был удивлен, увидев продуктовые магазины и рестораны, принадлежащие латиноамериканцам, «на каждом углу» в Милане.

«Вы не слышали об этом в Миссури, — сказал Санчес, — по крайней мере, из средств массовой информации, которые я читал в Миссури».

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

Санчес сказал, что владелец небольшого продуктового магазина в Милане сказал, что к ним приезжали журналисты, и «обещал писать истории о проблемах, которые происходят в обществе, но после этого они не появлялись».

Основываясь на том, что они услышали от членов сообщества, они разработали «первый этап» своего проекта, чтобы завоевать доверие в сообществах, сказали студенты.

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

instagram.com/p/Co-H547LL_6/?utm_source=ig_embed&utm_campaign=loading» data-instgrm-version=»14″>

 

Посмотреть эту публикацию в Instagram

 

Публикация De Veras Mo (@deverasmo)

«Мы не только должны предоставлять журналистские услуги для этого сообщества, — сказал Санчес, — но мы также должны строить с ними отношения, мы должны продолжать появляться».

Студенты надеются предоставить информацию о бесплатных медицинских клиниках, например, после того, как услышали от латиноамериканцев, что им трудно ориентироваться в системе страхования, а также информацию для вновь прибывших иммигрантов о том, как получить доступ к юридическим услугам и понять свои права.

The Missouri Independent станет информационным партнером нового студенческого предприятия, размещая информацию в своем Instagram. В будущем он также будет работать с De Veras над проектами углубленной отчетности.

Их конечной целью является предоставление двуязычного новостного контента для средств массовой информации по всему штату.