Выровнять шрифт Удивительные значки (fa-2x) со сложными значками (fa-stack)

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

Ниже приведен код, с которым я играл:

<div class="share-results">
  <a class="fa fa-2x fa-envelope-o" data-toggle="tooltip" title="Share by Email" data-placement="top" href="#"></a>
  <a class="fa fa-2x fa-facebook-square" data-toggle="tooltip" title="Share on Facebook" data-placement="top" href=""></a>
  <a class="fa fa-2x fa-twitter-square" data-toggle="tooltip" title="Share on Twitter" data-placement="top" href=""></a>
  <a class="fa fa-2x fa-stack" data-toggle="tooltip" title="Share by Link" data-placement="top" href="#">
    <i class="fa fa-square-o fa-stack-2x"></i>
    <i class="fa fa-link fa-stack-1x"></i>
  </a>
</div>

Это создает:

alignment with 2x

Кажется, что есть только проблема с размером, поэтому я играл с использованием fa-lg:

alignment with lg

А также без помощника по калибровке на сложном элементе:

alignment without helper

Кто-нибудь знает, как выровнять значок с помощью fa-2x с помощью сокетов?

Ответы

Ответ 1

Существует способ выполнить эту задачу с минимальным использованием новых стилей CSS:

Мы должны использовать конверт, который имеет тот же стиль, что и твиттер и facebook, я имею в виду квадратный стиль с классом fa-envelope-square. И сделайте все привязанные элементы сложены:

<div class="share-results">
    <a class="fa-stack fa-1x" data-toggle="tooltip" title="Share by Email" data-placement="top" href="#">
        <i class="fa fa-envelope-square fa-stack-2x"></i>
    </a>
    <a class="fa-stack fa-1x" data-toggle="tooltip" title="Share on Facebook" data-placement="top" href="">
        <i class="fa fa-facebook-square fa-stack-2x"></i>
    </a>
    <a class="fa-stack fa-1x" data-toggle="tooltip" title="Share on Twitter" data-placement="top" href="">
        <i class="fa fa-twitter-square fa-stack-2x"></i>
    </a>
    <a class="fa-stack fa-1x" data-toggle="tooltip" title="Share by Link" data-placement="top" href="#">
        <i class="fa fa-square fa-stack-2x"></i>
        <i class="fa fa-inverse fa-link fa-stack-1x"></i>
    </a>
</div>

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

.fa-stack { margin: -2px; }

Результат будет выглядеть так:

Icons set

Демо-скрипт

Ответ 2

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

Первый подход накладывает значок fa-link, как текст, на обычный значок fa fa-2x fa-square-o.

<div class="share-results">
  <a class="fa fa-2x fa-envelope-o" data-toggle="tooltip" title="Share by Email" data-placement="top"></a>
  <a class="fa fa-2x fa-facebook-square" data-toggle="tooltip" title="Share on Facebook" data-placement="top"></a>
  <a class="fa fa-2x fa-twitter-square" data-toggle="tooltip" title="Share on Twitter" data-placement="top"></a>
  <a class="fa fa-2x fa-square-o stacked" data-toggle="tooltip" title="Share by Link" data-placement="top"></a>
</div>

<style>
    .stacked {
        position:relative;
    }   
    .stacked:after {
        position: absolute;
        font-family: FontAwesome;
        font-size: .6em;
        top:6px;
        left:4px;
        content: "\f0c1"; /*link icon*/
    }
</style>

Второй подход использует комбинацию position: fixed и пользовательский font-size, чтобы помочь новой ссылке выравниваться немного лучше:

<div class="share-results">
  <a class="fa fa-2x fa-envelope-o" data-toggle="tooltip" title="Share by Email" data-placement="top"></a>
  <a class="fa fa-2x fa-facebook-square" data-toggle="tooltip" title="Share on Facebook" data-placement="top"></a>
  <a class="fa fa-2x fa-twitter-square" data-toggle="tooltip" title="Share on Twitter" data-placement="top"></a>
  <a class="fa fa-2x fa-stack stacked2" data-toggle="tooltip" title="Share by Link" data-placement="top">
    <i class="fa fa-square-o fa-stack-2x"></i>
    <i class="fa fa-link fa-stack-1x"></i>
  </a>
</div>

<style>
    .stacked2 {
      position: fixed;
      font-size: 1.1em !important;
      top: -7px;
      left: -4px;
    }
</style>

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

enter image description here

И здесь Пример CodePen.

Я не уверен, отвечает ли это на ваш вопрос, но я надеюсь, что это немного поможет.

Ответ 3

Так как шрифт awesome icons - это все о ширинах, высотах и ​​высотах линий, я попытался создать решение, в котором все их значения были одинаковыми (надеюсь) избегать путаницы и упростить обновление вперед.

Используя пример, который вы указали, я установил эти свойства CSS:

.fa {
    /*this sets values for all icons*/
    color: gray;
    font-size: 50px;
    line-height: 55px;
    text-decoration: none;
}
.fa-link {
    /*make inner icon smaller but keep line-height the same so its centered vertically*/
    font-size: 30px;
}
.fa-stack-cust {
    position: relative;
    display: inline-block;
    width: 50px;
    height: 50px;
    line-height: 55px;
}

Я завернул значки в неупорядоченный список, и теперь они отображаются в одной строке. Вот JS.Fiddle, показывающий вам рабочий пример. Вы сможете увидеть изменения HTML, даже если они незначительны. Надеюсь, что это поможет.