Ответы пользователя по тегу HTML
  • Можно ли менять размер SVG если он находится в спрайте?

    @faragly
    В svg спрайте изменять размер определенного куска не получится, если не менять background-size для спрайта и width и height для отдельного взятого svg. Есть прекрасная статья, материалы которой я использовал у себя. На этой неделе решил собирать svg-спрайты папками (раньше папками собирались только png), иконок было много, дизайнер нарисовал размеры больше чем нужно, менять размер каждой иконки слишком рутинно. Реализовал миксины (mixin svg-sprite это mixin sprite из вышеуказанной статьи):
    // svg из папки генерируют scss файлы {название_папки}.scss
    @import '../sprites/svg.scss',
            '../sprites/ne-svg.scss';
    
    // список спрайтов помещаем в массив
    $svg-sprites: (svg: $svg-icons, ne-svg: $ne-svg-icons);
    
    $svg-sprite: map-get($svg-icons, sprite) !default;
    $ne-svg-sprite: map-get($ne-svg-icons, sprite) !default;
    
    // Gets an attribute from the sass map
    @function sprite-attr($icon, $attr, $sprite) {
        $newIcon: map-get($sprite, $icon);
        @if $newIcon == null {
            @warn "Can't find an icon with the name #{$icon}";
        }
        @return map-get($newIcon, $attr);
    }
    
    @function icon-attr($icon, $sprite) {
        $sprite: map-get($svg-sprites, $sprite);
        $attr: (
            width: sprite-attr($icon, width, $sprite),
            height: sprite-attr($icon, height, $sprite),
            x: sprite-attr($icon, backgroundX, $sprite),
            y: sprite-attr($icon, backgroundY, $sprite)
        );
    
        @return $attr;
    }
    
    %svg-sprite {
        display: inline-block;
        background-image: url(map-get($svg-sprite, svgPath));
        background-size: map-get($svg-sprite, width) map-get($svg-sprite, height);
    }
    
    %ne-svg-sprite {
        display: inline-block;
        background-image: url(map-get($ne-svg-sprite, svgPath));
        background-size: map-get($ne-svg-sprite, width) map-get($ne-svg-sprite, height);
    }
    
    @mixin ne-svg-bg-size($percent: 100) {
        $bg-size-x: map-get($ne-svg-sprite, width);
        $bg-size-y: map-get($ne-svg-sprite, height);
        background-size: round($bg-size-x * $percent / 100) round($bg-size-y * $percent / 100);
    }
    
    @mixin svg-sprite($icon, $type: all, $sprite: svg) {
        @if $type == all {
            // Shares the backgrounds
            @extend %#{$sprite}-sprite;
        }
    
        $iconMap: icon-attr($icon, $sprite);
    
        // Outputs dimensions in em
        @if $type == all or $type == size {
            width: map-get($iconMap, width);
            height: map-get($iconMap, height);
        }
    
        // Outputs background position in px
        @if $type == all or $type == bg {
            background-position: map-get($iconMap, x) map-get($iconMap, y);
        }
    }
    
    @mixin svg-sprite-percent($icon, $type: all, $sprite: svg, $percent: 100) {
        @if $percent == 100 {
            @include svg-sprite-percent($icon, $type, $sprite);
        } @else {
            @if $type == all {
                // Shares the backgrounds
                @extend %#{$sprite}-sprite;
                @include ne-svg-bg-size($percent);
            }
    
            $iconMap: icon-attr($icon, $sprite);
    
            @if $type == all or $type == size {
                width: round(map-get($iconMap, width) * $percent / 100);
                height: round(map-get($iconMap, height) * $percent / 100);
            }
    
            @if $type == all or $type == bg {
                background-position: round(map-get($iconMap, x) * $percent / 100) round(map-get($iconMap, y) * $percent / 100);
            }
        }
    }

    Использую такой шаблон для генерации файла scss, (параметр common: folderName указывается в сборке gulp-svg-sprite)
    // {{date}}
    
    ${{common}}-icons: (
        sprite: (width: {{spriteWidth}}px, height: {{spriteHeight}}px, pngPath: '/source/i/{{common}}-sprite.png', svgPath: '/source/i/{{common}}-sprite.svg'),
    {{#shapes}}
        {{base}}: (width: {{width.inner}}px, height: {{height.inner}}px, backgroundX: {{position.absolute.x}}px, backgroundY: {{position.absolute.y}}px),
    {{/shapes}});


    А использую это примерно так (в папке ne-svg находятся файлы file-gray.svg, help-gray.svg, hand-icon.svg):
    $icons: (file: file-gray, help: help-gray, touch: hand-icon);
    @each $i, $icon in $icons {
        .icon--#{$i} {
            @extend %ne-svg-sprite;
            @include svg-sprite-percent($icon, all, ne-svg, 66);
        }
    }


    Возможно написал избыточную информацию, но мне кажется мой опыт будет полезным еще кому-то, хотя не претендую на звание изящного решения. По любым вопросам готов помочь.
    Ответ написан
    Комментировать
  • Как правильно воспользоваться "сеткой" bootstrap?

    @faragly
    Так не пойдет?
    <div class="row">
      <div class="col-md-8">
        <div class="row">
          <div class="col-md-6">Projects</div>
          <div class="col-md-6">Fondue</div>
        </div>
        <div class="row">
          <div class="col-md-4">Louis XX</div>
          <div class="col-md-8">View project</div>
        </div>
      </div>
      <div class="col-md-4">
        <div class="col-md-12">Potter</div>
        <div class="col-md-12">Tabano</div>
        <div class="col-md-12">Fiji</div>
      </div>
    </div>
    Ответ написан
    7 комментариев
  • Как сделать липкий блок останавливающийся на футоре?

    @faragly
    Ответ написан
    Комментировать
  • Календарь с событием на сайт?

    @faragly
    Посмотрите это - то что нужно. Если надо проще, то можно самому сверстать любой макет календаря (например, отсюда) и прикрутить любой tooltip (например, jBox)
    Ответ написан
    5 комментариев
  • На что нужно обратить внимание верстальщику?

    @faragly
    Обратите внимание на предыдущий ответ, смотрим интересующие вакансии и предъявляемые требования. Однозначно рекомендую пользоваться:
    • препроцессорами, вне зависимости от масштабности проекта, будь это хоть килобайт стилей, не имеет значения - это удобно и точка
    • хотя бы один препроцессор html (я использую jade)
    • один или несколько из популярных js фреймворков (я использую jQuery и AngularJS)
    • система сборки, например Gulp (плюс к нему bower, browserify и т.д.)

    Вдовесок было бы не лишним знать какой-нибудь серверный язык (например, php).
    В обязательном порядке git, его везде спросят.
    Ответ написан
  • Есть ли готовые хорошие адаптивные шаблоны для интернет-магазина?

    @faragly
    Посмотрите в маркетплейсе битрикса готовые решения. Там много примеров верстки интернет-магазинов. Можете еще посмотреть зарубежную площадку по продаже шаблонов Themeforest.net (раздел популярные e-commerce шаблоны, раздел wordpress e-commerce). Иногда сам захожу туда за вдохновением и вариантами верстки некоторых блоков. Посмотрите рейтинг Рунета 2015, есть категория интернет-магазины, не забудьте заглянуть на сайты крупных веб-студий и посмотреть их портфолио. Зарубежный Behance.net также порой вдохновляет...
    Ответ написан
    Комментировать