2014-09-05 63 views
0

我已到處尋找這個特定問題的答案,但沒有發現任何用處。我試圖在Vaadin中創建一個非常簡單的佈局,這在許多網站(包括這一個)上都很常見。我已經包含了這個問題的圖表。基本上需要一個頁腳始終保持放在主要部分之後,如果主要部分很大,滾動條將出現並允許我滾動到底部。如果內容很小,頁腳通常會在主要部分之後出現。如果瀏覽器窗口很小,頁腳將不會與主要部分重疊(這是我卡住的地方)。我試過這麼多方法,但似乎沒有任何工作100%...我想避免與CSS文件搞亂(如果可以的話),只使用Java ... 謝謝!基本標題 - 中心 - 頁腳佈局Vaadin

https://vaadin.com/documents/portlet_file_entry/10187/layout.JPG/7a978ae7-f926-472d-b1a1-d0aa3f2c3536

回答

0

我已經返工我的代碼,並使用具有動態內容和頁腳標籤頁的念頭放棄了。相反,我正在使用一個簡單的菜單,並且我已經將組件層次顯着展平,現在一切似乎都按預期工作。

0

我喜歡爲此使用絕對位置。這裏是JSFIDDLE:http://jsfiddle.net/upau942y/您可以使用margin-top在頁腳和網站內容之間創建空隙。

<footer> 
    <div class="footer-content"> 
     <div class="footer-left"> 
      <p>some content</p> 
      <p>Thank you for viewing the site!</p> 
     </div> 
    </div> 
</footer> 

Footer { 
    position: absolute; 
    left: 0; 
    bottom: 0; 
    width: 100%; 
    background: #000; 
    margin-top: 2rem; 
} 
+0

JSFIDDLE是非常酷:)所以我不得不亂搞HTML和CSS ...沒有Vaadin具體的方式? – Matt 2014-09-06 03:11:22

+0

我不知道Vaadin,我上面寫的代碼將在任何框架上工作,並且很容易實現。希望能幫助到你。 – Bojan 2014-09-06 22:16:20

+0

在vaadin你編碼在java中的一切 – d2k2 2014-09-08 07:53:53

1

例如,當,(注意代碼的註釋,我不知道如果你想要一個絕對的或固定的佈局)

public class BoxApp extends UI { 

    HorizontalLayout head = new HorizontalLayout(); 
    Panel main = new Panel(); 
    HorizontalLayout footer = new HorizontalLayout(); 

    @Override 
    protected void init(VaadinRequest request) { 
     main.setStyleName(Reindeer.PANEL_LIGHT); 
     head.addComponent(new Label("head")); 
     main.setContent(new Label("<pre>MAIN START\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\\n" + 
      "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + 
      "\n\n\n\n\n\n\n\n\nMAIN END</pre>", ContentMode.HTML)); 
     footer.addComponent(new Label("footer")); 

     VerticalLayout form = new VerticalLayout(); 
     form.setMargin(false); 
     form.setSpacing(false); 
     head.setHeight(50, Unit.PIXELS); 
     form.addComponent(head); 
     form.setExpandRatio(head, 0); 
     main.setHeight(100, Unit.PERCENTAGE); 
     form.addComponent(main); 
     form.setExpandRatio(main, 10); 
     footer.setHeight(50, Unit.PIXELS); 
     form.addComponent(footer); 
     form.setExpandRatio(footer, 0); 
     // Drop following line if you don't want a fixed layout 
     form.setSizeFull(); 

     this.setContent(form); 
    } 
} 

使用JDALBoxFormBuilder(我寫的)的語法建設的根組件是一個更清晰一點

BoxFormBuilder fb = new BoxFormBuilder(); 
fb.setDefaultWidth(BoxFormBuilder.SIZE_FULL); 
fb.row(50);        // new row for head 
fb.add(head); 
fb.row(BoxFormBuilder.SIZE_FULL);  // new row for main, full height 
fb.add(main); 
fb.row(50);        // new row for footer 
fb.add(footer); 

Component form = fb.getForm();   // Build the component. 
+0

非常感謝你,我的主要問題是在我的情況下主要是Horizo​​ntalLayout。使用main作爲面板並在該面板內添加Horizo​​ntalLayout效果很好。謝謝:) – Matt 2014-10-03 02:56:49

+0

經過多次測試後,這不是我所期待的(它非常接近)。我正在尋找這樣的東西,http://www.templateaccess.com/demos/kaleidoscope-html/簡單的表格網站。現在,如果主要部分太大,我會爲該部分獲得一個滾動條(並且頁腳始終處於完整大小)。 – Matt 2014-10-03 03:03:25

+0

我有一個在主要部分中具有可變大小的組件的標籤頁,最終發生的是標籤頁被繪製並且頁腳組件最終與標籤頁重疊。 – Matt 2014-10-03 07:11:02

0

這應做到:

mainVLayout.setSizeFull(); 

mainVLayout.addComponent(headerComponent); 
mainVLayout.addComponent(contentPanel); 
mainVLayout.addComponent(footerComponent); 

mainVLayout.setExpandRatio(contentPanel, 1);//this is the key. 
+0

有趣的是,您不是使用佈局,而是使用所有三個部分的組件。我會給這個鏡頭... – Matt 2014-10-03 03:09:29

+0

所以這個解決方案几乎就在那裏,問題在於,在這種情況下,contentPanel可以顯着擴展,所以如果你有一個大屏幕和小內容,你會得到大量的空白。但我想這是正常的所有網站,我只需要添加很多內容... – Matt 2014-10-03 03:52:41

+0

這似乎是我卡住了...對我來說,最大的問題是,contentPanel需要持有一個標籤頁與組件大小可變。結果發生的是標籤頁最終被填充並且頁腳與標籤頁重疊,而不是被添加到下面。 – Matt 2014-10-03 07:08:45