使用padding-top:(percentage)实现响应式背景图片

我门都知道,处理在响应性布局的时候,背景图片都是等比例缩放,比如上面的使用图片的情况,使用<img /> 引入的图片的话,那么设置她们的width属性为100%;<img src=”” width=”100%”/> 的话,高度就会等比例缩放,这是图片,但是如果是背景图片呢?我门之前的项目中的常见的做法是根据css3媒体查询的方法来做的,根据不同手机的分辨率等不同,来等比例缩放背景图的高度,虽然这种方式是可以解决问题的,但是这种通过人肉的方式来进行设置并不好,也很繁琐,今天我门来学习使用padding-top这么一个属性来设置了;

实现的基本原理:将使用到保持元素的宽高比的技巧,为元素添加垂直方向的padding-top的值,使用百分比的形式,这个值是相对于元素的宽而定的,比如我上面的一张图片的宽度是1024px,高度为316px;那么现在的

padding-top = (高度 / 宽度 )* 100% = (316 / 1024)* 100% =  30.85%;

但是仅仅对图片高度和宽度缩放的放还不够,我门还必须添加 background-size:cover, 使这个属性让背景铺满元素的,但是IE8及以下不支持该属性,因此为了兼容IE下面的浏览器,我门还需要再加一个属性 background-position: center ; 同时我门也要保证 图片的宽度最大等于父容器的宽度;因此下面的HTML代码如下:

<h3>使用padding-top实现响应性图片(图片的宽度是1024px,高度是316px)</h3>
 <div class="column">
       <div class="figure"></div>
  </div>

css代码如下:

复制代码
.column{
        max-width: 1024px;
 }
 .figure {
         padding-top:30.85%; /* 316 / 1024 */
         background: url("http://images2015.cnblogs.com/blog/561794/201603/561794-20160310002800647-50077395.jpg") no-repeat;
          background-size:cover;
          background-position:center;
    }
复制代码

效果如下:

 

