我有一组WordPress的图像大小,如下所示:
add_image_size(\'1039\', 1039, 697);
add_image_size(\'960\', 960, 644);
add_image_size(\'800\', 800, 537);
add_image_size(\'768\', 768, 515);
add_image_size(\'640\', 640, 429);
add_image_size(\'480\', 480, 322);
add_image_size(\'320\', 320, 215);
add_image_size(\'240\', 240, 161);
因此,基本上每个定义的图像大小都有自己的宽度名称(我强制将“1039”设置为允许的最大上载大小),这些宽度对应于八种不同的媒体大小,我使用以下设置:
div.container {width: 1039px;}
@media only screen and (min-width: 960px) and (max-width: 1038px) {div.container {width: 960px;}}
@media only screen and (min-width: 800px) and (max-width: 959px) {div.container {width: 800px;}}
@media only screen and (min-width: 768px) and (max-width: 799px) {div.container {width: 768px;}}
@media only screen and (min-width: 640px) and (max-width: 767px) {div.container {width: 640px;}}
@media only screen and (min-width: 480px) and (max-width: 639px) {div.container {width: 480px;}}
@media only screen and (min-width: 320px) and (max-width: 479px) {div.container {width: 320px;}}
@media only screen and (max-width: 319px) {div.container {width: 240px;}}
现在,我使用这个基本设置和任何选择的图像作为背景图像(大小为1039x697),它只会调整
div.container
当其他媒体观看时。但是,我想应用我添加的图像大小,以便它应用正确的图像大小以适合所用媒体的大小(而不是加载巨大的图像并使用CSS调整其大小,它应该加载适合该分辨率的图像)。
目前我使用此解决方案:
var body = jQuery(\'body\').css("width");
var body = parseInt(body);
var image = jQuery(\'.container\').css("background-image");
if (body >= 1039) {
var img_width = 1039;
var img_height = 697;
} else if (body >= 960 && body < 1039) {
var img_width = 960;
var img_height = 644;
var image = image.replace(\'.jpg")\', \'-\'+img_width+\'x\'+img_height+\'.jpg")\');
} else if (body >= 800 && body <= 960) {
var img_width = 800;
var img_height = 537;
var image = image.replace(\'.jpg")\', \'-\'+img_width+\'x\'+img_height+\'.jpg")\');
} else if (body >= 768 && body < 800) {
var img_width = 768;
var img_height = 515;
var image = image.replace(\'.jpg")\', \'-\'+img_width+\'x\'+img_height+\'.jpg")\');
} else if (body >= 640 && body < 768) {
var img_width = 640;
var img_height = 429;
var image = image.replace(\'.jpg")\', \'-\'+img_width+\'x\'+img_height+\'.jpg")\');
} else if (body >= 480 && body < 640) {
var img_width = 480;
var img_height = 322;
var image = image.replace(\'.jpg")\', \'-\'+img_width+\'x\'+img_height+\'.jpg")\');
} else if (body >= 320 && body < 480) {
var img_width = 320;
var img_height = 215;
var image = image.replace(\'.jpg")\', \'-\'+img_width+\'x\'+img_height+\'.jpg")\');
} else if (body >= 240 && body < 320) {
var img_width = 240;
var img_height = 161;
var image = image.replace(\'.jpg")\', \'-\'+img_width+\'x\'+img_height+\'.jpg")\');
} else if (body < 240) {
var img_width = 240;
var img_height = 161;
var image = image.replace(\'.jpg")\', \'-\'+img_width+\'x\'+img_height+\'.jpg")\');
}
jQuery(\'.container\').css("background-image", image);
事实上,这确实为正确的媒体应用了正确的图像,但它完全依赖于JavaScript的启用。
是否有某种方法可以仅使用CSS获得相同的结果?或者也许有一个更优雅的解决方案?如果是这样的话,我很想听你怎么说!
SO网友:OleVik
非常感谢Noel Tock的回答,我得到了一个非常有效的解决方案;已创建style.css.php
在主题文件夹中,包含:
<?php
header(\'Content-type: text/css\');
global $media_sizes;
$background = get_option(\'background\');
$background_height = get_option(\'background_height\');
$front_background = get_option(\'front_background\');
$back_background = get_option(\'back_background\');
?>
<?php
foreach ($media_sizes as $size) {
echo \'@media only screen\';
if ($size[\'min\']) {
echo \' and (min-width: \' . $size[\'min\'] . \'px)\';
}
if ($size[\'max\']) {
echo \' and (max-width: \' . $size[\'max\'] . \'px)\';
}
echo \' {\' . "\\n";
$back = $background[\'image\'];
$front_back = $front_background[\'image\'];
$front_back = str_replace(\'.jpg\', \'-\'.$size[\'min\'].\'x\'.$size[\'height\'].\'.jpg\', $front_back);
$back_back = $back_background[\'image\'];
$back_back = str_replace(\'.jpg\', \'-\'.$size[\'min\'].\'x\'.$size[\'height\'].\'.jpg\', $back_back);
echo \'.content {width: \'.$size[\'min\'].\'px; height: \'.$size[\'height\'].\'px;}\' . "\\n";
echo \'.wrapper {width: \'.$size[\'min\'].\'px; height: \'.$size[\'height\'].\'px;}\' . "\\n";
if ($size[\'min\'] > 480) {
echo \'.container#front {min-height: \'.($size[\'height\']+75).\'px; background-image: url("\'.$back.\'");}\' . "\\n";
echo \'.container#back {min-height: \'.($size[\'height\']+125).\'px; background-image: url("\'.$back.\'");}\' . "\\n";
} else {
echo \'.container#front {background-image: url("");}\' . "\\n";
echo \'.container#back {background-image: url("");}\' . "\\n";
}
echo \'.container#front .wrapper .content {background-image: url("\'.$front_back.\'");}\' . "\\n";
echo \'.container#back .content {background-image: url("\'.$back_back.\'");}\' . "\\n";
echo \'}\' . "\\n";
}
?>
其输出如下:
@media only screen and (min-width: 1039px) {
div.container {background: url("example-1039x697.jpg");}
}
@media only screen and (min-width: 960px)and (max-width: 1038px) {
div.container {background: url("example-960x644.jpg");}
}
@media only screen and (min-width: 800px)and (max-width: 959px) {
div.container {background: url("example-800x537.jpg");}
}
@media only screen and (min-width: 768px)and (max-width: 767px) {
div.container {background: url("example-768x515.jpg");}
}
@media only screen and (min-width: 640px)and (max-width: 639px) {
div.container {background: url("example-640x429.jpg");}
}
@media only screen and (min-width: 480px)and (max-width: 479px) {
div.container {background: url("");}
}
@media only screen and (min-width: 320px)and (max-width: 319px) {
div.container {background: url("");}
}
@media only screen and (min-width: 240px)and (max-width: 239px) {
div.container {background: url("");}
}
为了让它进入WordPress,我在
functions.php
:
function example_vars($public_query_vars) {
$public_query_vars[] = \'example_vars\';
return $public_query_vars;
}
add_filter(\'query_vars\', \'example_vars\');
function example_dynamic_css(){
$css = get_query_var(\'example_vars\');
if ($css == \'true\'){
include_once (TEMPLATEPATH . \'/style.css.php\');
exit;
}
}
add_action(\'template_redirect\', \'example_dynamic_css\');
并且在
header.php
:
<link rel="stylesheet" href="<?php bloginfo(\'url\'); ?>/?example_vars=true" type="text/css" media="screen" />
所有这些都会导致使用数据库中的选项动态生成媒体查询,并且完全没有JavaScript。