Правая граница гибкого элемента div не учитывается в окнах просмотра с узкой шириной

У меня есть изображение и <p> внутри <div class = "man"> с display: flex. Когда я пытаюсь изменить размер окна с помощью инструментов разработчика, margin-right div, окрашенного в оранжевый цвет на изображении, не учитывается, поэтому изображение кажется застрявшим с правой стороны. На данный момент изображение не имеет отступов/полей, но к элементу div применено поле, содержащее как <p>, так и <img>; почему это не уважают?

Скриншот моей проблемы с открытыми инструментами разработки

<!DOCTYPE html>
<html lang = "it">

<head>
  <meta charset = "UTF-8">
  <meta name = "viewport" content = "width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    div.man {
      max-width: fit-content;
      margin: 20px;
      display: flex;
    }
    div.man p {
      margin: 0px;
    }
    div.man img {
      max-width: 450px;
      height: auto;
    }
    @media (max-width: 655px) {
      div.man {
        flex-direction: column;
      }
    }
  </style>
</head>

<body style = "margin: 0px;">
  <div style = "width: fit-content;" class = "man">
    <img src = "man2.jpg">
    <p>Questo concept restaurant desidera donare ai propri membri un viaggio sensoriale e spirituale tramite le linee
  del design, l'attenta scelta dei suoni, l'accurata selezione delle essenze, un'altra riflessione della
  funzionalità e della comodità
    </p>
  </div>

</body>

</html>

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

Temani Afif 20.05.2024 15:03

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

Stefan9669 20.05.2024 15:06

А как насчет img {width: 100%;}?

ralph.m 20.05.2024 15:14

@ralph.m, спасибо, теперь, кажется, работает. Можете ли вы объяснить мне, почему это редактирование и как это работает? Почему, установив ширину 100%, изображение не заполняет весь контейнер div.man, вместо этого остается место как для изображения, так и даже для <p>?

Stefan9669 20.05.2024 15:21
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
4
102
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

В вашем случае изображение имеет свойство max-width. но ширина не ограничена максимум 100% родительского div. попробуйте изменить ширину изображения. тогда проблема решится

Я предполагаю, что когда вы говорите «уважаемый», вы хотите, чтобы изображение занимало всю страницу, но ограничьте его максимальную ширину в 450 пикселей. Если это так, то я добавил width: 100% под div.man img.

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

div.man {
  max-width: fit-content;
  margin: 20px;
  display: flex;
}

div.man p {
  margin: 0px;
}

div.man img {
  width: 100%;
  max-width: 450px;
  height: auto;
}

@media (max-width: 655px) {
  div.man {
    flex-direction: column;
  }
}
<!DOCTYPE html>
<html lang = "it">

<head>
  <meta charset = "UTF-8">
  <meta name = "viewport" content = "width=device-width, initial-scale=1.0">
  <title>Document</title>

</head>

<body style = "margin: 0px;">
  <div style = "width: fit-content;" class = "man">
    <img src = "https://picsum.photos/600/300">
    <p>
      Questo concept restaurant desidera donare ai propri membri un viaggio sensoriale e spirituale tramite le linee del design, l'attenta scelta dei suoni, l'accurata selezione delle essenze, un'altra riflessione della funzionalità e della comodità
    </p>
  </div>

</body>

</html>

Да, это решает мою проблему теперь, когда я изменяю размер окна, право поля соблюдается, так что это то, что я ищу. Прежде чем отмечать ответ, можете ли вы объяснить мне, почему устанавливается ширина на 100%? И почему с шириной: 100%; изображение не заполняет весь контейнер div.man? Есть место как для <img>, так и для <p>, и это правильно, но я не понимаю, почему при ширине 100% оно не заполняет все пространство внутри контейнера.

Stefan9669 20.05.2024 15:59

Есть два аспекта. Во-первых, установка ширины на 100 % означает, что изображение заполнит всю ширину содержащего его элемента div, в данном случае класса div man. Другой аспект заключается в том, что максимальная ширина составляет 450 пикселей. Это означает, что если ширина содержащего элемента div превышает 450 пикселей, изображение не будет растягиваться за его пределы.

AntonyMN 21.05.2024 12:30

