代码如下,图片在火狐中可以水平居中,也可以垂直居中,但是在Chrome中只能垂直居中,不能水平居中。我搞了好久都找不到解决方法,大家帮我看看,谢谢了!
注:javascript:DrawImage(this, 300, 300) 是一个等比例缩小放大的函数。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Test</title><script src="lib/js.js" type="text/javascript"></script><style type="text/css">#a{ width: 300px; height: 300px; margin: 10px; display: table-cell; border: 1px solid red; text-align: center; vertical-align: middle; overflow: hidden;}#b{ width: 300px; height: 300px; padding: 2px; display: table-cell; border: 1px solid #DDDDDD; vertical-align: middle; text-align: center;}</style></head><body><div id="a" > <a href="#"><img src="/static/imghwm/default1.png" data-src="1.jpg" class="lazy" onload="javascript:DrawImage(this, 300, 300)" / alt="为什么在火狐可以水平垂直居中,Chrome中就不行?_html/css_WEB-ITnose" ></a></div><div id="b"> <img src="/static/imghwm/default1.png" data-src="1.jpg" class="lazy" onload="javascript:DrawImage(this, 300, 300);" / alt="为什么在火狐可以水平垂直居中,Chrome中就不行?_html/css_WEB-ITnose" ></div></body></html>
回复讨论(解决方案)
这个应该是居中的 楼主可以把img给定宽度试试
你的js函数有问题吧。。
测试了再chrome 25.0.1364.172 m下没问题,就直接用css控制了下长宽
#a img ,#b img{width:200px;height:200px}
你的js函数有问题吧。。
测试了再chrome 25.0.1364.172 m下没问题,就直接用css控制了下长宽
#a img ,#b img{width:200px;height:200px}
函数应该没问题的,如下:
//图片按比例缩放var flag=false;function DrawImage(ImgD, w, h){var image=new Image();var iwidth = w; //定义允许图片宽度,当宽度大于这个值时等比例缩小var iheight = h; //定义允许图片高度,当宽度大于这个值时等比例缩小image.src=ImgD.src;if(image.width>0 && image.height>0){ //假如图片长宽都不为零flag=true; if(image.height/image.width>= iheight/iwidth){ //通过正弦值判断图片缩放后是否偏高 if(image.height>iheight){ //如果图片比设定的要高 ImgD.height=iheight; ImgD.width=(image.width*iheight)/image.height; }else{ ImgD.width=image.width; ImgD.height=image.height; } ImgD.alt=image.width+"×"+image.height; } else{ //如果图片比例 小于 设定的比例 if(image.width>iwidth){ ImgD.width=iwidth; ImgD.height=(image.height*iwidth)/image.width; }else{ ImgD.width=image.width; ImgD.height=image.height; } ImgD.alt=image.width+"×"+image.height; }} ImgD.style.display = "table-cell";}
你的js函数有问题吧。。
测试了再chrome 25.0.1364.172 m下没问题,就直接用css控制了下长宽
#a img ,#b img{width:200px;height:200px}
这个js函数又没有控制css样式。
这个你测试到底是不是js函数引起的,直接把js函数删掉,然后看看是不是能居中,就知道了。
并且,你这个函数里面就是在修改宽度和高度,你竟然说没有控制CSS样式。。。
这个你测试到底是不是js函数引起的,直接把js函数删掉,然后看看是不是能居中,就知道了。
并且,你这个函数里面就是在修改宽度和高度,你竟然说没有控制CSS样式。。。
测试了下,是这个函数的问题,可是这个函数只修改了图片高度和宽度,没有设置对齐方式啊,为什么图片水平居不了中呢。在不改变函数功能的前提下,这个函数该怎么改呢?谢谢!
ImgD.style.display = "table-cell";
把最后面的这个去掉试试吧。
#a>a,#b>img{ display:inline-block;}
ImgD.style.display = "table-cell";不要了
ImgD.style.display = "table-cell";
把最后面的这个去掉试试吧。
这样可以了,谢谢!
不过我还是想问下为什么表格单元内的表格单元不能水平居中呢?
即外层div是table-cell,内层图片是table-cell,这样就不能水平居中。好奇而已。
我的问题解决了,谢谢大家!
我对这个不是太理解
你可以这么认为,display是作用于是用的标签本身的,是让它和table中的td一样的样式,而通常呢,td都是居左显示的,左边或者是table的左边界,或者是上一个兄弟td。所以,你这里设置了table-cell之后,img就去居左了。
可以举个简单的例子:
<div style = "border:1px solid #aaa;width:500px;height:400px;"> <div style = "width:200px;height:200px;margin:0 auto;background:#eee;"> </div></div>
这里,内部的那个div是居中显示的。
如果你在里面再加个display:tabel-cell试试看,它就居左了。。。
可能说的不是这个情况产生的最根本原因,因为没怎么用过这个属性。。。
可以去搜一下,是不是有这方面的文章,看看~~
你理解的优点错误哦。。。
display这个属性,只会对本身有影响,后代是不会继承的
你本身的display不管设置成什么样子,都不会对它后代的显示方式有影响的。
所以,你这里的原因,只是因为img设置了display=table-cell,跟父元素设置了display=table-cell,没有一点关系的。
你理解的优点错误哦。。。
display这个属性,只会对本身有影响,后代是不会继承的
你本身的display不管设置成什么样子,都不会对它后代的显示方式有影响的。
所以,你这里的原因,只是因为img设置了display=table-cell,跟父元素设置了display=table-cell,没有一点关系的。
但是img设置了table-cell后再设置text-align: center;都不起作用。
http://www.w3school.com.cn/css/pr_text_text-align.asp
text-align一般是用于处理文字的(后代会继承该属性),并且,这个是对子元素设置的效果,说是对子元素,其实也包括该元素包含的文字,但有一点是肯定,它对它本身是没有影响的。而display正好相反,display只对设置的元素本身有影响,并且后代不会继承。
一般情况下,text-align:center不会让子标签中的块级元素显示为居中的,比如,行内元素会被居中处理。这里img是属于行内元素的表现类型,所以才会居中。
display中,只有“inline”和“inline-***”开头的属性是属于行内元素的,而table开头的属性,都是被解析成块级元素的。
好像说的差不多了。。
给你个例子,还是在上面例子的基础上修改的。
<div style = "border:1px solid #aaa;width:500px;height:400px;text-align:center;"> <div style = "width:300px;height:300px;background:#eee;"> <img src = "#" style = "width:100px;height:100px;" alt="为什么在火狐可以水平垂直居中,Chrome中就不行?_html/css_WEB-ITnose" ></img> <img src = "#" style = "width:100px;height:100px;display:table-cell;" alt="为什么在火狐可以水平垂直居中,Chrome中就不行?_html/css_WEB-ITnose" ></img> </div></div>
你在浏览器调试工具中可以查看每个标签的CSS样式,应该可以看到:
1:最外层的div,设置了text-align,会被所有的子元素继承了,但是它的子元素中,块级元素div,并没有居中。
2:第二层的div,同样继承了text-align,它的子元素中,有两个img标签,第一个img没有设置display属性,那么其默认属性就是行内元素,这个img居中了;第二个img设置了table-cell属性,被当做了块级元素,那么这个img的前后,就会有换行符,所以,这个元素并没有能和第一个img并排显示,而是另起一行显示。并且没有居中。
这样应该可以大概明白了吧?
http://www.w3school.com.cn/css/pr_text_text-align.asp
text-align一般是用于处理文字的(后代会继承该属性),并且,这个是对子元素设置的效果,说是对子元素,其实也包括该元素包含的文字,但有一点是肯定,它对它本身是没有影响的。而display正好相反,display只对设置的元素本身有影响,并且后代不会继承。
一般情况下,text-align:center不会让子标签中的块级元素显示为居中的,比如,行内元素会被居中处理。这里img是属于行内元素的表现类型,所以才会居中。
display中,只有“inline”和“inline-***”开头的属性是属于行内元素的,而table开头的属性,都是被解析成块级元素的。
好像说的差不多了。。
给你个例子,还是在上面例子的基础上修改的。
<div style = "border:1px solid #aaa;width:500px;height:400px;text-align:center;"> <div style = "width:300px;height:300px;background:#eee;"> <img src = "#" style = "width:100px;height:100px;" alt="为什么在火狐可以水平垂直居中,Chrome中就不行?_html/css_WEB-ITnose" ></img> <img src = "#" style = "width:100px;height:100px;display:table-cell;" alt="为什么在火狐可以水平垂直居中,Chrome中就不行?_html/css_WEB-ITnose" ></img> </div></div>
你在浏览器调试工具中可以查看每个标签的CSS样式,应该可以看到:
1:最外层的div,设置了text-align,会被所有的子元素继承了,但是它的子元素中,块级元素div,并没有居中。
2:第二层的div,同样继承了text-align,它的子元素中,有两个img标签,第一个img没有设置display属性,那么其默认属性就是行内元素,这个img居中了;第二个img设置了table-cell属性,被当做了块级元素,那么这个img的前后,就会有换行符,所以,这个元素并没有能和第一个img并排显示,而是另起一行显示。并且没有居中。
这样应该可以大概明白了吧?
非常感谢,谢谢你耐心的解答!

本文討論了HTML&lt; Progress&gt;元素,其目的,樣式和與&lt; meter&gt;元素。主要重點是使用&lt; progress&gt;為了完成任務和LT;儀表&gt;對於stati

本文討論了html&lt; datalist&gt;元素,通過提供自動完整建議,改善用戶體驗並減少錯誤來增強表格。Character計數:159

本文討論了HTML&lt; meter&gt;元素,用於在一個範圍內顯示標量或分數值及其在Web開發中的常見應用。它區分了&lt; meter&gt;從&lt; progress&gt;和前

本文討論了視口元標籤,這對於移動設備上的響應式Web設計至關重要。它解釋瞭如何正確使用確保最佳的內容縮放和用戶交互,而濫用可能會導致設計和可訪問性問題。

本文解釋了HTML5&lt; time&gt;語義日期/時間表示的元素。 它強調了DateTime屬性對機器可讀性(ISO 8601格式)的重要性,並在人類可讀文本旁邊,增強Accessibilit

本文討論了使用HTML5表單驗證屬性,例如必需的,圖案,最小,最大和長度限制,以直接在瀏覽器中驗證用戶輸入。

本文討論了&lt; iframe&gt;將外部內容嵌入網頁,其常見用途,安全風險以及諸如對象標籤和API等替代方案的目的。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載
最受歡迎的的開源編輯器