Как разместить фоновое изображение баннера с помощью тега img вместо inline-css (положение центра изображения)

Я ценю вашу помощь с css. Я размещал изображение баннера, используя background-image с inline-css. Теперь мне нужно разместить с помощью тега img и настроить таргетинг на родителя с помощью css. К сожалению, размер моего изображения не меняется, как когда он был внутри встроенного CSS.

Вот мой код css. Пожалуйста, посмотрите на всю страницу и измените размер страницы.

«Эффект», который мне нравится, заключается в том, что на мобильном изображении отображается только центр изображения, в то время как при увеличении ширины страницы изображение изменяется, сохраняя центр изображения в качестве основы для позиции. См. Второе изображение примера (называемое баннером-два).

Итак, как воссоздать точно так же, как изображение в banner-two, используя background-image, но теперь поместив изображение как img src.

Я также создал код с моим кодом (ссылка на мой код в коде - пожалуйста, также измените размер).

.banner-two {
  background-size: cover;
  background-position: center center;
  height: 240px;
  width: 100%;
}

@media (min-width: 768px) {
	.banner-two {
		height: 480px;
	}
}

@media (min-width: 1200px) {
  .banner-two {
		height: 680px;
	}
}
<div class = "banner-one">
  		<img alt = "" src = "https://pictr.com/images/2018/10/06/06cVw2.jpg"  />
</div>

<section>
<div class = "banner-two" style = "background-image: url('https://pictr.com/images/2018/10/06/06cVw2.jpg')"></div>
</section>  
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в 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. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
0
0
210
3

Ответы 3

Обновлено: приведенное ниже решение работает только в Firefox; Кажется, я не могу заставить его работать в других браузерах. Я оставлю его пока, на случай, если он поможет людям в правильном направлении, но я удалю его, когда появится лучшее рабочее решение.

Просто разместите баннер в нужном месте.

.banner-one {
  height: 240px;
  display: inline-block;
  position: relative;
  left: 50vw;
  transform: translateX(-50%);
}

.banner-one img {
  height: 100%;
}

.banner-two {
  background-size: cover;
  background-position: center center;
  height: 240px;
  width: 100%;
}

@media (min-width: 768px) {
  .banner-one,
  .banner-two {
    height: 480px;
  }
}

@media (min-width: 1200px) {
  .banner-one,
  .banner-two {
    height: 680px;
  }
}
<div class = "banner-one">
  <img alt = "" src = "https://pictr.com/images/2018/10/06/06cVw2.jpg" />
</div>

<section>
  <div class = "banner-two" style = "background-image: url('https://pictr.com/images/2018/10/06/06cVw2.jpg')"></div>
</section>

Но вопрос в том, зачем вы это хотите. Вам нужно намного больше CSS, чтобы это работало! Мое чутье было бы просто скрыть img, а затем продолжить то, что вы делали с баннером-два. Я понимаю, что есть ограничения, с которыми вам нужно работать, поэтому я надеюсь, что это поможет!

Мистер Листер благодарит за ваше руководство. Кажется, ваш код работает нормально, я редактировал, потому что в Chrome img не увеличивался больше, чем исходный размер, поэтому я добавил носитель для увеличения ширины: 100vw на 1800 пикселей. Я создал код с новым кодом. codepen.io/tokyoweb/pen/VEKbNB работает над mac safari, mac chrome и mac firefox. Я еще не знаю об окнах, но думаю, что да. Спасибо большое за вашу помощь. Интересно, зачем использовать left: 50vw с трансформацией -50%? заставить браузер использовать центр изображения в качестве основы для позиционирования?

JPDesign 06.10.2018 10:59

Причина в том, что теперь я использую javascript с отложенной загрузкой и img srcset, тогда код проще при использовании тега img. Код теперь выглядит примерно так ... <img class = "lazy" alt = "" data-src = "/ path / image-500w.jpg" data-srcset = "/ path / image - 1000w.jpg 768w, /path/image--2000w.jpg 1200w "/>

JPDesign 06.10.2018 11:33
.banner-one {
    width: 100%;
    height: 640px;
    display: flex;
    justify-content: center;
}
.banner-one img {
    max-width: 100%;
}

Спасибо, Адам. За помощь. Я пробовал использовать Flex, но мне не удалось заставить его работать. Посмотрите свой код с помощью flex vs transform codepen.io/tokyoweb/pen/XxjgJa Размер изображения полностью изменен, поскольку изображение является баннером, тогда ширина огромна, тогда я хотел бы просто показать центр изображения, когда ширина браузера мала, вместо изменения размера всего изображения. Я что-то не так делаю с вашим кодом? Гибкий код называется banner-flex, код ниже, использующий преобразование, называется well banner-transform. Я лучше понимаю гибкость, чем преобразование, и считаю, что использование гибкости более эффективно, чем использование преобразования. Спасибо еще раз.

JPDesign 06.10.2018 11:19

До сих пор вот код. Banner-flex не работает, так как изображение полностью центрируется. Banner-transform работает нормально. ссылка на примеры на codepen

Мне действительно интересно, есть ли способ сделать это, что можно было бы сказать лучше или эффективнее.

Спасибо еще раз !

<div class = "banner-flex">
  <img alt = "" src = "https://pictr.com/images/2018/10/06/06cVw2.jpg" />
</div>

<div class = "banner-transform">
  <img alt = "" src = "https://pictr.com/images/2018/10/06/06cVw2.jpg" />
</div>

.banner-flex {
width: 100%;
height: 240px;
display: flex;
justify-content: center;
}
.banner-flex img {
   max-width: 100%;
}

.banner-transform {
 height: 240px;
 display: inline-block;
 position: relative;
 left: 50vw;
 transform: translateX(-50%);
 }

.banner-transform img {
  height: 100%;
}

@media (min-width: 768px) {
 .banner-flex,
 .banner-transform {
    height: 480px;
 }
}

@media (min-width: 1200px) {
.banner-flex,
.banner-transform {
    height: 680px;
 }
}

@media (min-width: 1800px) {
.banner-transform img {
    width: 100vw;
 }
}

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