span设置宽度有效无效问题

在html中如何设定span的宽度?这看上去是个很简单的问题,似乎用style中的width属性就可以。例如,

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 2
 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4
 5 <html xmlns="http://www.w3.org/1999/xhtml" >
 6
 7 <head>
 8
 9 <title>Test Span</title>
10
11 <style type="text/css">
12
13 span {
14
15 background-color:#ffcc00;
16
17 width:150px;
18
19 }
20
21 </style>
22
23 </head>
24
25 <body>
26
27 fixed <span>width</span> span
28
29 </body>
30
31 </html>

通过试验以后发现,无效,无论是在Firefox还是IE中都无效。

通过查阅CSS2标准中关于width的定义发现,原来CSS中的width属性并不总是有效的,如果对象是inline对象,width属性就会被忽略。Firefox和IE原来是遵循了标准才这样做的。

修改span为block类型并设置float不是完美解决

在span的CSS中增加display属性,将span设置为block类型的Element,这样宽度的确有效了,不过也把前后文字隔在不同行里面。这样其实span就完全变成了div。

span {

background-color:#ffcc00;

display:block;

width:150px;

}

  很多人会建议再增加一个CSS属性float,这样的确在某种条件下能解决问题。比如我们的例子中,如果span前面没有文字,那的确是可行的。但是如果有了,前后文字就会连在一起,而span跑到了第二行。

span {

background-color:#ffcc00;

display:block;

float:left;

width:150px;

}

button的情况

其实,在Html的各种Element中,的确有既是inline,又能够设定宽度的情况存在。例如下面代码就显示了button对象,就可以很好的在文字中间出现,并且设定宽度。

<body>

fixed <button style="width:150px;">width</button> button

</body>

  那能不能让span象button那样显示呢?通过CSS2标准中display的定义inline对象的解释,发现CSS2标准的制定者把所有的Element在是否属于inline上做了非此即彼的规定,要么是inline,要么是block,有没有制定button那样既是inline,又可以象block那样设置宽度的属性值。

更新的标准CSS 2.1

再看更新的标准,在CSS2.1标准草案display的定义中增加了一个叫inline-block的属性值,针对的恰好是我们面对的这种情形。那么再看看各种浏览器的对应情况。

Firefox

通过display的文档了解到,inline-block在未来的Firefox 3中会实现。通过Mozllia扩展属性参考了解到,在Firefox 3以前的版本,例如现在的Firefox 2中,可以用-moz-inline-box达到同样的效果。

IE

通过MSDN中的display文档了解到,inline-block已经实现。实际测试发现IE 6.0以后都没问题。

完美的解决方案

下面代码的CSS定义完美解决了span的宽度设置问题。由于浏览器通常对不支持的CSS属性采取忽略处理的态度,所以最好将display:inline -block行写在后面,这样在Firefox里面,如果到了未来的Firefox 3,这一行就能起作用,代码可以同时兼容各种版本。

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 2
 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4
 5 <html xmlns="http://www.w3.org/1999/xhtml" >
 6
 7 <head>
 8
 9 <title>Test Span</title>
10
11 <style type="text/css">
12
13 span {
14
15 background-color:#ffcc00;
16
17 display:-moz-inline-box;
18
19 display:inline-block;
20
21 width:150px;
22
23 }
24
25 </style>
26
27 </head>
28
29 <body>
30
31 fixed <span>width</span> span
32
33 </body>
34
35 </html>

原文地址:https://www.cnblogs.com/Queeny-LXY/p/8506781.html

时间: 2024-10-16 08:16:53

span设置宽度有效无效问题的相关文章

&lt;span&gt; 无法设置宽度的完美解决方案!

在默认的情况下,利用css样式对span进行宽度设定是无效,但有时为了某种排版的要求,需要对span进行宽度设定,那么如何在html中利用css样式设定span的宽度? 思路:这看上去是个很简单的问题,似乎用style中的width属性就可以. 然而通过试验以后发现,无论是在Firefox还是IE中都无效. 在css2的标准中,查阅关于width的定义,我们可以发现,原来css中的width属性并不总是有效的,如果对象是inline对象,width属性就会被忽略.Firefox和IE都遵循了这个

