TwentyTwelve: IE7- und IE8-kompatibles Childtheme

twentytwelve-child-in-oldIE

Das Bild unterliegt keinen urheberrechtlichen Beschränkungen

Achtung, funktioniert in Version 1.0 nicht mehr. Das Childtheme für Version 1.0 gibt es hier.

Nachdem ich gestern feststellte, dass die Darstellung in TwentyTwelve weder IE7- noch IE8-kompatibel ist, setzte sich der Gedanke in mir fest, die Kompatibilität mit Hilfe eines Childthemes herzustellen. Tatsächlich geht das Dank der überschaubaren Struktur des Themes recht schnell.

Der Plan: theme.js durch navi.js ersetzen und html5.js durch modernizr-respond.js. Dem Menü eine Klasse verpassen, um den navi.js-Umschalter darauf anzuwenden. Die neu gesetzte html-CSS-Klasse .no-js wird von modernizr automatisch durch .js ersetzt wenn im Browser der die Website aufruft Javascript aktiviert ist. Auch andere Browser-Capabilities (html5 und CSS3) werden durch modernizr identifiziert (und entsprechende CSS-Klassen generiert), weshalb ich es für alle Browser einbinde, nicht nur IE.

Schritt 1: neues Themeverzeichnis anlegen

Ich nannte es twentytwelveieplus, und es enthält ein Verzeichnis “js” für die neuen Skripte, eine neue style.css, eine Kopie der header.php aus dem TwentyTwelve-Theme (die gleich im Anschluss modifiziert wird) und eine functions.php.

Schritt 2: header.php im Childtheme modifizieren

entfernen von

<!--[if lt IE 9]>
<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js" type="text/javascript"></script>
<![endif]-->

ersetzen von

<html <?php language_attributes(); ?>>
/*
 ... 
 */
<?php wp_nav_menu( array( 'theme_location' => 'primary' ) ); ?>

durch

<html class="no-js" <?php language_attributes(); ?>
/*
 ... 
 */  
<?php wp_nav_menu( array( 'menu_class' => 'menu-main-navigation' , 'theme_location' => 'primary' ) ); ?>

Schritt 3: js-Dateien hinzufügen

Auf www.initializr.com modernizr mit Respond generieren lassen und downloaden. Die Datei umbenennen in modernizr-respond.js und in das js-Verzeichnis des Childthemes holen.
IMG: TwentyTwelve: IE7- und IE8-kompatibles Childtheme

Nachfolgenden Code in eine neue Datei navi.js einfügen

jQuery(document).ready(function($){

	/* prepend menu icon */
	$('#site-navigation').prepend('');
	
	/* toggle nav */
	$("#menu-icon").on("click", function(){
		$(".menu-main-navigation").slideToggle();
		$(this).toggleClass("active");
	});

});

Schritt 4: functions.php

Im Theme-Setup wird die Funktion entfernt mit der TwentyTwelve die IE7 und IE9 in- bzw. nur teilkompatiblen Skripte lädt. Dadurch gehen auch zwei Optionen verloren, die im nächsten Skript neu eingebunden werden. Das originale Stylesheet habe ich ebenfalls dort eingebunden, da ich css-Dateien aus Performancegründen (IE hat damit manchmal Probleme) nicht gerne include.

function twentytwelveieplus_child_theme_setup() {
load_child_theme_textdomain( 'twentytwelveieplus', get_stylesheet_directory() . '/languages' );

// verhindern, dass Originale IE-Behandlung und theme.js eingebunden werden
remove_action( 'wp_enqueue_scripts', 'twentytwelve_scripts_styles' );
	}
add_action( 'after_setup_theme', 'twentytwelveieplus_child_theme_setup' );


