如何使用CSS创建响应水平布局?

问题描述:

我工作的创意设计工作室喜欢打破范例和约定来创建独特的网站布局,最近我们已经开始开发水平网站布局。虽然水平网站布局看起来“很酷”,但我还没有弄清楚如何使它们像流动和响应一样,可以通过基于垂直网格的网站开箱即用。如何使用CSS创建响应水平布局?

通常,对于具有容器的垂直网站,您将在容器元素上具有基于百分比的宽度,然后设置最大宽度。使用响应式布局,您的内容可以无限滚动页面,它的宽度可能会有所不同,特别是如果内容是唯一的,并且公式目标/上下文* 100并不真正起作用(或者不是这样)。

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

供您参考布局类型的一个例子,我想创建:

enter image description here

+0

唯一的问题是,目前的网站我建立例如有,因为它使用水平砌筑插件使容器扩大和宽度的变化取决于具有不同宽度的内容块内容如何洗牌以及内容的大小。我不知道高度,因为它都是基于百分比的高度,所以没有真正的背景。我猜这不像我们的设计师那么容易;) – 2012-07-12 00:12:52

+0

是的,这是我们很多人的新领域,但我看到更多的 - 水平布局完全或水平宽广的部分根据用户操作或进度滚动到视图中。 – artlung 2012-07-12 00:40:40

+0

如果我今天要做这种布局,我会使用CSS灵活框模型。对于所有现代浏览器都支持的布局方法,Flex是非常强大的功能。 我在2012年使用了flexbox,因为我们后来的程序员弄得乱七八糟,所以没有诉诸JavaScript的复杂布局。当时这是一场赌博,因为这个标准还处于不断变化之中,但是它已经进入了最后的呼唤。即使没有支持使用以前的规格或浏览器,也可以使用一些优秀的polyfill。 – Thurstan 2016-04-22 02:38:43

您可以通过计算页面容器div的子元素.outerWidth并添加它们放在一起,并追加使用jQuery做到这一点页面或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'}); 
    } 
} 
+0

这就是我目前所做的,就像这样。这感觉很糟糕,考虑到水平布局开始获得更多的牵引力,你会认为有一个更好的方式来做出响应水平布局。谢谢你的回答,这很好。 – 2012-10-15 01:48:02

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

如果知道页面的确切宽度你可以做一个包装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计算完整宽度并将其应用于包装,并得到相同的结果。这应该适用于大多数需求。

+1

问题是如何在不知道宽度或高度的情况下制作水平布局响应?常规响应式网站是基于容器的网格,其中水平无宽度和高度根据浏览器而变化。我猜测,除非我使用会导致大量页面重绘的重JS,否则除了我们已经可以做的事之外,这是不可能的。 – 2012-07-12 04:21:43