2017-08-01 102 views
0

页面全屏显示时,一切正常,但如果我调整窗口大小,主视图会形成一个水平滚动条或位于左侧的导航栏下。我想要防止这种情况,并使其响应。如何正确定位元素

body { 
 
    height: 100%; 
 
    /* \t max-width: 100%; 
 
     overflow-x: hidden;*/ 
 
} 
 

 
a, 
 
a:hover { 
 
    color: black; 
 
    text-decoration: none; 
 
} 
 

 

 
/*Header */ 
 

 

 
/*============================*/ 
 

 
section .header { 
 
    height: 62px; 
 
    width: 100%; 
 
    background-color: #a5a0a0; 
 
    position: relative; 
 
    overflow: hidden; 
 
} 
 

 
.header h1 { 
 
    margin-top: 0px; 
 
    padding: .3em; 
 
    font-family: 'Lobster'; 
 
} 
 

 

 
/* \t Navigation Bar 
 
    ================================*/ 
 

 
section .nav-bar { 
 
    position: absolute; 
 
    width: 175px; 
 
    min-height: 100vw; 
 
    min-height: 900px; 
 
    background-color: #d4cccc; 
 
    float: left; 
 
} 
 

 
.nav-bar ul { 
 
    margin: 0; 
 
    padding: 0; 
 
    left: 0; 
 
    list-style: none; 
 
    width: 100% 
 
} 
 

 
.nav-bar ul li { 
 
    font-size: 20px; 
 
    padding: 10px; 
 
    padding-left: 25px; 
 
    width: 100%; 
 
} 
 

 
.nav-bar ul li:hover { 
 
    background-color: #8c8983; 
 
} 
 

 

 
/* \t Main Visual 
 
    ===================================*/ 
 

 
.main-visual { 
 
    margin-top: 10px; 
 
    margin-left: 195px; 
 
    width: 1100px; 
 
    padding: 10px; 
 
    display: inline; 
 
    position: absolute; 
 
    right: 25px; 
 
} 
 

 
.main-visual img { 
 
    width: 500px; 
 
}
<!-- Link bootstrap --> 
 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
 

 

 

 
<!-- Lobster font --> 
 
<link href="https://fonts.googleapis.com/css?family=Lobster" rel="stylesheet"> 
 

 

 
<section> 
 
    <header class="header container-fluid"> 
 
    <h1>Planes</h1> 
 
    </header> 
 
</section> 
 

 
<section> 
 
    <nav class="nav-bar"> 
 
    <ul> 
 
     <li><a href="#">Home</a></li> 
 
     <li><a href="#">Facts</a></li> 
 
     <li><a href="#">Category</a></li> 
 
    </ul> 
 
    </nav> 
 
</section> 
 

 
<div class="main-visual container-fluid panel panel-default"> 
 

 
    <img src="http://via.placeholder.com/500x200" class="img-responsive"> 
 

 
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin venenatis venenatis odio, vitae efficitur risus. Nunc ornare tristique est sit amet aliquet. Vestibulum id erat nec enim fermentum dignissim. Suspendisse suscipit eu mi sit amet pulvinar. 
 
    Quisque porttitor arcu quis hendrerit hendrerit. Quisque ac tincidunt neque. Vestibulum consectetur eros id finibus porta. Pellentesque convallis sagittis tortor, ac gravida erat aliquam nec. Pellentesque quis elit id ipsum tempus sagittis. Quisque 
 
    venenatis, velit eget blandit ornare, eros justo tincidunt tellus, at eleifend nibh dui et ante. Aenean pharetra feugiat libero, et laoreet lacus feugiat quis. Vestibulum ac imperdiet mi. Nunc consectetur diam erat, vel tempus eros eleifend ut. Nam 
 
    elementum libero at sapien dignissim, sed bibendum enim commodo. Morbi vulputate, odio in semper maximus, mi lorem consectetur nisl, vitae fringilla magna lorem tristique est. Nulla nec rhoncus nibh, at laoreet magna.</p> 
 

 
</div>

Codepen:https://codepen.io/etasbasi/pen/rzLVeJ

而且也使导航栏总是完全覆盖左侧窗格中,根据主视觉的高度。

谢谢:)

回答

0

你不应该使用绝对positionning建设布局,直到各位高手(一对夫妇一个月的母校):

  • 显示(inline-block的,表,表-cell,flex,最终电网,...)
  • 浮动布局。

似乎只在第一次使用起来非常简单position:absolute;,但其目的不是为了建立一个完整的布局..

