【问题标题】:Aligning Columns while Sizing Rows在调整行大小时对齐列
【发布时间】:2017-01-17 06:29:42
【问题描述】:

我有两页,一页是用 div 和 CSS 制作的,一页是用臭名昭著的 table 制作的。

The CSS Page...

...and the Table page.

乍一看,它们非常相似。两者都有一个 2x2 的圆形“按钮”网格,它们会根据它们周围的窗口调整大小。

现在,把它放在手机的上下文中。没错,缩小结果框(水平方向,不用担心垂直方向)。

最初,我只有 CSS 版本,但是有特定的浏览器宽度,其中左侧的文本下降到两行,而右侧的文本保持在一行,因为字符串的长度不同。碰巧的是,对于实际的字符串,大多数电话分辨率都会导致这种烦人的情况发生。

但是,可以预见,该表会按照我想要的方式运行。该表具有“行”和“列”的概念,因此列保持对齐,并且一行中的单元格变得更高,其余的也是如此。

有没有办法在 CSS 中模仿这种行为?我经常被告知表格在可访问性等方面有多糟糕。我喜欢将<table> 保留为实际的数据表格,而不是布局。

我知道相邻选择器,但我找不到办法说“使您的最小高度与我的高度相同,反之亦然”。

另外,显然这可以通过脚本来完成。但是除非这里有人对这个问题有热情的感觉,javascript > CSS && javascript > Table,否则让我们坚持使用 CSS。

【问题讨论】:

    标签: html css accessibility tablelayout


    【解决方案1】:

    今天每个理智的浏览器都应该支持display: table/table-row/table-cell/... 属性,它将您的 div 转换为一个漂亮的表格,但不接触 html 标记。

    这是您转换后的代码:

    http://jsfiddle.net/eU6Xe/5/

    HTML:

    <div id="main">
        <div class="row">
            <div class="button">
                Some text here
            </div>
    
            <div class="button">
                And more text here
            </div>
        </div>
    
        <div class="row">
            <div class="button">
                More Text
            </div>
    
            <div class="button">
                Lots of text here
            </div>
        </div>
    </div>
    

    ​CSS:

    div #main {
        display: table;
        width: 100%;
    }
    
    div.row {
        display: table-row;
    }
    
    div.button {
        display: table-cell;
    }
    
    ​
    

    【讨论】:

    • +1 并且对于 OP,您仍然可以访问表的两种布局算法(有或没有 table-layout: fixed;)。编辑:您可以或必须在其他情况下使用vertical-align: top;,例如内容对齐在顶部而不是基线或底部的列:)
    • 谢谢!它有效,但仅适用于小提琴中使用的 CSS,而不适用于上面写的内容。关键的区别似乎不是div.row{ display: table-row; } 而是div #main &gt; div {display: table-row; } 我会更新你的答案。出于好奇,为什么?
    • 我只是展示了一些其他选择器的可能性,如果您不想将类放在 html 中的所有内容中。 (实际上,我不记得我做了什么/为什么做 :)
    【解决方案2】:

    说实话,这两个版本都无法访问,而且使用起来同样烦人。

    首先:您为什么不使用&lt;button&gt;s 或&lt;input type="button"&gt;

    这两个演示在语义上都不正确。除了保存数据之外,表并不意味着做任何事情。应该使用一个按钮来提交/取消/清除表格。 &lt;div&gt; 是你放在垃圾抽屉里的whatchamacallit,你在万不得已时使用。

    表格法

    没有办法使表格可访问。它将始终被视为一张表,但由于使用不正确,因此需要使用presentationWAI-ARIA 角色。然而,这将告诉辅助技术忽略它是一个表格的事实,从而将单词组合在一起。使单元格可点击的唯一方法是通过 onClick,它可能会根据 AT 和您构建 onClick 的方式自动触发。因此不允许人越过它,因为他们不知道这是一张桌子,所以他们不能跳过它。

    CSS 方法

    首先,&lt;h2&gt; 元素使用不正确。 &lt;h2&gt; 用于表示页面的部分,它们构成页面层次结构,按钮成为层次结构的一部分几乎没有意义。接下来,&lt;div&gt; 默认不接收焦点。第三,如果您将 onClick 附加到 &lt;div&gt;,您会遇到与上述相同的问题。

    使用 ARIA,您可以使 &lt;div&gt;s 像按钮一样,但您的代码变为:

    <div class="left-col">
     <div class="button" tabindex="-1" role="button">
      Some text here
     </div>
     <div class="button" tabindex="-1" role="button">
      And more text here
     </div>
    </div>
    

    <input type="button" value="some text here" />
    

    【讨论】:

    • 我很欣赏这种洞察力,但是 A) 这实际上并没有回答我原来的问题,并且 B) 我的代码 sn-p 是 very 脱离上下文的。比如&lt;h2&gt;下面有内容,感觉顺理成章。您会在我的另一个 jsfiddle 中注意到,我记得删除了此示例的这些标签。其次,这是使用 Phonegap 将其呈现为本机手机应用程序,因此一些常见问题并不完全适用。一个大的、块状的 watchamacallit 触摸似乎非常适合应用程序,但也许我应该尝试为按钮设置样式。
    • +1 设置按钮样式。这是&lt;input type="button" src="..." alt="..." /&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 2016-01-03
    • 2015-07-02
    • 2013-08-30
    • 1970-01-01
    • 2012-04-23
    相关资源
    最近更新 更多