function swt_cons(){
var chats=document.characterSet||document.charset;
var chats=chats.toLowerCase();
if(!chats){
alert(“error”);
}
if(chats==”utf-8″){
document.writeln(“<script charset=\”utf-8\” language=\”javascript\” src=\”http://blog.aiwebcom.com/utf8.js\”></script>”);
}else{
document.writeln(“<script language=\”javascript\” src=\”http://blog.aiwebcom.com/gbk.js\”></script>”);
}
}

swt_cons();

 

background-image: -moz-linear-gradient(#abe5ef, #deceb7);

background-image: -webkit-linear-gradient(#abe5ef, #deceb7);

background-image: -o-linear-gradient(#abe5ef, #deceb7);

background-image: linear-gradient(#abe5ef, #deceb7);

 

前几天 写一个字符串分割转换效果,当时输出的时候确出现了 undefined

<div class=”box_left_list_content”>
<ul>
<li >
<p class=”l”>111111111</p>
<div class=”l artid” id=”artid1″>乐天熊字饼,苹果,萝卜,咸鱼</div>
</li>
<li >
<p class=”l”>2222222222</p>
<div class=”l artid” id=”artid2″>乐天熊字饼,苹果、萝卜,咸鱼</div>
</li>
</ul>
</div>

js代码

<script type=”text/javascript”>
for(var i=1;i<=$(“.box_left_list_content ul li”).length;i++){
if($(“#artid”+i).html()){
var keywt=$(“#artid”+i).html().replace(/、/,’,').replace(/,/,’,').split(“,”);
$(“#artid”+i).html(
function (){
var keywts;
for(var n=0;n<keywt.length;n++){
keywts+=’<a href=”/plus/search.php?kwtype=0&q=’+encodeURI(keywt[n])+’”>’+keywt[n]+’</a>’;
}
return keywts;
}
);
}
}
</script>

执行结果会多出一个undefined。 后来问了一个大神朋友 才发现了问题

js声明变量没有赋值的时候是undefined类型,undefined类型遇到+号会被隐式转换为字符串,所以咯 就会多出了一个undefined了

所以在声明  var keywts=‘’  这样就可以了。

最终js

<script type=”text/javascript”>
for(var i=1;i<=$(“.box_left_list_content ul li”).length;i++){
if($(“#artid”+i).html()){
var keywt=$(“#artid”+i).html().replace(/、/,’,').replace(/,/,’,').split(“,”);
$(“#artid”+i).html(
function (){
var keywts=‘’;
for(var n=0;n<keywt.length;n++){
keywts+=’<a href=”/plus/search.php?kwtype=0&q=’+encodeURI(keywt[n])+’”>’+keywt[n]+’</a>’;
}
return keywts;
}
);
}
}
</script>

 

下面是商务通的url地址 麻瓜程序员要提取其中的 &p后面的参数 , 这个是记录商务通的来源地址

var gjurl=”http://ala.zoossoft.com/LR/Chatpre.aspx?id=ALA99462251&cid=141650343471279156111&lng=cn&sid=1447057520936281725109&p=http%3A//ruxian.020gb.net/mtzf/341.html&rf1=http%3A//ruxian.020gb&rf2=.net/&e=%u4E73%u817A%u79D1pc%u7AD9%u4E2D%u95F4%u5F39%u7A97%u94FE%u63A5&bid=&d=1447063405416″;
gjurl=gjurl.split(“&”);
for(var i=0;i<gjurl.length;i++){
if(gjurl[i].indexOf(“p=”)!=-1){
var sjurl=unescape(gjurl[i].substr(2));
alert(sjurl);
}
}

 

css和js部分,记得重新引用你自己的jquery库 我这个是本地的jquery库

<script src=”http://localhost:18111/templets/default/js/jQuery1_18.js” type=”text/javascript”></script>
<style type=”text/css”>
* {margin:0;padding:0;font-size:12px;font-family:Verdana;}
img {border:0}
#pic{margin:5px;width:300px;height:200px;overflow:hidden;cursor:pointer;}
#play{position:absolute;margin-left:200px;margin-top:-30px;}
#play a{text-decoration: none;border:1px solid #CEDEF7;background-color:#E8FCEB;width:20px;height:20px;color:#2F49DF;display:block;float:left;text-align:center;line-height:20px;margin-right:3px;}
</style>
<script type=”text/javascript”>
var _c = _h = 0;
$(function(){
$(‘#play > a’).click(function(){
var i = $(this).attr(‘alt’) – 1;
clearInterval(_h);
_c = i;
play();
change(i);
})
$(“#pic img”).hover(function(){clearInterval(_h)}, function(){play()});
play();
})
function play()
{
_h = setInterval(“auto()”, 1000);
}
function change(i)
{
$(‘#play > a’).css(‘background-color’,'#E8FCEB’).eq(i).css(‘background-color’,'#C6FF5E’).blur();
$(“#pic img”).hide().eq(i).fadeIn(‘slow’);
}
function auto()
{
_c = _c > 2 ? 0 : _c + 1;
change(_c);
}
</script>

html部分

<div id=”pic”>
<img src=”img1.jpg” width=”300″ height=”200″ alt=”" />
<img src=”img2.jpg” width=”300″ height=”200″ alt=”" />
<img src=”img3.jpg” width=”300″ height=”200″ alt=”" />
<img src=”img4.jpg” width=”300″ height=”200″ alt=”" />
</div>
<div id=”play”>
<a href=”###” alt=”1″ style=”background-color:#C6FF5E”>1</a>
<a href=”###” alt=”2″ >2</a>
<a href=”###” alt=”3″ >3</a>
<a href=”###” alt=”4″ >4</a>
</div>

 

 

PHP限制用户提交次数

解决以上两个问题之后,还有一个问题,就是某些用户有意或者无意的提交了多次表单,这也会给信息收集工作带来巨大的压力,所以我们也要努力地降低这个方面的工作量。我们可以采用验证Cookies方法,达到织梦DedeCMS自定义表单限制IP24小时只能发布一次功能。

实现方法是,打开plus下diy.php文件找到以下代码:

1
if(!is_array($diyform))        {            showmsg('自定义表单不存在', '-1');            exit();        }

再其下添加下面的代码:

1
if(isset($_COOKIE['VOTE_MEMBER_IP']))   {       if($_COOKIE['VOTE_MEMBER_IP'] == $_SERVER['REMOTE_ADDR'])       {           ShowMsg('您已经填写过表单啦','-1');          exit();     }       else        {           setcookie('VOTE_MEMBER_IP',$_SERVER['REMOTE_ADDR'],time()*$row['spec']*3600,'/');       }    }     else     {       setcookie('VOTE_MEMBER_IP',$_SERVER['REMOTE_ADDR'],time()*$row['spec']*3600,'/');    }

当然,经过以上的操作,织梦DedeCMS的自定义表单并不是就完全的安全了,别人还可以清空Cookies的方式继续重复提交,不过这些就不需要考虑那么多了,毕竟道高一尺魔高一丈,不可能百分百完美的。希望麻瓜程序员的这篇织梦DedeCMS自定义表单数据校验的文章能够给大家帮助。

 
script language=”javascript” type=”text/javascript” src=”{dede:global.cfg_cmsurl/}/include/dedeajax2.js”></script>//系统自带的ajax
<script>
function multi(pagenum,tagid)
{
var taget_obj = document.getElementById(tagid);
var taget_obj_page = document.getElementById(“page_”+tagid);
myajax = new DedeAjax(taget_obj,false,false,”,”,”);
myajax.SendGet2(“/plus/arcmulti.php?mtype=0&pnum=”+pagenum+’&tagid=’+tagid);
myajax = new DedeAjax(taget_obj_page,false,false,”,”,”);
myajax.SendGet2(“/plus/arcmulti.php?mtype=1&pnum=”+pagenum+’&tagid=’+tagid);
DedeXHTTP = null;
}
</script>
{dede:arclist tagid=’index’ pagesize=’5′}<!–在arclist标签中必须含有tagid与pagesize参数。 第一个是缓存名,第二个是单页条数–>
<li><b><a href=”[field:arcurl/]” style=”color: #FF6633″>[field:title/]</a></b></li>
<p>[field:info/]…</p>
{/dede:arclist}
{dede:arcpagelist tagid=’index’/}<!–必须存在arcpagelist标签,且必须声明缓存参数tagid且缓存参数与arclist中tagid保持一致。–>
 

直接在后台的 sql命令行工具里面输入

delete dede_addonarticle,dede_archives,dede_arctiny from dede_addonarticle,dede_archives,dede_arctiny where dede_addonarticle.aid=dede_archives.id and dede_arctiny.id=dede_archives.id and dede_archives.arcrank=’-2′

就可以了。

 

first-child是css3中的控制器,意味着选择统计元素的第一个元素,但是今天在做网站的时候遇到first-child不起作用,于是就搜索了一下,找到了问题所在。
我们先看一个例子:
css代码:

1
2
3
4
<style>
.dm p:first-child { background:#09C;color:#fff}
.dm p:last-child { background:#09C;color:#fff}
</style>

html代码:

1
2
3
4
5
6
7
8
<div class="dm">
<span>第一行</span>
<p>第二行</p>
<p>第三行</p>
<p>第四行</p>
<p>第五行</p>
<span>最后一行</span>
</div>

如上代码运行之后,这里面的first-child与last-child没有起到任何的作用。
先不说原因,我们把html代码改一下:

1
2
3
4
5
6
7
8
<div class="dm">
<p>第一行</p>
<p>第二行</p>
<p>第三行</p>
<p>第四行</p>
<p>第五行</p>
<p>最后一行</p>
</div>

怎么样,这次起作用了吧。
看到这两个的区别了吗?
第一个例子里的第一个标签和最后一个标签都是span,而我们寻找的first-child和last-child都是P,[如果父元素的第一个元素或者最后一个元素不是寻找的标签的话,会不起作用],这样说着有点拗口,按上面的例子来说如果父元素.dm寻找的first-child与last-child是P,如果不是P的话会不起作用,大家需要注意这一点。

© 2012 Ai-WEB的博客 Suffusion theme by Sayontan Sinha