你可以给使用float启动(可奇也see this tutorial),其将保持您的元素在流程中。

要绘制列,您可以使用faux-column method(这里有古老但固体)。

body { 
 
    height: 100%; 
 
    /* \t max-width: 100%; 
 
     overflow-x: hidden;*/ 
 
     /* background about : https://alistapart.com/article/fauxcolumns */ 
 
    background: linear-gradient(to right, #d4cccc 175px, transparent 170px) 
 
} 
 

 
a, 
 
a:hover { 
 
    color: black; 
 
    text-decoration: none; 
 
} 
 

 

 
/*Header */ 
 

 

 
/*============================*/ 
 

 
section .header { 
 
    height: 62px; 
 
    width: 100%; 
 
    background-color: #a5a0a0; 
 
    position: relative; 
 
    overflow: hidden; 
 
} 
 

 
.header h1 { 
 
    margin-top: 0px; 
 
    padding: .3em; 
 
    font-family: 'Lobster'; 
 
} 
 

 

 
/* \t Navigation Bar 
 
    ================================*/ 
 

 
section .nav-bar { 
 
    float: left; 
 
    width: 175px; 
 
    margin-right: 10px; 
 
} 
 

 
.nav-bar ul { 
 
    margin: 0; 
 
    padding: 0; 
 
    left: 0; 
 
    list-style: none; 
 
    width: 100% 
 
} 
 

 
.nav-bar ul li { 
 
    font-size: 20px; 
 
    padding: 10px; 
 
    padding-left: 25px; 
 
} 
 

 
.nav-bar ul li:hover { 
 
    background-color: #8c8983; 
 
} 
 

 

 
/* \t Main Visual 
 
    ===================================*/ 
 

 
.main-visual { 
 
    margin: 10px; 
 
    overflow: hidden; 
 
    padding: 10px; 
 
} 
 

 
.main-visual img { 
 
    width: 500px; 
 
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> 
 
<section> 
 
    <header class="header container-fluid"> 
 
    <h1>Planes</h1> 
 
    </header> 
 
</section> 
 

 
<section> 
 
    <nav class="nav-bar"> 
 
    <ul> 
 
     <li><a href="#">Home</a></li> 
 
     <li><a href="#">Facts</a></li> 
 
     <li><a href="#">Category</a></li> 
 
    </ul> 
 
    </nav> 
 
</section> 
 

 
<div class="main-visual container-fluid panel panel-default"> 
 

 
    <img src="http://via.placeholder.com/500x200" class="img-responsive"> 
 

 
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin venenatis venenatis odio, vitae efficitur risus. Nunc ornare tristique est sit amet aliquet. Vestibulum id erat nec enim fermentum dignissim. Suspendisse suscipit eu mi sit amet pulvinar. 
 
    Quisque porttitor arcu quis hendrerit hendrerit. Quisque ac tincidunt neque. Vestibulum consectetur eros id finibus porta. Pellentesque convallis sagittis tortor, ac gravida erat aliquam nec. Pellentesque quis elit id ipsum tempus sagittis. Quisque 
 
    venenatis, velit eget blandit ornare, eros justo tincidunt tellus, at eleifend nibh dui et ante. Aenean pharetra feugiat libero, et laoreet lacus feugiat quis. Vestibulum ac imperdiet mi. Nunc consectetur diam erat, vel tempus eros eleifend ut. Nam 
 
    elementum libero at sapien dignissim, sed bibendum enim commodo. Morbi vulputate, odio in semper maximus, mi lorem consectetur nisl, vitae fringilla magna lorem tristique est. Nulla nec rhoncus nibh, at laoreet magna.</p> 
 
</div>

块一旁,如果你介意block formating context的浮动并不需要的宽度,也没有保证金设定(溢出用在这里的snipppet

+0

谢谢,这个作品完美。我有两个问题:在这段代码中,导航栏是否占据了网页的全长?什么样的代码使主视觉响应,或者是它的默认行为? –

0

如果你有一个已定义的宽度集(对于.main-visual来说为1100px),在您调整页面大小时将保持固定,从而导致它在前面提到的屏幕左侧溢出。有几件事情可以解决这个问题:

  1. 设置会导致元素根据浏览器宽度更改的百分比宽度。因此,width:80%会导致元素占用其父元素的宽度的80%,这是本例中的主体。

  2. 使用max-width属性而不是设置宽度。这意味着随着浏览器页面变大,元素将随着它的增长而增长,直到达到最大宽度。我也建议你添加一些填充:0 10px;所以文本不会使用这种方法流到屏幕的边缘。