function load_twentytwelveieplus_scripts() {
	// durch remove-action verlorene Optionen wiederherstellen
	global $twentytwelve_options;
	if ( is_singular() && comments_open() && get_option( 'thread_comments' ) )
		wp_enqueue_script( 'comment-reply' );
	
	$options = $twentytwelve_options->get_theme_options();
	if ( $options['enable_fonts'] )
		wp_enqueue_style( 'fonts', 'http://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700' );

// Skripte und Stile einbinden		
wp_register_script( 'navi', get_stylesheet_directory_uri().'/js/navi.js');
wp_register_script('modernizr', get_stylesheet_directory_uri().'/js/modernizr-respond.js');
wp_register_style('twentytwelve-style', get_template_directory_uri().'/style.css');
wp_register_style('twentytwelveieplus-style', get_stylesheet_directory_uri().'/style.css');
		wp_enqueue_script('navi'); 		
		wp_enqueue_script('modernizr');  
		wp_enqueue_style( 'twentytwelve-style' );
		wp_enqueue_style( 'twentytwelveieplus-style' );
}
add_action('wp_enqueue_scripts', 'load_twentytwelveieplus_scripts');

Schritt 5: style.css

/*
Theme Name: twentytwelveieplus
Description: IE7 and IE8 compatible Childtheme of TwentyTwelve - Source modernizr with respond.js: www.initializr.com, Source nav.js: webdesignerwall.com
Version: 0.6
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: twentytwelveieplus
Template: twentytwelve
*/

/* new menue styles "twentytwelveieplus" */
nav.main-navigation li {
	float:left;
}

@media screen and (max-width: 600px) {	
.js #site-navigation #menu-icon {
    padding: 0.125em 0;
	line-height:2em;
    background:#eee;
	border:solid 1px #ccc;
    cursor: pointer;
    display: block;
	text-align:center;
}

.js #site-navigation #menu-icon.active {
	}

#site-navigation .menu-main-navigation {
    clear: both;
    position: relative;
    top: 0.5em;
    width: auto;
    z-index: 10000;
}

.js #site-navigation .menu-main-navigation {
    display: none;
	}
.no-js #site-navigation .menu-main-navigation {
	display:block;
	}

#site-navigation .menu-main-navigation li {
    clear: both;
	display:block;
    float: none;
    text-align:center;
	margin-right:0;
	}
	
#site-navigation .menu-main-navigation li a {
    border-bottom: 0px none;
    line-height: 2;
}


#site-navigation .menu-main-navigation ul {
    width: auto;
    position: static;
    display: block;
    border: medium none;
    background: inherit;
	}

#site-navigation .menu-main-navigation ul li {
    float: none;
	}
} 

@media screen and (min-width: 601px) {
/* ensure navigation is visible on desktop version */
.js #site-navigation .menu-main-navigation {
		display: block !important;
	}
	
	#menu-icon {
	display:none;
	}
}

Am Anfang des Artikels befindet sich ein Downloadlink auf das Childtheme.
Hinweis: um das Childtheme zu benutzen, muss das “Parent” TwentyTwelve im Verzeichnis wp-content/themes abgelegt sein.
Hier geht’s zum Download von TwentyTwelve

Schritt 6: Theme aktivieren

Download

twentytwelveieplus

(77 kB)

2 Antworten auf TwentyTwelve: IE7- und IE8-kompatibles Childtheme

  1. Webmasta schrieb:

    Zur Info, das Menü des Twenty Twelve 1.0 Releases funktioniert auch nicht mit IE7/IE8 und teils auch nicht mit IE9 (im Kompatibilitätsmodus).

    Hier zwei Links mit Meinungen von Leuten, die sich teils massiv beschweren und Lösungsmöglichkeiten suchen: WordPress Support Forum: http://wordpress.org/support/topic/theme-twenty-twelve-nav-bar-fails-in-ie8 – WordPress Bug Tracker: http://core.trac.wordpress.org/ticket/22044 (der aktuelle Patch dort funktioniert anders als angegeben nicht!)

    Es wäre toll, wenn die hier angegebene Lösung für die 1.0 Version zur Verfügung stehen würde, da wären Ihnen viele, viele Leute bestimmt dankbar.

    • Gabriele schrieb:

      Das neue Childtheme für TwentyTwelve gibt es hier.
      Die Nadeln glühen noch, und ich hab’s nur kurz getestet (IE7, 8, 9). Bitte Bescheid geben falls ich was übersehen habe.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht.

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>