渲染(无缝)3列项目中的问题

时间:2011-06-05 18:05:13

标签: html css cross-browser web-standards html-rendering

这个问题一直困扰着我一段时间,我还没有找到解决方案,并尝试了几种方法。我试图保持我的标记语义尽可能。我已经搜索了类似的问题,但我无法抽象出我的问题,足以找到适用的解决方案。

我觉得我很快就是为了解释我的设计方法。首先,我不是设计师。我没有接受过正式培训,但已经成功找到了自己作为程序员。自从我11岁(1997年)以来,我一直在网上工作,深受高中网络标准运动(2000-2004)的影响。直到几个月前,还没有想过网络工作。我工作的公司已经付钱给设计师在photoshop中开发设计,并且即将支付另一个人来完成CSS工作。这让我感到困惑,我决定加强并开始工作,到目前为止一切顺利。

然而,我已经让一个唠叨的问题滑倒了。我们有一个设计为3列框的搜索表单。由于我工作的性质,我不得不抽象一下盒子。该框在webkit中正确呈现,但中心列将无法在firefox,opera,尤其是IE(未图示)中正确定位。在这些浏览器的旧版本中看起来更糟糕。这可能是结帐实例的好时机:http://jsfiddle.net/KdFT7/

Cross Browser Differences

我应该简要解释一些标记。当单击“添加X”按钮时,会出现一个模式窗口,其中包含选择X项的选项,这将被附加到具有类XChoice的div,并且选择的总数将附加到段落(< p>)中X级选择如下。理想情况下,盒子开始变小并随着项目的添加而增长会很好,但是这会给我带来更多关于如何更新中心列和AddY框的问题。总体而言,我对设计不满意,但我的工作是编写它而不是批评它。

我需要一双新鲜的眼睛。我如何标记这一点,并应用正确的样式,允许3列在大多数浏览器中齐平。我理解这很多要消化,但我非常感谢对这个问题的任何刺激。标记可以改变,css可以重组,但不幸的是,设计需要相同。

HTML

<div class="rightCol">

    <div class="addX">
        <h2><span class="tiny">Add</span>X</h2>
        <span class="ui-corner-tl ui-widget-header ui-widget-borderfix"></span>
        <div class="innerContent ui-padding-med ui-widget-content">
            <form>
                <input type="radio" id="radio-0" name="radio" checked="checked" /><label for="radio-0" class="ui-spacer-med">And</label>
                <input type="radio" id="radio-1" name="radio" /><label for="radio-1" class="ui-spacer-med">Or</label><br />
            </form>
            <p class="descrip ui-spacer-med"> Click the button to lookup and select X for your search </p>
            <div class="XChoice"></div>
            <p class="xSelected"></p>
            <!-- brings up modal form -->
            <a href="addX.htm" class="addXButton">Add X</a>        </div>
        <span class="ui-corner-bl ui-widget-header ui-widget-borderfix"></span>
    </div>

    <div class="centerCol">
        <span class="ui-widget-header ui-widget-borderfix"></span>            
        <form class="clause ui-widget-content ui-padding-med">
            <input type="radio" id="radio-2" name="radio" checked="checked" /><label for="radio-2">And</label><br />
            <input type="radio" id="radio-3" name="radio" /><label for="radio-3">Or</label><br />
            <input type="radio" id="radio-4" name="radio" /><label for="radio-4">Not</label><br />
        </form>
        <span class="ui-widget-header ui-widget-borderfix"></span>
    </div>

    <div class="addY">
        <h2><span class="tiny">Add</span>Y</h2>
        <span class="ui-corner-tr ui-widget-header ui-widget-borderfix"></span>
        <div class="innerContent ui-padding-med ui-widget-content">
            <form>
                <input type="radio" id="radio-5" name="radio" checked="checked" /><label for="radio-5" class="ui-spacer-med">And</label>
                <input type="radio" id="radio-6" name="radio" /><label for="radio-6" class="ui-spacer-med">Or</label><br />
                <input type="input" value="Enter Y(s)" /><br />
            </form>
            <a href="#" id="example">example</a>
            <ol>
                <li> We should find an example to put here?</li>
                <li> Examples? </li>
                <li> Yes, perhaps 3 solid examples </li>
            </ol>
        </div>
        <span class="ui-corner-br ui-widget-header ui-widget-borderfix"></span>
    </div>
    <div class="addSubGroup ui-corner-all ui-widget-content">
        <a class="rg ui-icon ui-icon-circle-minus" title="Remove Sub Group">Remove Sub Group</a> <a class="ag ui-icon ui-icon-circle-plus" title="Add Sub Group">Add Sub Group</a>
    </div>
    <span class="sub-clause">
        <form class="ui-corner-all  ui-widget-content">
            <input type="radio" id="radio-7" name="radio" checked="checked" class="ui-spacer-med" /><label for="radio-7">And</label>
            <input type="radio" id="radio-8" name="radio" class="ui-spacer-med" /><label for="radio-8">Or</label>
            <input type="radio" id="radio-9" name="radio" class="ui-spacer-med" /><label for="radio-9">Not</label>
        </form>
    </span>
</div>

CSS

* { margin: 0; padding: 0; zoom: 0; }
body, html {font: .9em/1.1em HelveticaNeue, Helvetica, Arial, sans-serif;}


.addY,
.addX{ float: left; max-width: 370px; min-width: 218px; width: 43%; }
.addSubGroup { float: left; margin: -1em 0 0 80%;   padding: .25em .5em;    width: 2.5em; }
.ag, 
.rg { float: left;}

.centerCol { float: left; margin-top: 3.05em; max-width: 66px; min-width: 46px; }
.clause { border-left: 1px solid #fff; border-right: 1px solid #fff;    height: 210px;  margin: 0 auto; }

#example { margin-left: 1em; }
#example+ol { display: none; line-height: 1.5em; margin-left: 2.5em; }
.rightCol { float: right; height: 350px; margin: -1em 1% 2%; width: 73%; }
.sub-clause { display: none; float: left; margin: 2% 0 1% 5%;   text-align: center; width: 80%; }
.ui-widget-borderfix { display: inherit; height: 1.25em; }
h2 { color: #222; font: 2.2em/1em Georgia, serif; }
.rightCol h2 { margin: .5em 0 -.25em .45em; }
.innerContent { height: 210px; }
.ui-widget-content { background: #eee; color: #000000; }
.ui-widget { font-family: Arial,sans-serif; font-size: .8em; }
.ui-padding-med { padding: .5em; }
.tiny { font-size: .65em }

再次可以在这里找到一个实例:http://jsfiddle.net/KdFT7/

PS。

奖金,这个问题与我曾经问过的另一个问题没有得到确切的答案有关: Clone and update attributes

1 个答案:

答案 0 :(得分:2)

我只在Chrome,Firefox和IE8中对此进行了测试,但似乎有所帮助..

<强>要点: 我通过绝对定位它们从流中移除了h2,然后去除了由它们引起的高度差异..这样做:

制作addX, addY {position: relative;}以便定位的h2相对于他们

addXaddYcenterCol添加相等的上边距(足以将标题添加到其中)并且整个内容会清除所需内容

添加position: absolute h2并从中移除所有边距和填充,然后给它们一个负顶值,将它们弹出到您的框顶部。

副作用:.ui-widget-content还需要添加position: relative;才能重新定位addX,并添加Y div

Working Example