我一直working on a self-project使用可用的JSON数据复制reddit page for javascript。但我无法复制header section
中原始网站的行为,其中header
具有响应性(屏幕尺寸减小时的行为)。
GIF : how the original website header section works
问题:
divs
的背景为translucent
,因此文本背后的 也是如此显示的即可。想不出任何解决方案。GIF : my header (behind text seen)
navbar elements
超越。这不是原作中的原因,它们被more
和Login section
隐藏起来。我无法弄清楚如何在单行中使用它。GIF : my header (header elements move down)
一个较小的,类似的样本代码段:
.custom-header-full{
background: rgba(255,255,0,1);
}
/* Top */
.custom-top-header-container{
background: rgba(0,0,0,0.7); /* translucent */
position:absolute;
top:0;
width: 100%;
}
#top-right-div{
position: absolute;
right: 0;
z-index: 1000;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet"/>
<div class="navbar navbar-static-top custom-header-full">
<!-- TOPMOST header with Links and Login/Signup -->
<div class="navbar-header custom-top-header-container">
<!-- Left side with various links -->
<div id="top-left-div">
<a class="navbar-brand" href="#">MY SUBREDDITS ▼</a>
<a class="navbar-brand" href="#">POPULAR</a>
<a class="navbar-brand" href="#">ALL</a>
<a class="navbar-brand" href="#">RANDOM</a>
</div>
<!-- Login/Signup on the right -->
<div id="top-right-div">
<span class="navbar-brand">Want to join?
<a href="#">Log in or sign up</a>
in seconds |
<button class="glyphicon glyphicon-wrench tools-icon"></button>
</span>
</div>
</div>
</div>
如果您想查看full project, the link on Github。
要注意的一个有趣点:,标题中,左侧titles
与右侧section
重叠。因此,这是一个平滑的交易,其中可能的情况是,当重叠时,即使 部分文本也会在标题中看到 。基本上它不是要使标题元素在宽度上不可见,因为这会使整个title
不可见。
前:
答案 0 :(得分:10)
如果您能够使用CSS flexbox,我认为此解决方案可以按您希望的方式运行:
.custom-header-full{
background: rgba(255,255,0,1);
}
/* Top */
.custom-top-header-container{
background: rgba(0,0,0,0.7); /* translucent */
position:absolute;
top:0;
width: 100%;
display: flex;
}
#top-left-div {
flex: 1 1 0%;
overflow: hidden;
display: flex;
white-space: nowrap;
}
#top-right-div{
flex: 0 0 auto;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet"/>
<div class="navbar navbar-static-top custom-header-full">
<!-- TOPMOST header with Links and Login/Signup -->
<div class="navbar-header custom-top-header-container">
<!-- Left side with various links -->
<div id="top-left-div">
<a class="navbar-brand" href="#">MY SUBREDDITS ▼</a>
<a class="navbar-brand" href="#">POPULAR</a>
<a class="navbar-brand" href="#">ALL</a>
<a class="navbar-brand" href="#">RANDOM</a>
</div>
<!-- Login/Signup on the right -->
<div id="top-right-div">
<span class="navbar-brand">Want to join?
<a href="#">Log in or sign up</a>
in seconds |
<button class="glyphicon glyphicon-wrench tools-icon"></button>
</span>
</div>
</div>
</div>
我做了什么:
.custom-top-header-container
display:flex
以确保左右显示并排显示。#top-right-div
只占用其内容所需的空间(即不会增长或缩小)#top-left-div
填充容器中剩余的任何空间,并使用overflow:hidden
隐藏任何可能在小宽度上与#top-right-div
重叠的内容。#top-left-div
设置为white-space: nowrap
以防止带有空格的链接(例如“我的Subreddits”)在屏幕缩小得足够小时分成多行。答案 1 :(得分:5)
我设法实现了一个纯CSS解决方案,没有我认为你想要的flex
。
我将重点介绍我所做的一些改变(那些与问题没有直接关系并因此可能被忽视的改变):
.navbar
,.navbar-static-top
,.navbar-header
,.custom-header-full
和.custom-top-header-container
。如果您真的需要这些课程,请找到一种在您自己的时间覆盖行为的方法。如果证明太困难,我可以尝试提供帮助。text-transform: uppercase;
。如果在添加新的导航链接时碰巧入睡,这对将来真的有帮助。▼
)替换“▼”。现代浏览器通常不关心,但它仍然是很好的做法。这是最终结果的Fiddle。如果您有任何问题,请告诉我。
答案 2 :(得分:3)
我猜,有点黑客可以帮到你。尝试进行这些CSS更改:
#top-right-div {
position: absolute;
right: 0px;
z-index: 1000;
background: rgba(255,255,0,1);
}
并将background: rgba(0, 0, 0, 0.7);
添加到html中.navbar-brand
下的top-right-div
。
这会产生你想要达到的幻想。
.custom-header-full{
background: rgba(255,255,0,1);
}
/* Top */
.custom-top-header-container{
background: rgba(0,0,0,0.7); /* translucent */
position:absolute;
top:0;
width: 100%;
display: flex;
}
#top-left-div {
flex: 1 1 0%;
overflow: hidden;
display: flex;
white-space: nowrap;
}
#top-right-div{
flex: 0 0 auto;
background: rgba(255,255,0,1);
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet"/>
<div class="navbar navbar-static-top custom-header-full">
<!-- TOPMOST header with Links and Login/Signup -->
<div class="navbar-header custom-top-header-container">
<!-- Left side with various links -->
<div id="top-left-div">
<a class="navbar-brand" href="#">MY SUBREDDITS ▼</a>
<a class="navbar-brand" href="#">POPULAR</a>
<a class="navbar-brand" href="#">ALL</a>
<a class="navbar-brand" href="#">RANDOM</a>
</div>
<!-- Login/Signup on the right -->
<div id="top-right-div">
<span class="navbar-brand" style="background: rgba(0, 0, 0, 0.7);">Want to join?
<a href="#">Log in or sign up</a>
in seconds |
<button class="glyphicon glyphicon-wrench tools-icon"></button>
</span>
</div>
</div>
</div>
答案 3 :(得分:1)
对于重叠,你可以使用这种风格:
.custom-header-full{
background: rgba(255,255,0,1);
}
/* Top */
.custom-top-header-container{
background: rgba(0,0,0,0.7);
position:absolute;
top:0;
width: 100%;
}
#top-right-div {
width: 45%;
float: left;
}
#top-left-div {
display: inline-block;
width: 53%;
float: left;
}
赞:demo
和其他可以使用媒体查询的设备如:
@media (min-width:0px) and (max-width:799px) { add style }
根据设备写样式。
我觉得它对你很有帮助。
答案 4 :(得分:1)
处理拉伸问题。尝试使用响应选项检查网站
然后,当文本重叠或导航栏为两行高时,您可以知道屏幕的尺寸
最后,您可以添加媒体查询以创建与桌面网站的差异。如果是450px
@media only screen and (max-width: 450px) {
/* Add your css specification here. */
}