使用绝对定位被认为是不好的做法?
我正在开发一个网页,在那里我正在为棋类游戏devise一个棋盘,还有一些棋盘。 这一切都是使用HTML(使用jQuery进行dynamic更新)。 在某个地方,我认为使用页面内元素的绝对定位被认为是不好的做法,而且最好使用相对定位。
经过长时间的相对定位之后,我意识到,董事会成员的绝对定位将会更加容易。
有没有人知道相对定位优于绝对的原因? 在决定采取何种方法时,是否有适用的指导原则或经验法则?
对于象正在开发的游戏这样的象棋来说,使用绝对定位没有任何内在的错误。 正如你所说的,相对定位和正常stream程布局使这种任务相当困难。
当然,如果你正在开发一个更标准的网站,例如提供一些公共服务的网站,绝对定位将覆盖浏览器的默认stream布局,这样会降低许多用户的可访问性。 在这种情况下,我会避免它。
话虽如此,绝对定位的一个鲜为人知的好处是它允许在 (相对定位的)父元素内的本地化绝对定位。 解释:
<div id="parentDIV" style="position:relative"> <div id="childDIV" style="position:absolute:left:20px;top:20px;"> I'm absolutely positioned within parentDIV. </div> </div>
在这里, childDIV
实际上位于从左边20px和从parentDIV
顶部20px,而不是整个文档。 这可以很好地精确控制页面上的嵌套元素,而不会牺牲整个页面stream布局。
所以要回答你的问题(相对定位比绝对优先):我不相信有一个正确的答案,这取决于你需要build立什么。 然而,在一般定位(绝对或相对)与默认stream程布局,我的方法如上所述。
请记住,绝对定位不仅用于相对于浏览器窗口定位事物,还用于在包含元素中准确定位事物。 当我终于理解了这一点 – 经过多年使用CSS后 – 真正彻底改变了我有效使用CSS的能力。
关键在于绝对定位的元素被定位在具有position:relative
或position:absolute
的第一个祖先元素的上下文中。 所以如果你有这个:
div.Container { position:relative width:300px; height:300px; background:yellow; } div.PositionMe { position:absolute; top:10px; right:10px; width:20px; height:20px; background:red }
和
<div class=Container> ... <div class=PositionMe> ... </div> ... </div>
… PositionMe
将被放置相对Container
,而不是页面。
这为在特定情况下的精确放置打开了各种可能性,而不会牺牲页面的整体灵活性和stream动性。
它不回答你的问题,但…
对于像棋盘这样的国际象棋,我想你也可以使用一张桌子。
毕竟,你正在显示的是列和行。
现在我知道很多人开始喊“不要用餐桌”,“餐桌是邪恶的”。 然而,表格仍然是显示某些types数据的有效工具,尤其是列/行组织数据。
我认为问题是绝对定位容易被滥用。 一个坐标系比平面模型更容易让外行人理解。 另外,像Dreamweaver这样的程序使用绝对定位来布局页面变得非常简单(人们不知道他们在做什么)。
但是,对于典型的页面布局,默认的静态定位应该是足够的,并在90%的时间内完成工作。 它是非常灵活的,通过保持一切正常stream动,元素意识到周围的其他元素,并会随着事情的变化而采取行动。 处理dynamic内容(现在大多数页面)是非常好的。
使用绝对定位更为严格,难以编写对变化内容做出反应的布局。 他们太简单了。 但是,如果您需要在页面上自由移动元素(拖/放),需要将元素重叠在彼此之上,或者使用其他可以从坐标系工作中受益的布局技术,则这是完美的。 坦率地说,棋盘听起来是一个很好的理由使用它。
在以下情况下,在不同的浏览器中查看您的网站:
- 将您的操作系统设置切换为高dpi /大字体/高对比度(全部更改默认浏览器字体的大小)
- 增加/减less浏览器的默认字体大小
- 覆盖浏览器中的页面字体(通常在“辅助function”选项中的某处)
- 覆盖/closures页面样式表(授予,用户不应该期望一个国际象棋游戏在这种情况下正常工作:-))
一般来说绝对位置是不好的,当你有非固定大小的字体的内联元素。 对于你的情况,它可能工作; 然而,会有很多边缘情况下,会发生一些奇怪的事情。
相对定位是非常好的,如果你可以拉一个完全stream畅的布局,因为它将在大范围的屏幕分辨率看起来合理。
这就是说,经常会发现(特别是在试图与旧版本进行跨浏览器兼容性时),完全stream畅的布局难以正确实现。 绝对的定位不应该被折磨,大多数凡人的web开发人员一直在做。
只要你构造你的HTML,使得元素遵循一个合理的顺序,在没有CSS的情况下渲染就没有意义了,没有理由认为使用绝对定位应该被认为是不好的做法。
没有硬性规定。 不同forms的定位在不同的事情上都是好的。
大多数工作通常最好用静态定位(这是最脆弱的select),但绝对定位是非常好的。 另一方面,相对定位是我从来没有使用的东西,除了animation(静态定位到JavaScript之前的元素),build立一个绝对定位的包含块(所以元素本身完全不移动) ,以及(非常非常less的)元素的一个或两个像素微调。
有些事情是不可能的,没有立场:绝对的。 其他的东西是方式更容易达到绝对定位(比方说,你想要一个固定/分钟高度框中“读更多”右下angular的button,你没有足够的文本在该框中)。 所以,我的build议是:只要使用适合您需要的那个…
在我看来,我是唯一一个完全不同意绝对定位不是坏习惯这一假设的人。除了animation或元素等条件,特别要坐在一个“不寻常”的地方,让他们的父母白皙,绝对定位打破你的HTML结构(这正是HTML在我看来所定义的),因为你可以很容易地实现结构与结构的不同。 而且,devise的实现是绝对的困难和问题,因为你需要测量每个元素,并且你有很多的地方是错误的(对于正常的stream程,更容易和正确的网站框架的结构build设)
最后,关于国际象棋棋盘,我相信创造它最难的方法是使用绝对的位置! 用桌子做棋盘将会更加容易和正确(毕竟这是一张桌子)…而且我个人也会用一个cube
类来做float: left
(每9个立方体都有clear
)
64个不同的广场的绝对定位是疯了!
国际海事组织,不是一件坏事。 我最近完成了符合AA标准的任务,并支持FF2,IE7,IE6(是的,我知道的痛苦)。 有一定的布局,因为绝对定位才能实现! 即使像button那样需要分层的某些组件(透明胶片)也可能只是因为绝对定位。 如果有人有更好的办法,请向我介绍一下。
绝对定位打破stream动,如果我们知道如何限制stream量(改变父母的坐标相对/绝对)是很有趣的。 我不知道更老的浏览器(IE6本身就是恐龙),但我发现一个痛苦的事情是,写PDF(可爱的PDF)或打开与WINWORD(起诉我)给出了一个简陋的结果。
绝对定位是一种工具,就像任何工具一样,它可以被用在好的和坏的方面。 它没有什么不妥:stackoverflow可能使用它来显示在网站顶部的橙色栏中的警报。
现在,在你的情况下,这也不坏。 但是我觉得不要使用它会容易得多。
棋盘是一张桌子,表格单元不需要调整位置。 对于事件,onblur / onfocus和cie将完成这项工作。 为什么你甚至需要像素计算?
所以不要被你的练习的质量所强调,但也许你可以检查你是否真的需要绝对定位。