简体   繁体   English

在CSS / HTML中为不同的屏幕尺寸设置自动高度和宽度

[英]Set auto height and width in CSS/HTML for different screen sizes

I have 2 issues with this layout : 这个布局有2个问题

  1. .feature_content ( grey background ) adapt it's height and width to different screen sizes. .feature_content灰色背景 )可将其高度和宽度调整为不同的屏幕尺寸。 Right now, on big screens .feature_content is far from the footer. 目前,在大屏幕上.feature_content离页脚还很远。
  2. There is a horizontal scrollbar that I want to remove regardless to the screen size. 无论屏幕大小如何,都有一个要删除的水平滚动条。

I want to : adapt .feature_content to the remaining height and remove the horizontal scrollbar. 我想:.feature_content调整为其余高度,然后删除水平滚动条。

Here is a FIDDLE 这里是一个FIDDLE

And my code : 和我的代码:

HTML : HTML

<div id="container">
    <div id="header">Header added just for demonstration purposes</div>
    <div id="content">Your content goes here
        <div class="featured_content"></div>
    </div>
</div>
<div id="footer">Footer here</div>

CSS : CSS

* {
    padding: 0;
    margin: 0;
    border: 0;
    outline: 0;
}
body, html {
    width:100%;
    min-height: 100%;
}
div {
    height:100%;
    width:100%;
    border:5px solid black;
}
#header {
    background-color:orange;
}
#container {
    background:blue;
    margin: 0 auto;
    position: relative;
    height: auto !important;
}
#content {
    background:pink;
    padding-bottom: 100px;
    margin: 0 auto;
    position: relative;
}
#footer {
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.4);
    height: 70px;
    left: 0;
    position: fixed;
    z-index: 100000;
    background:green;
}
.featured_content {
    min-height: 750px;
    max-height: 750px;
    width:200px;
    background-color:grey;
    position:fixed;
    margin:auto 0px;
    margin-top: 150px;
}

This is what do you want? 这是你想要的吗? DEMO . 演示 Try to shrink the browser's window and you'll see that the elements will be ordered. 尝试缩小浏览器的窗口,您会看到元素将被排序。

What I used? 我用了什么? Flexible Box Model or Flexbox. 弹性盒型号或弹性盒。

Just add the follow CSS classes to your container element (in this case div#container ): 只需将以下CSS类添加到您的容器元素中(在本例中为div#container ):

flex-init-setup and flex-ppal-setup . flex-init-setupflex-ppal-setup

Where: 哪里:

  1. flex-init-setup means flexbox init setup ; flex-init-setup表示flexbox初始化设置 and
  2. flex-ppal-setup means flexbox principal setup flex-ppal-setup表示flexbox主体设置

Here are the CSS rules: 以下是CSS规则:

 .flex-init-setup {
     display: -webkit-box;
     display: -moz-box;
     display: -webkit-flex;
     display: -ms-flexbox;
     display: flex;
 }
 .flex-ppal-setup {
     -webkit-flex-flow: column wrap;
     -moz-flex-flow: column wrap;
     flex-flow: column wrap;
     -webkit-justify-content: center;
     -moz-justify-content: center;
     justify-content: center;
 }

Be good, Leonardo 好的,莱昂纳多

///UPDATED DEMO 2 WATCH SOLUTION//// ///更新了DEMO 2 WATCH解决方案/////

I hope that is the solution you're looking for! 我希望这是您正在寻找的解决方案! DEMO1 DEMO2 demo1的 DEMO2

With that solution the only scrollbar in the page is on your contents section in the middle! 使用该解决方案,页面中唯一的滚动条位于中间的内容部分! In that section build your structure with a sidebar or whatever you want! 在该部分中,使用边栏或您想要的任何东西构建结构!

You can do that with that code here: 您可以通过以下代码执行此操作:

<div class="navTop">
<h1>Title</h1>
    <nav>Dynamic menu</nav>
</div>
<div class="container">
    <section>THE CONTENTS GOES HERE</section>
</div>
<footer class="bottomFooter">
    Footer
</footer>

With that css: 使用该css:

.navTop{
width:100%;
border:1px solid black;
float:left;
}
.container{
width:100%;
float:left;
overflow:scroll;
}
.bottomFooter{
float:left;
border:1px solid black;
width:100%;
}

And a bit of jquery: 还有一点jquery:

$(document).ready(function() {
  function setHeight() {
    var top = $('.navTop').outerHeight();
    var bottom = $('footer').outerHeight();
    var totHeight = $(window).height();
    $('section').css({ 
      'height': totHeight - top - bottom + 'px'
    });
  }

  $(window).on('resize', function() { setHeight(); });
  setHeight();
});

DEMO 1 演示 1

If you don't want jquery 如果你不想要jQuery

<div class="row">
    <h1>Title</h1>
    <nav>NAV</nav>
</div>

<div class="row container">
    <div class="content">
        <div class="sidebar">
            SIDEBAR
        </div>
        <div class="contents">
            CONTENTS
        </div>
    </div>
    <footer>Footer</footer>
</div>

CSS 的CSS

*{
margin:0;padding:0;    
}
html,body{
height:100%;
width:100%;
}
body{
display:table;
}
.row{
width: 100%;
background: yellow;
display:table-row;
}
.container{
background: pink;
height:100%; 
}
.content {
display: block;
overflow:auto;
height:100%;
padding-bottom: 40px;
box-sizing: border-box;
}
footer{ 
position: fixed; 
bottom: 0; 
left: 0; 
background: yellow;
height: 40px;
line-height: 40px;
width: 100%;
text-align: center;
}
.sidebar{
float:left;
background:green;
height:100%;
width:10%;
}
.contents{
float:left;
background:red;
height:100%;
width:90%;
overflow:auto;
}

DEMO 2 演示 2

Using bootstrap with a little bit of customization, the following seems to work for me: 使用引导程序并进行一些自定义,以下内容似乎对我有用:

I need 3 partitions in my container and I tried this: 我的容器中需要3个分区,我尝试了以下方法:

CSS: CSS:

.row.content {height: 100%; width:100%; position: fixed; }
.sidenav {
  padding-top: 20px;
  border: 1px solid #cecece;
  height: 100%;
}
.midnav {
  padding: 0px;
}

HTML: HTML:

  <div class="container-fluid text-center"> 
    <div class="row content">
    <div class="col-md-2 sidenav text-left">Some content 1</div>
    <div class="col-md-9 midnav text-left">Some content 2</div>
    <div class="col-md-1 sidenav text-center">Some content 3</div>
    </div>
  </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM