昨天和今天的Css问题
四 09
Tags:css, ie6 5 Comments »
昨天面试问到了一个IE6的3PX问题,我回答了两个方法,一个是用hack,一个是用display inline,显然,我把3px问题和双边距问题搞错了。
IE6的3px问题。A层和B层。A浮动,B不浮动,那么在IE6下A和B之间会有3px的bug。
解决方法是用负margin或者给B也加个浮动。
IE6的双边距问题。如果A层向左浮动,并且有个margin-left,那么margin-left 就会出现双倍边距。
解决方法是A层加一句display inline 的样式或者用hack。
补充一个IE6注释问题。把一大堆注释放在包含在同一个DIV的不同元素之时就会时标签内部的文字莫名的出现重复。
解决方法是,把注释移到其他地方去或者干脆删掉。
回头想想,觉得自己的CSS基础还是不牢固,唉,基础不扎实,老毛病了。
我的Beautycss.org今天也修正了两个问题,一个是内容页的“最热文章” 错位问题,一个是图片自动缩小的问题。
“最热文章” 错位问题。万恶的帝国cms用落后的document.write来获取列表,IE6和7把行js也算为一行,这样就错位了。
解决方法是让所有的li浮动,然后给包含li的层一个高度,或者在最有个li的后面清除浮动。
图片自动缩小问题。我在CSS里这样定义了img。 img{height:auto;width:auto;} ,遇到这样的写法,IE6就会把图片缩小。
解决方法就是删掉它。
今天是裸奔节,本博客也积极号召响应,脱!
IE6的一个Css问题
一 26
Tags:css, ie6 No Comments »
今天遇到一个问题,CSS源码如下:
a:link,a:visited,a:hover,a:active{font-famliy:“宋体”;color:#fff;font-size:18px}
现象:IE6里字体,颜色,大小都没有效果,其他浏览器正常.用firebug看了下.发现问题出在CSS文件的编码上,导致浏览器将”宋体”认成了乱码,进而导致整个句子都没效果.
解决方法:css文件转成utf-8. 不会改的,在DW里新建一个css,全拷过去就好了.
两个CSS的问题
九 28
Tags:css, hack, ie6 No Comments »
#
// 说明:让 IE6 及其以下版本支持 CSS 中 min/max-width/height 属性
#
// minmax.js: make IE5+/Win support CSS min/max-width/height
##
/*@cc_on
#
@if (@_win32 && @_jscript_version>4)
#
#
var minmax_elements;
#
#
minmax_props= new Array(
#
new Array(’min-width’, ‘minWidth’),
#
new Array(’max-width’, ‘maxWidth’),
#
new Array(’min-height’,’minHeight’),
#
new Array(’max-height’,’maxHeight’)
#
);
#
#
// Binding. Called on all new elements. If , initialise; check all
#
// elements for minmax properties
#
#
function minmax_bind(el) {
#
var i, em, ms;
#
var st= el.style, cs= el.currentStyle;
#
#
if (minmax_elements==window.undefined) {
#
// initialise when body element has turned up, but only on IE
#
if (!document.body || !document.body.currentStyle) return;
#
minmax_elements= new Array();
#
window.attachEvent(’onresize’, minmax_delayout);
#
// make font size listener
#
em= document.createElement(’div’);
#
em.setAttribute(’id’, ‘minmax_em’);
#
em.style.position= ‘absolute’; em.style.visibility= ‘hidden’;
#
em.style.fontSize= ‘xx-large’; em.style.height= ‘5em’;
#
em.style.top=’-5em’; em.style.left= ‘0′;
#
if (em.style.setExpression) {
#
em.style.setExpression(’width’, ‘minmax_checkFont()’);
#
document.body.insertBefore(em, document.body.firstChild);
#
}
#
}
#
#
// transform hyphenated properties the browser has not caught to camelCase
#
for (i= minmax_props.length; i–>0;)
#
if (cs[minmax_props[i][0]])
#
st[minmax_props[i][1]]= cs[minmax_props[i][0]];
#
// add element with properties to list, store optimal size values
#
for (i= minmax_props.length; i–>0;) {
#
ms= cs[minmax_props[i][1]];
#
if (ms && ms!=’auto’ && ms!=’none’ && ms!=’0′ && ms!=”) {
#
st.minmaxWidth= cs.width; st.minmaxHeight= cs.height;
#
minmax_elements[minmax_elements.length]= el;
#
// will need a layout later
#
minmax_delayout();
#
break;
#
} }
#
}
#
#
// check for font size changes
#
#
var minmax_fontsize= 0;
#
function minmax_checkFont() {
#
var fs= document.getElementById(’minmax_em’).offsetHeight;
#
if (minmax_fontsize!=fs && minmax_fontsize!=0)
#
minmax_delayout();
#
minmax_fontsize= fs;
#
return ‘5em’;
#
}
#
#
// Layout. Called after window and font size-change. Go through elements we
#
// picked out earlier and set their size to the minimum, maximum and optimum,
#
// choosing whichever is appropriate
#
#
// Request re-layout at next available moment
#
var minmax_delaying= false;
#
function minmax_delayout() {
#
if (minmax_delaying) return;
#
minmax_delaying= true;
#
window.setTimeout(minmax_layout, 0);
#
}
#
#
function minmax_stopdelaying() {
#
minmax_delaying= false;
#
}
#
#
function minmax_layout() {
#
window.setTimeout(minmax_stopdelaying, 100);
#
var i, el, st, cs, optimal, inrange;
#
for (i= minmax_elements.length; i–>0;) {
#
el= minmax_elements[i]; st= el.style; cs= el.currentStyle;
#
#
// horizontal size bounding
#
st.width= st.minmaxWidth; optimal= el.offsetWidth;
#
inrange= true;
#
if (inrange && cs.minWidth && cs.minWidth!=’0′ && cs.minWidth!=’auto’ && cs.minWidth!=”) {
#
st.width= cs.minWidth;
#
inrange= (el.offsetWidth
#
}
#
if (inrange && cs.maxWidth && cs.maxWidth!=’none’ && cs.maxWidth!=’auto’ && cs.maxWidth!=”) {
#
st.width= cs.maxWidth;
#
inrange= (el.offsetWidth>optimal);
#
}
#
if (inrange) st.width= st.minmaxWidth;
#
#
// vertical size bounding
#
st.height= st.minmaxHeight; optimal= el.offsetHeight;
#
inrange= true;
#
if (inrange && cs.minHeight && cs.minHeight!=’0′ && cs.minHeight!=’auto’ && cs.minHeight!=”) {
#
st.height= cs.minHeight;
#
inrange= (el.offsetHeight
#
}
#
if (inrange && cs.maxHeight && cs.maxHeight!=’none’ && cs.maxHeight!=’auto’ && cs.maxHeight!=”) {
#
st.height= cs.maxHeight;
#
inrange= (el.offsetHeight>optimal);
#
}
#
if (inrange) st.height= st.minmaxHeight;
#
}
#
}
#
#
// Scanning. Check document every so often until it has finished loading. Do
#
// nothing until arrives, then call main init. Pass any new elements
#
// found on each scan to be bound
#
#
var minmax_SCANDELAY= 500;
#
#
function minmax_scan() {
#
var el;
#
for (var i= 0; i
#
el= document.all[i];
#
if (!el.minmax_bound) {
#
el.minmax_bound= true;
#
minmax_bind(el);
#
} }
#
}
#
#
var minmax_scanner;
#
function minmax_stop() {
#
window.clearInterval(minmax_scanner);
#
minmax_scan();
#
}
#
#
minmax_scan();
#
minmax_scanner= window.setInterval(minmax_scan, minmax_SCANDELAY);
#
window.attachEvent(’onload’, minmax_stop);
#
#
@end @*/
由于只有 IE6 及其以下版本不支持min/max-width/height 属性,因此,我们可以用下面的调用方式:
第二个是这样的。我来描述一下。一个DIV里左边是标题,比如叫做 title,右边是更多,比如用图片more表示。
+div:text-align:left;
-title
-more(img):float:right;
/div
一开始我偷懒的方式如下:DIV设置左对齐,然后more浮动向右。 结果,出现了一个问题:more被挤到下面一行了。在群里问了下,得知把titile 和 more 在源码里对调一下位置。也就是先写more再写title。如下:
+div:text-align:left;
-more(img):float:right;
-title
/div
之所以出现这样的问题,估计是titile文字被浏览器理解为inline效果了。
而后来又有了另外一个方法。给title 套一个 span。
+div:text-align:left;
-span title /span
-more(img):float:right;
/div
综合说来,第二个解决方法比较好,因为多了一个span就能更好的对 title 进行控制。