В CSS поле — это пространство вокруг границы элемента, а отступ — это пространство между границей элемента и содержимым элемента. Если вы устанавливаете поле для элемента полной ширины, вам может потребоваться установить его ширину с помощью Calc, например width:calc(100% - 2x), где x означает поле.

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

 div.man {
      max-width: calc(100% - 40px);
      margin: 20px;
      display: flex;
    }
    div.man p {
      margin: 0px;
    }
    div.man img {
      max-width: 450px;
      height: auto;
    }
    @media (max-width: 655px) {
      div.man {
        flex-direction: column;
      }
    }
    
    body{margin:0}
  <div style = "width: fit-content;" class = "man">
    <img src = "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3f/Fronalpstock_big.jpg/1200px-Fronalpstock_big.jpg">
    <p>Questo concept restaurant desidera donare ai propri membri un viaggio sensoriale e spirituale tramite le linee
  del design, l'attenta scelta dei suoni, l'accurata selezione delle essenze, un'altra riflessione della
  funzionalità e della comodità
    </p>
  </div>

Либо установите для ширины div.man значение «auto» или «initial», либо просто удалите встроенное правило «fit-content».

div.man {
      width: auto !important;
      margin: 20px;
      display: flex;
    }
    div.man p {
      margin: 0px;
    }
    div.man img {
      max-width: 450px;
      height: auto;
    }
    @media (max-width: 655px) {
      div.man {
        flex-direction: column;
      }
    }
<body style = "margin: 0px;">
  <div style = "width: fit-content;" class = "man">
    <img src = "https://place.dog/450/250">
    <p>Questo concept restaurant desidera donare ai propri membri un viaggio sensoriale e spirituale tramite le linee
  del design, l'attenta scelta dei suoni, l'accurata selezione delle essenze, un'altra riflessione della
  funzionalità e della comodità
    </p>
  </div>
</body>
Ответ принят как подходящий

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

Ширина родительского элемента flex установлена ​​на соответствие контенту, но он также имеет поля в 20 пикселей со всех сторон. Это означает, что модель гибкого родительского блока будет использовать доступное пространство, но не больше, чем максимальное содержимое. В этом случае максимальное содержимое будет равно ширине области просмотра, но поскольку родительский элемент flex имеет поля в 20 пикселей со всех сторон, максимальное содержимое рассчитывается неожиданным образом, что делает его на 20 пикселей шире, чем область просмотра.

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

div.man {
    max-width: fit-content;
    padding: 20px;
    gap: 20px;
    display: flex;
}

Также обязательно закройте и снова откройте инструменты разработчика Chrome.

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

Stefan9669 21.05.2024 11:07

@Stefan9669 Stepan9669 Вот ссылка, которая поможет визуально представить коробочную модель. Вы можете увидеть, где применяются значения отступов и полей: w3schools.com/css/css_boxmodel.asp Я предлагаю провести дополнительные исследования блочной модели и провести собственные эксперименты, поскольку блочная модель является основой CSS.

dctech 22.05.2024 01:46

Я предполагаю, что проблема, с которой вы столкнулись, связана с «max-width:fit-content», который применяется к div.man. При использовании fit-content ширина элемента будет установлена ​​на минимум, необходимый для содержания его содержимого. . Это может привести к тому, что отступ, который вы применили к элементу div, не будет соблюдаться, поскольку содержимое занимает доступное пространство.

Чтобы решить эту проблему, вы можете установить определенную ширину для элемента div.man, а не полагаться на fit-content. Это гарантирует, что поля будут соблюдаться даже при изменении размера окна. Попробуйте использовать этот код, надеюсь, он работает хорошо

<!DOCTYPE html>
<html lang = "it">

<head>
  <meta charset = "UTF-8">
  <meta name = "viewport" content = "width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    div.man {
      width: 500px; /* Adjust the width as needed */
      margin: 20px;
      display: flex;
    }
    div.man p {
      margin: 0px;
    }
    div.man img {
      max-width: 450px;
      height: auto;
    }
    @media (max-width: 655px) {
      div.man {
        flex-direction: column;
        width: auto; /* Reset width for smaller screens */
      }
    }
  </style>
</head>

<body style = "margin: 0px;">
  <div class = "man">
<!--replace the img src whatever u want-->
    <img src = "https://img.freepik.com/free-photo/young-bearded-man-with-striped-shirt_273609-5677.jpg">
    <p>Questo concept restaurant desidera donare ai propri membri un viaggio sensoriale e spirituale tramite le linee
  del design, l'attenta scelta dei suoni, l'accurata selezione delle essenze, un'altra riflessione della
  funzionalità e della comodità
    </p>
  </div>

</body>

</html>

Другие вопросы по теме