【问题标题】:How To Create A Responsive Horizontal Layout Using CSS?如何使用 CSS 创建响应式水平布局?
【发布时间】:2012-07-12 00:00:00
【问题描述】:

我在一家创意设计工作室工作,我喜欢打破范式和惯例来创建独特的网站布局,最近我们开始开发横向网站布局。虽然水平网站布局看起来“很酷”,但我还没有弄清楚如何让它们像开箱即用的基于垂直网格的网站一样流畅和响应迅速。

通常,对于带有容器的垂直网站,您会在容器元素上设置一个基于百分比的宽度,然后设置一个最大宽度。使用响应式布局,您的内容会无限滚动到页面外,它的宽度可能会有所不同,特别是如果内容是唯一的,因此公式 target/context * 100 并不起作用(或者确实如此?)。

也许有一种方法可以在元素上设置响应式高度、填充和边距,使其像基于网格的响应式网站一样工作。我不介意必须使用 Javascript,但 CSS 修复将是理想的。

我正在尝试创建的布局类型示例供您参考:

【问题讨论】:

  • 唯一的问题是,例如,我正在构建的当前站点有一个宽度不同的内容块,因为它使用水平砌体插件,因此容器根据内容的方式扩展和宽度变化被洗牌和内容的大小。我也不知道高度,因为它都是基于百分比的高度,所以没有真正的上下文。我猜这并不像我们的设计师想象的那么容易;)
  • 是的,这对我们很多人来说是一个新领域,但我看到的更多——完全水平布局,或具有根据用户操作或进度滚动到视图中的宽水平内容的部分。
  • 如果我今天要做这种布局,我会使用 CSS 灵活框模型。 Flex 是一种非常强大的布局方法,所有现代浏览器都支持。我在 2012 年使用 flexbox 进行复杂的布局,而没有使用 javascript,因为我们当时的程序员把布局弄得一团糟。这在当时有点赌博,因为标准仍在不断变化,但它已经进入了最后一次通话。即使使用以前的规范或没有支持的浏览器,也有一些很棒的 polyfill 可供使用。

标签: html css horizontal-scrolling


【解决方案1】:

您可以使用 jQuery 通过计算页面容器 div 的子元素 .outerWidth 并将它们全部加在一起并将其附加到页面或 div 的 .css('width') 来完成此操作

HTML 结构:

<div id="main">
    <div><img src="#" /></div>
    <div><img src="#" /></div>
    <div><img src="#" /></div>
</div>

编辑:我忘了添加 css,但这里的重点是您希望 #main 的子 div 向左浮动。

Javascript:

function() {
        var window_width = jQuery(window).width(),
            container = jQuery('#main'),
            page_width = 0;

        // Grab every child element of the "main" container
        container.children().each(function(index){
            var incl_margin = true,
                $this = jQuery(this);

            // Check if each child element has a margin-left or margin-right
            if ( parseInt($this.css('margin-left')) < 0 || parseInt($this.css('margin-right')) < 0 ) {
                var incl_margin = false;
            }

            // Get element's width including margins (if they exist from above)
            var width = $this.outerWidth(incl_margin);
            page_width += width;

        });

        // Add total width of containers elements as the containers width
        if(page_width > 0)
            container.css({'width' : page_width + 'px'});
    }
}

【讨论】:

  • 这就是我目前所做的,就像这样。感觉很hackish,考虑到水平布局开始获得更大的吸引力,你会认为会有更好的方法来制作响应式水平布局。谢谢你的回答,太好了。
【解决方案2】:

有很多方法可以做到这一点。

如果您知道页面的确切宽度,您可以制作一个包装器 div,设置全宽,然后像这样在包装器内并排浮动您的内容 div:

<div style="width: 2500px; border: red solid 1px;">
  <div style="width: 500px; float: left;">Content</div>
  <div style="width: 500px; float: left;">Content</div>
  <div style="width: 500px; float: left;">Content</div>
  <div style="width: 500px; float: left;">Content</div>
  <div style="width: 500px; float: left;">Content</div>
</div>

如果您知道确切的宽度,这是最简单的解决方案。

如果宽度未知或变化,您可以使用 JavaScript 计算整个宽度并将其应用于包装器,结果相同。这应该可以满足大多数需求。

【讨论】:

  • 问题是如何在不知道宽度或高度的情况下使水平布局响应?传统的响应式网站是基于网格的容器,其中水平没有宽度,高度因浏览器而异。我猜除非我使用会导致大量页面重绘的重型 JS,否则除了我们已经可以做的事情之外,这实际上是不可能的。
猜你喜欢
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 2019-08-24
相关资源
最近更新 更多