Pull to refresh

Точка фокуса в адаптивных изображениях

Reading time2 min
Views20K
На сегодняшний день существует несколько техник адаптации изображений для просмотра на экранах любых размеров. Большинство из них сводится к простому масштабированию. В этой статье рассмотрим немного более хитрый способ — фокусирование на определенных точках.



Focal Point — это HTML/CSS фреймворк, представленный на GitHub, автор — Adam Bradley. Один из простых способов работы с адаптивными изображениями — это обрезание сторон, которые не помещаются на экране. Однако при этом можно случайно обрезать полезное пространство изображения. С помощью Focal Point можно указать важные точки фокуса картинки, которые не будут обрезаны:



Принцип работы достаточно прост: все изображение специальной сеткой делится в пропорции 12х12:



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



Перейдем к коду. Разметка достаточно проста, в классах блока указывается focal-point и координаты точки фокуса. Недостатком фреймворка является необходимость заключать изображение в два div'а:

<div class="focal-point right-3 up-3">
  <div><img src="guy.jpg" alt=""></div>
</div>


В результате получается красивое и корректное масштабирование адаптивного изображения:



Вот два живых примера подобных адаптивных изображений. Итоговая разметка получается не слишком громоздкая, HTML:

<div class="column">
  <h1>Focal Point</h1>
  <p>Lorem ipsum...</p>
 
  <div class="focal-point right-3 up-3">
    <div><img src="guy.jpg" alt="guy"></div>
  </div>
</div>
 
<div class="column">
  <h1>Focal Point</h1>
  <p>Lorem ipsum...</p>
 
  <div class="focal-point right-2 up-2">
    <div><img src="couple.jpg" alt="couple"></div>
  </div>
</div>


CSS:

* {
  margin: 0;
  padding: 0;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  -ms-box-sizing: border-box;
  box-sizing: border-box;
}
 
.column {
  float: left;
  overflow: auto;
  padding: 20px;
  width: 50%;
}
 
h1  {
  text-transform: uppercase;
  font: bold 45px/1.5 Helvetica, Verdana, sans-serif;
}
 
p {
  margin-bottom: 20px;
  color: #888;
  font: 14px/1.5 Helvetica, Verdana, sans-serif;
}
 
@media all and (max-width: 767px) {
  p {
    font-size: 12px;
  }
 
  h1 {
    font-size: 35px;
  }
}
 
@media all and (max-width: 550px) {
  h1 {
    font-size: 23px;
  }
}


Что касается кроссбраузерности, то способ работает во всех современных браузерах, включая IE8. Если посмотреть глубже, в принцип работы фреймворка, то все оказывается достаточно просто: в CSS прописаны все классы координат точек фокуса с помощью media queries:

@media all and (max-width: 767px) {
 
    /* 4x3 Landscape Shape (Default) */
    .focal-point div {
        margin: -3em -4em;
    }
 
    /* Landscape up (Total 6em) */
    .up-3 div {
        margin-top:    -1.5em;
        margin-bottom: -4.5em;
    }
     
    .right-3 div {
        margin-left:  -6em;
        margin-right: -2em;
    }
}


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

Примеры сайта DesignShack.
Tags:
Hubs:
Total votes 69: ↑65 and ↓4+61
Comments35

Articles