在iVane的Blog上看到一篇《两列一边宽度固定,另一边宽度自适应布局》,方法很不错,原文如下:
================================================
这个布局其实在实际应用中是经常用到的, 比如我这个blog的布局结构也是这样的, 利用这个布局还可以延伸到三列去, 甚至更多的变化.
布局的难点是如何使宽度固定的一边跟宽度自适应的另一边相排在一行呢? 答案是利用负边距, 自适应的一边先负外间距固定宽度边的宽度值, 然后内嵌的层再外间距相同的宽度值就可以了! 是不是觉得我说得有点乱? 没问题, 看代码就不会乱的了!
结构部分:
样式部分:
Demo 地址: http://blog.ikshow.cn/demo/2_col/
当然, 两边交换过来也是一样的, 呵呵~
Demo 地址: http://blog.ikshow.cn/demo/2_col/index_2.html
掌握了这个布局, 在面对很多页面时会很有用的~
=========================================================
这样,对于布局的左右自适应和上下自适应就都有了比较好的解决方案了。:)
[http://syre.blogbus.com/logs/5192416.html]
如下代码定义了一个循环模板的例子:
<xsl:template name="for-loop">
<xsl:param name="i"/>
<xsl:param name="count"/>
<xsl:if test="$i <= $count">
<xsl:value-of select="$i" disable-output-escaping = "yes" />
</xsl:if>
<xsl:if test="$i <= $count">
<xsl:call-template name="for-loop">
<xsl:with-param name="i">
<xsl:value-of select="$i + 1"/>
</xsl:with-param>
<xsl:with-param name="count">
<xsl:value-of select="$count"/>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>
调用方法:
<xsl:call-template name="for-loop">
<xsl:with-param name="i">1</xsl:with-param>
<xsl:with-param name="count">10</xsl:with-param>
</xsl:call-template>
结果输出1-10这10个数字。
看到这个标题很容易就会想到截断文字加“...”的做法。哈哈,就是这样。其实写这篇日志也只是把这样方法做个记录,因为好像写了这么多次,还是会不太记得。嘿嘿~~
一般的文字截断(适用于内联与块):
==============CSS================
.text-overflow{
display:block;/*内联对象需加*/
width:31em;
word-break:keep-all;/* 不换行 */
white-space:nowrap;/* 不换行 */
overflow:hidden;/* 内容超出宽度时隐藏超出部分的内容 */
text-overflow:ellipsis;/* 当对象内文本溢出时显示省略标记(...) ;需与overflow:hidden;一起使用。*/
}
=================================
对于表格的话,定义有一点不一样:
==============CSS================
table{
width:30em;
table-layout:fixed;/* 只有定义了表格的布局算法为fixed,下面td的定义才能起作用。 */
}
td{
width:100%;
word-break:keep-all;/* 不换行 */
white-space:nowrap;/* 不换行 */
overflow:hidden;/* 内容超出宽度时隐藏超出部分的内容 */
text-overflow:ellipsis;/* 当对象内文本溢出时显示省略标记(...) ;需与overflow:hidden;一起使用。*/
}
=================================
注:这个东东只对单行的文字的效,如果你想把它用在多行上,也只有第一行有作用的。 这个写法只有IE会有“...”,其它的浏览器文本超出指定宽度时会隐藏。
在CSSPlay上看到了一个垂直居中的例子,感觉还是不错的,跟大家分享一下:
======================CSS=======================
.holder{
width:740px;
height:300px;
border:1px solid #777;
text-align:center;
display:table-cell;
vertical-align:middle;
}
/*以下样式针对IE*/
.edge{
width:0;
height:100%;
display:inline-block;
vertical-align:middle;
}
.container{
vertical-align:middle;
display:inline-block;
}
================================================
====================HTML=======================
<div class="holder">
<!--[if IE]><span class="edge"></span><![endif]-->
<!--[if IE]><span class="container"><![endif]--><img src="http://img68.imageshack.us/img68/8708/mylogo9we.gif" alt="Homework" title="Homework" />测试内容测试内容测试内容测试内容测试内容测试内容测试内容测试内容测试内容测试内容测试内容测试内容测试内容测试内容测试内容测试内容测试内容<!--[if IE]></span><![endif]-->
</div>
=================================================
代码改动了一点点。有两点必须要注意的:
/*
========================
函数:显示或隐藏层
showDiv(divId_array,showLocality_array)
参数说明:
divId_array 所有要操作的层ID,用逗号分隔
showLocality_array 所有要显示的层在参数DivIdArray所对应的位置。为“0”或空时全部显示,设为负数则全部隐藏。
例如:showDiv('div3,div1,div2','2,3')为显示第二个(div1)和第三个层(div2),第一个层(div3)将被隐藏。
========================
*/
function showDiv(divId_array,showLocality_array)
{
var div_array = new Array();
var locality_array = new Array();
var intLocality;//showLocality_array数组长度
var intDiv;//div_array 数组长度
var intTemp = 1;//临时变量
var intTmp = 1;//临时变量
//初始化
if (divId_array)
{
div_array = divId_array.split(",");
}else{
intDiv = 0;
}
if (showLocality_array)
{
locality_array = showLocality_array.split(",");
intLocality = locality_array.length;
for (var n = 0;n < intLocality;n++)
{
intTemp *= locality_array[n];
}
if (intTemp <= 0)
{
intLocality = intTemp;
}else{
intLocality = div_array.length;
while (intLocality > 0)
{
intLocality -= 1;
document.getElementById(""+ div_array[intLocality] +"").style.display = "none";
}
intLocality = 1;
}
}else{
intLocality = 0;
}
//显示指定层
if (intDiv != 0 && intLocality >0)
{
intDiv = div_array.length;
intLocality = locality_array.length;
//排序locality_array 数组
for (var n = 0;n < intLocality;n++)
{
intTemp = locality_array[n];
for (var m = n + 1;m < intLocality;m++)
{
if (locality_array[n] > locality_array[m])
{
locality_array[n] = locality_array[m];
locality_array[m] = intTemp;
intTemp = locality_array[n];
}
}
}
intLocality = locality_array.length;
intTemp = 0;
//
while (intTemp < intLocality)
{
if ((locality_array[intTemp] - 1) < div_array.length)
{
intTmp = locality_array[intTemp] - 1;
document.getElementById(""+ div_array[intTmp] +"").style.display = "block";
}
intTemp += 1;
}
}
else if(intLocality == 0)
{//显示所有层
intLocality = div_array.length;
while (intLocality > 0)
{
intLocality -= 1;
document.getElementById(""+ div_array[intLocality] +"").style.display = "block";
}
}else{//隐藏所有层
intLocality = div_array.length;
while (intLocality > 0)
{
intLocality -= 1;
document.getElementById(""+ div_array[intLocality] +"").style.display = "none";
}
}
}