under web standards
2008-01-10 am
On having layout
转载的一片文章
译者注:一篇很好的文章,很久以前在blog上就推荐过,这两天断断续续花了点时间翻译了一下,推荐读读。英文原文在此。
文中所有的 layout 这个单词都未作翻译,一来本身这个单词意思就比较多,翻成啥都觉得别扭,二来它也是专有的属性,所以就意会一下吧。水平有限,很多地方都是模模糊糊地意译,发现错误欢迎留言指出。
引用一段来自Dean Edwards的评价:
I recommend that every CSS designer and DOM scripter read this. Understanding “layout” gives a huge insight into lots of other IE bugs and idiosyncrasies.
(Dean Edwards)
介绍
Internet Explorer 中有很多奇怪的渲染问题可以通过赋予其“layout”得到解决。John Gallant 和 Holly Bergevin 把这些问题归类为“尺寸bug(dimensional bugs)”,意思是这些 bug 可以通过赋予相应元素某个宽度或高度解决。这便引出关于“layout”的一个问题:为什么它会改变元素的渲染特性,为什么它会影响到元素之间的关系?这 个问题问得很好,但却很难回答。在这篇文章中,我们专注于这个复杂问题会有那些方面的表现,某一方面的具体讨论和范例请参考文中给出的相关链接。
hasLayout — 定义
“Layout”是一个 IE/Win 的私有概念,它决定了一个元素如何显示以及约束其包含的内容、如何与其他元素交互和建立联系、如何响应和传递应用程序事件/用户事件等,这有点类似于一个窗体的概念。
微软的开发者们认为盒状元素(box-type elements)应该具有一个“属性(property)”(这是面向对象编程中的一个概念),于是他们便使用了 layout , 也就是 hasLayout。
hasLayout 其实既不是一个属性更不是一个行为,而是 IE 这个渲染引擎代代继承一贯拥有的一个渲染概念,在这个概念下渲染的元素将具有一种特性。
实际上这种渲染特性在有些 HTML 元素中与身俱来,而在另外一些元素中也可以通过一些 CSS 属性将其触发为 true ,且一旦触发将不可逆转。
术语
当我们说一个元素“拥有layout”或“得到layout”,或者说一个元素“has layout” 的时候,我们的意思是指它的微软专有属性 hasLayout 被设为了 true 。一个“layout元素”可以是一个默认就拥有 layout 的元素或者是一个通过设置某些 CSS 属性得到 layout 的元素。
而“无layout元素”,是指 hasLayout 未被触发的元素,比如一个未设定宽高尺寸的干净 div 元素就可以做为一个 “无layout祖先”。
给一个默认没有 layout 的元素赋予 layout 的方法包括设置可触发 hasLayout = true 的 CSS 属性。参考默认 layout 元素以及这些属性列表。没有办法设置 hasLayout = false , 除非把一开始那些触发 hasLayout = true 的 CSS 属性去除。
问题种种
Tags:haslayout
Continue to Read
under 那些事
2007-12-10 pm
这里留言就可以了我每天都看
2级c语言模拟考试题:
上机部分
一、填空题
请补充函数fun( ),该函数的功能是:依次取出字符串中所有的小写字母以形成新的字符串,并取代原字符串。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void fun(char *s)
{
int i=0;
char *p=s;
while (【1】)
{
if ( *p>=’a’ && *p<=’z')
{
s=*p;
【2】;
}
p++;
}
s=【3】;
}
void main( )
{
char str[80];
system(”CLS”);
printf(”\nEnter a string:”);
gets(str);
printf(”\n\nThe string is: %s\n”,str);
fun(str);
printf(”\n\nThe string of changing is : %s\n”,str);
}
二、改错题
下列给定程序中,函数fun()功能是:将m(1<=m<=10)个字符串反着连接起来,组成一个新串,放入pt所指字符串中,例如:把3个串DEG,ac,df反着串联起来,结果是dfacDEG。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main( )函数,不得增加或者删行,也不得改变程序的结构。
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <stdio.h>
void fun (char str[ ][10], int m, char *pt)
{
int k,q,i,j=0;
/**********found**********/
for(k=m;k>0;k–)
{
q=strlen(str[k]);
j+=q;
for(i=0;i<q;i++)
pt=str[k];
pt+=q;
pt[0]=0;
}
/***********found********/
pt=j;
}
void main( )
{
int m,h;
char s[10][10],p[120];
system(”cls”);
printf(”\n please enter m:”);
scanf(”%d”,&m);
printf(”\n please enter %d string:\n”,m);
gets(s[0]);
for(h=0;h<m;h++)
gets(s[h]);
fun(s,m,p);
printf(”\n the result is :%s\n”,p);
}
三、编程题
下列程序定义了N*N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[ ][N], int n),该函数的功能是:使数字右上半三角元素中的值乘以m。
例如,若m的值为2,a数组中的值为:
A=1
9
2 7
则返回主程序后a数组的值应为:
2 18
2 14
注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define
N
5
void fun(int a[ ][N], int m)
{
}
void main()
{
int a[N][N],m,i,j;
system(”CLS”);
printf(”******the
array ******\n”);
for(i=0;i<N;i++)
/*输出一个随机的5*5矩阵*/
{ for(j=0;j<N;j++)
{ a[j]=rand( )%20;
printf(”%d”,a[j]);
}
printf(”\n”);
}
do
m=rand( )%10;
while(m>=3);
/*产生一个小于3的随机数*/
printf(”m=%4d\n”,m);
fun(a,m);
printf(”THE
RESULT\n”);
for(i=0;i<N;i++)
{ for(j=0;j<N;j++)
printf(”%4d”,a[j]);
printf(”\n”);
}
}
音频片段:需要 Adobe Flash Player(9 或以上版本)播放音频片段。 点击这里下载最新版本。您需要开启浏览器的 JavaScript 支持。
音频片段:需要 Adobe Flash Player(9 或以上版本)播放音频片段。 点击这里下载最新版本。您需要开启浏览器的 JavaScript 支持。
Tags:a.C--Question
Continue to Read