为什么没法设置span的宽度和高度

为什么没法设置span的宽度和高度: 很多刚开始学习div+css布局的时候可能会碰到这样的问题,使用CSS代码无法设置span的高度和宽度,尽管CSS代码没有错误,却无法生效.例如 <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.51texiao.cn/"

React设置宽度的坑

[React设置宽度的坑] 我们知道通过ref可以获取DOM元素,通过style属性可以给此DOM元素添加样式. 但下面两行的赋值是无效的: this.HomeRootDiv.style.width=window.screen.width this.HomeRootDiv.style.height=window.screen.height 因为style中的width.height是有单位的,必须加上px才是有效的赋值.所以要改成下面这样 this.HomeRootDiv.style.width

解决bootstrap row span设置border换行的问题

Hadoop方面的毕业设计告一段落了,趁这几天空闲时间认真学习一下之前常使用但是却没用好的Bootstrap. 本文记录Bootstrap框架使用栅格系统时,遇到row内的span设置border换行的问题. 问题再现 <style> .row div{ border:solid 1px #eee; } </style> <div class="container"> <div class="row"> <div

为什么a标签不能设置宽度?

为什么a标签不能设置宽度?在a标签上用css设置宽度没有任何反应,到底是为什么那? 因为行内元素都是不能设置宽高的,a标签也是行内元素,所以也不能设置宽度,如果想设置宽度,必须把行内元素转换为block或者inline-block,转换为块block的话,元素会独占一行,有可能会改变你的布局, 如果想继续保持元素在一样上面,可以设置行内块inline-block,设置为行内块后可能会出现该元素和邻近元素不在一个水平线上,解决方法就是设置vertical-align: middle; 或者 ver

进行手持设备wince开发中DataGrid的样式设置(宽度)

private void SelectGoodsForm_Load(object sender, EventArgs e) { //定义 DataGrid样式 DataGridTableStyle dataGridStyle = null; dataGridStyle = new DataGridTableStyle(); this.goodsGrid.DataSource = createDataTable(); //清楚之前的DataGrid样式 this.goodsGrid.TableSt

java JFrame 设置背景颜色无效的理解

广州疯狂软件教育Java培训,iOS培训分享 在开发Java应用程序时,通常情况下利用JFrame创建窗口.利用JFrame创建的窗口分别包含一个标题.最小化按钮.最大化按钮和关闭按钮 1.在你使用JFrame创建窗体时的情况: 在你直接调用setBackground(Color.red)这个方法后,你的确设置了JFrame的背景颜色,而你看到的却不是直接的JFrame,而是JFrame.getContentPane().而JFrame上的contentPane默认是Color.WHITE的,所

解决thinkphp设置session周期无效的问题

thinkphp的session设置周期是无效的: 直接的影响就是无法保留用户的登陆状态: 用thinkphp开发的项目:关闭浏览器后用户就退出了: 即便设置了session周期也没作用: 这个bug存在很久了:但是thinkphp官网一直没处理更新: 吐槽完毕:下面来解决这个bug: 首先需要在 /Thinkphp/Common/funtion.php 公告函数的第1213行添加如下内容: 如果不是在1213行:就搜索gc_maxlifetime // 1213行原代码if(isset($na

为什么设置z-index属性无效

为什么设置z-index属性无效: z-index属性生效需要特定的条件才可以的,否则当然不会生效.下面简单介绍两种不生效的情况. 一.对象没有应用绝对定位或者相对定位: 对象必须应用绝对定位或者相对定位之后,z-index属性才有生效的可能. 二.浏览器兼容性导致: 例如,在IE6浏览器下select下拉框无法被div所覆盖,尽管div对象的使用绝对定位且z-index属性值设置的足够大还是不行. 解决方法可以参阅IE6浏览器下div无法遮盖select下拉框解决方法一章节. 原文地址是:ht