私は自分のウェブサイトのパフォーマンスレポートを( GTmetrix を使って)実行しましたが、画像の寸法が設定されていないことに気付きました、そしてheightおよびwidth属性の指定を逃しました。テーマには既にいくつかの画像がありますが、それらはデフォルトでは指定されていません。どうやってそれらを指定することができますか、そしてもっと重要なことに、属性heightとwidthをどこで指定するのですか?
<div class="thumb">
<a class="clip-link" data-id="1" title="Hello world!" href="http://example.com/hello-world/">
<span class="clip">
<img src="http://example.com/wp-content/themes/beetube/images/nothumb.png" alt="Hello world!" />
<span class="vertical-align"></span>
</span>
あなたのテーマのfunctions.phpファイルにあなたが追加することができます
add_image_size( 'thumb', 600, 350, true );
add_image_size( 'thumbnil', 600, 350, true );
add_image_size( 'medium', 600, 350, true );
add_image_size( 'large', 600, 350, true );
add_image_size( 'post-thumbnail', 600, 350, true );
add_image_size( '{custom-image-type}', 600, 350, true );
詳細については http://codex.wordpress.org/Function_Reference/add_image_size をご覧ください。
WordPressサイト全体のすべての画像に適切なwidth
およびheight
属性が設定されていることを確認する自動化されたソリューションをお探しの場合は、次のプラグインが対応します。 画像の寸法を指定 。
次のように、ソースコードを見て、代替として独自のfunctions.php
に追加できます。
add_action( 'plugins_loaded', 'factmaven_spcimg_buffer', 10, 1 );
function factmaven_spcimg_buffer() { // Enable output buffering for our function
ob_start( 'factmaven_spcimg_specify_image_dimensions' );
}
function factmaven_spcimg_specify_image_dimensions( $content ) { // Automatically insert width and height attributes
if ( is_admin() && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) ) { // Don't run the function in the admin panel
return $content;
}
preg_match_all( '/<img[^>]+>/i', $content, $images );
if ( count( $images ) < 1 ) { // Don't change content if there are no images
return $content;
}
foreach ( $images[0] as $image ) {
preg_match_all( '/(src|alt|title|class|id|width|height)=("[^"]*")/i', $image, $img );
if ( !in_array( 'src', $img[1] ) ) {
continue;
}
if ( !in_array( 'width', $img[1] ) || !in_array( 'height', $img[1] ) ) {
$src = $img[2][array_search( 'src', $img[1] )];
$alt = in_array( 'alt', $img[1] ) ? ' alt=' . $img[2][array_search( 'alt', $img[1] )] : '';
$title = in_array( 'title', $img[1] ) ? ' title=' . $img[2][array_search( 'title', $img[1] )] : '';
$class = in_array( 'class', $img[1] ) ? ' class=' . $img[2][array_search( 'class', $img[1] )] : '';
$id = in_array( 'id', $img[1] ) ? ' id=' . $img[2][array_search( 'id', $img[1] )] : '';
list( $width, $height, $type, $attr ) = getimagesize( str_replace( "\"", "" , $src ) );
$image_tag = sprintf( '<img src=%s%s%s%s%s width="%d" height="%d" />', $src, $alt, $title, $class, $id, $width, $height );
$content = str_replace( $image, $image_tag, $content );
}
}
return $content;
}
ヤコブの答えは質問の半分を取り上げています。他の半分のために:
gT Metrixの警告は、HTMLで幅と高さを指定する必要があるという意味ではありません。つまり、適切なスペースを確保する必要があり、イメージをロードしたときにブラウザがページをリフローして再描画する必要がないということです。
その上、寸法をハードコードすると、それは敏感な振る舞いを破ることになります。レイアウトがレスポンシブでない場合は問題ありませんが、レスポンシブを維持したい場合は、CSSのみを使用して結果を得ることができます。
ほとんどの場合、widthとmax-width:100
の両方を使ってもうまくいきますが、 Smashing Magazineからのこの記事 には興味深いテクニックがあります:max-width:100%の代わりに The Padding-Bottom Hack :
この手法では、高さを幅に対する尺度として定義します。パディングとマージンにはそのような固有の特性があり、内容を含まない要素のアスペクト比を作成するためにそれらを使用できます。パディングにはこの機能があるので、padding-bottomを要素の幅に比例するように設定できます。高さも0に設定すると、必要なものが得られます。 [...]
次のステップは、コンテナー内にイメージを配置し、それがコンテナーを埋め尽くすようにすることです。これを行うには、画像をコンテナの内側に絶対配置する必要があります。
.img-container {
padding-bottom: 56.25%; /* 16:9 ratio */
height: 0;
background-color: black;
}
.img-container img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
それが役に立てば幸い。