Cross browser kerning properly technique

178 views Asked by At

I have a situation trying to implement into the <header>, a logotext using kerning technique, desk cross-browsers compatible.

Beginning with this simple but very handy tool made by Mr.Andrew (special thanks), I have found a solution.

Before the modification, I had this <header> section in header.php:

...
        <!-- Start Header -->

        <header class="header row no-padding <?php echo $header_style; ?>" data-equal=">.columns" role="banner">

            <div class="small-7 medium-4 columns logo<?php if ($header_style == 'style1') { ?> show-for-large-up<?php } ?>">

                <?php if ($header_style == 'style2') { ?>

                    <a class="logotext" href="<?php echo esc_url( home_url( '/' ) ); ?>"

                    title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>"

                    rel="home"><?php bloginfo( 'name' ); ?>

                    </a>

                <?php } ?>

            </div>

            <?php if ($header_style != 'style2') { ?>

            <div class="small-7 medium-4 columns logo">

                <?php if ($header_style == 'style1') { ?>

                    <a class="logotext" href="<?php echo esc_url( home_url( '/' ) ); ?>"

                    title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>"

                    rel="home"><?php bloginfo( 'name' ); ?>

                    </a>

                <?php } ?>

            </div>

            <?php } ?>

            <div class="small-5 <?php if ($header_style == 'style2') { echo 'medium-8'; } else { echo 'medium-4';} ?> columns menu-holder">

                <?php $full_menu_true = ($menu_mobile_toggle_view == 'style2' && $header_style == 'style2');?>

                <?php if ($full_menu_true) { ?>

                    <nav id="full-menu" role="navigation">

                        <?php if ($page_menu) { ?>

                            <?php wp_nav_menu( array( 'menu' => $page_menu, 'depth' => 2, 'container' => false, 'menu_class' => 'full-menu', 'walker' => new thb_mobileDropdown  ) ); ?>

                        <?php } else  if(has_nav_menu('nav-menu')) { ?>

                          <?php wp_nav_menu( array( 'theme_location' => 'nav-menu', 'depth' => 2, 'container' => false, 'menu_class' => 'full-menu', 'walker' => new thb_mobileDropdown ) ); ?>

                        <?php } else { ?>

                            <ul class="full-menu">

                                <li><a href="<?php echo get_admin_url().'nav-menus.php'; ?>">Please assign a menu from Appearance -> Menus</a></li>

                            </ul>

                        <?php } ?>

                    </nav>

                <?php } ?>

                <?php if ($header_search != 'off') { do_action( 'thb_quick_search' ); } ?>

                <?php if ($header_cart != 'off') { do_action( 'thb_quick_cart' ); } ?>

                <a href="#" data-target="open-menu" class="mobile-toggle<?php if (!$full_menu_true) { ?> always<?php } ?>">

                    <div>

                        <span></span><span></span><span></span>

                    </div>

                </a>

            </div>

        </header>

        <!-- End Header -->
...

After:

...
        <!-- Start Header -->
    <header class="header row no-padding <?php echo $header_style; ?>" data-equal=">.columns" role="banner">                        
        <div class="row max_width ">
            <div class="small-7 medium-4 columns logo<?php if ($header_style == 'style1') { ?> show-for-large-up<?php } ?>">
                <?php if ($header_style == 'style2') { ?>
                    <div class="small-7 medium-4 columns logo">
                      <span class="logotext-n">n</span>
                      <span class="logotext-e">e</span>
                      <span class="logotext-u">u</span>
                      <span class="logotext-e2">e</span>
                      <span class="logotext-g">g</span>
                      <span class="logotext-r">r</span>
                      <span class="logotext-i">i</span>
                      <span class="logotext-d">d</span>
                    </div>
                <?php } ?>
            </div>          
        </div>              
                <?php if ($header_style != 'style2') { ?>                       
        <div class="row max_width ">            
            <div class="small-7 medium-4 columns logo">
                <?php if ($header_style == 'style1') { ?>
                    <div class="small-7 medium-4 columns logo">
                      <span class="logotext-n">n</span>
                      <span class="logotext-e">e</span>
                      <span class="logotext-u">u</span>
                      <span class="logotext-e2">e</span>
                      <span class="logotext-g">g</span>
                      <span class="logotext-r">r</span>
                      <span class="logotext-i">i</span>
                      <span class="logotext-d">d</span>
                    </div>
                <?php } ?>
            </div>          
        </div>  
    <?php } ?>                      
        <div class="row max_width ">        
            <div class="small-5 <?php if ($header_style == 'style2') { echo 'medium-8'; } else { echo 'medium-4';} ?> columns menu-holder">
                <?php $full_menu_true = ($menu_mobile_toggle_view == 'style2' && $header_style == 'style2');?>
                <?php if ($full_menu_true) { ?>
                    <nav id="full-menu" role="navigation">
                        <?php if ($page_menu) { ?>
                            <?php wp_nav_menu( array( 'menu' => $page_menu, 'depth' => 2, 'container' => false, 'menu_class' => 'full-menu', 'walker' => new thb_mobileDropdown  ) ); ?>
                        <?php } else  if(has_nav_menu('nav-menu')) { ?>
                          <?php wp_nav_menu( array( 'theme_location' => 'nav-menu', 'depth' => 2, 'container' => false, 'menu_class' => 'full-menu', 'walker' => new thb_mobileDropdown ) ); ?>
                        <?php } else { ?>
                            <ul class="full-menu">
                                <li><a href="<?php echo get_admin_url().'nav-menus.php'; ?>">Please assign a menu from Appearance -> Menus</a></li>
                            </ul>
                        <?php } ?>
                    </nav>
                <?php } ?>
                <?php if ($header_search != 'off') { do_action( 'thb_quick_search' ); } ?>
                <?php if ($header_cart != 'off') { do_action( 'thb_quick_cart' ); } ?>
                <a href="#" data-target="open-menu" class="mobile-toggle<?php if (!$full_menu_true) { ?> always<?php } ?>">
                    <div>
                        <span></span><span></span><span></span>
                    </div>
                </a>
            </div>          
        </div>  
    </header>
    <!-- End Header -->
...

the css code:

...
.logotext-n {
  color: #f1ecd6;    
  font-family: "arial black", sans-serif;
  font-weight: 900;
  font-size: 210px;
  text-transform: lowercase;
  letter-spacing: -29px;
}

.
.
.

.logotext-d {
  color: #f1ecd6;    
  font-family: "arial black", sans-serif;
  font-weight: 900;
  font-size: 210px;
  text-transform: lowercase;
  letter-spacing: 0;
}
...

At this point I've found that kerning values looks different in IE/Firefox vs. Chrome. I've read about the Media Query and I've tried this for Chrome values display correction:

...
@media screen and (-webkit-min-device-pixel-ratio:0) { 
    .logotext-n {
      color: #f1ecd6;    
      font-family: "arial black", sans-serif;
      font-weight: 900;
      font-size: 210px;
      text-transform: lowercase;
      letter-spacing: -18px;
          }
}
    .
    .
    .

@media screen and (-webkit-min-device-pixel-ratio:0) { 
    .logotext-d {
      color: #f1ecd6;    
      font-family: "arial black", sans-serif;
      font-weight: 900;
      font-size: 210px;
      text-transform: lowercase;
      letter-spacing: 0;
          }
}
... 

The result looks as it should in every browser IE11/Firefox38.0.5/Chrome43.0.2357.124 m, Also I dont have any error in the Chrome console, nevertheless:

Being a noob in coding stuff, is this a good kerning technique for cross browser support or is there any other alternative to apply the Media Query or other conditions in a direct / short way? Thank you,

1

There are 1 answers

6
clickbait On

There's a CSS font-kerning property. No need to separate your logo-text into an element for each letter.

If you need custom kerning, you can make all your letter spans have position: relative and use CSS to move them left or right.