Есть ли способ автоматически добавлять градиент к изображениям? - PullRequest
3 голосов
/ 11 июля 2020

image image">

Я хочу сохранить размер моего изображения как 400 пикселей * 400 пикселей, но добавить цвет фона. Post_image div, в основном, я хочу добавить градиент к фону на основе любого изображения в теге изображения примерно так:

введите описание изображения здесь

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

Ответы [ 2 ]

3 голосов
/ 11 июля 2020

Вы можете добиться чего-то подобного с помощью CSS

Учитывая использование этой таблицы стилей

<style type="text/css">
  .blured {
    width:320px;
    height:320px;
    position: relative;
    overflow: hidden;
  }

  .blured .blur {
    height:70px;
    width:100%;
    position:absolute;
    filter: blur(7px);
  }

  .blured .top {
    top:0px;
    background: linear-gradient(#000000d9, #00000000)
  }

  .blured .bottom {
    bottom:0px;
    background: linear-gradient(#00000000, #000000d9)
  }
</style>

Затем используйте следующую разметку

<div class='blured' style='background-image:url("http://placekitten.com/320/320")'>
  <div class='blur top'></div>
  <div class='blur bottom'></div>
</div>

Результат будет примерно таким вот так:

enter image description here

You can experiment with linear-gradient colors and the value for blur() to achieve an output close to your requirement.

References:

2 голосов
/ 12 июля 2020

Эффект, который вы описываете, действительно может быть достигнут. Вам просто нужно наложить то же изображение меньшего размера поверх изображения. Изображение внизу может быть затемнено, и оно будет охватывать оставшуюся часть области 400px x 400px.

Для этого вам необходимо установить поле position окружающего div на relative и оба изображения на absolute. Я уменьшил высоту изображения сверху до 200px и сохранил ширину изображения такой же, как и изображение внизу, чтобы оно соответствовало стилю изображения в вопросе. Используйте filter: blur(), чтобы размыть большее изображение. Размытие смягчает края изображения (удалите свойство clip, и вы узнаете). Используйте свойство clip, чтобы края выглядели «четкими».

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

<!DOCTYPE html>
<html>
<style>
*{box-sizing: border-box;}
.container {
    margin: auto;
    position: relative;
    width: 50%;
}
.outer {
    filter: blur(5px);
    position: absolute;
    z-index: -1;
    clip: rect(0,400px,400px,0);
    
}
.inner {
    position: absolute;
    top: 100px; 
}
</style>
<div class="container">
    <img src="https://i.stack.imgur.com/Y1ELT.jpg" class="outer" height="400px" width="400px">
    <img src="https://i.stack.imgur.com/Y1ELT.jpg" class="inner" height="200px" width="400px">
</div>
</html>

Это ответ на часть вашего вопроса. Теперь, чтобы автоматизировать размещение изображения в соответствии с размером, вы можете получать и обновлять размеры изображения, используя JavaScript:

var image = new Image();

image.onload = function() {
  var height = image.height;
  var width = image.width;

}

image.src = "<source>";

Изображение внизу всегда будет 400 x 400 px, вы можете обновить атрибуты изображение вверху в соответствии с его фактическими извлеченными размерами, если оно меньше 400 x 400 px. В противном случае сквашивайте sh до 400 x 400 px, чтобы покрыть все изображение внизу.

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