带有垂直文本的固定栏

时间:2014-01-02 18:58:46

标签: css css-position css-transforms

所以,我有一个我无法弄清楚的有趣问题。

我正在尝试制作一个垂直条的菜单,窗口的所有100%高度。他们有固定的位置。我希望文本是垂直的。请检查我做的草图:

enter image description here

这是JSFiddle

HTML结构如下所示:

<header>
    header
</header>

<nav>
    <ul>
        <li><a href="#">bar 1</a></li>
        <li><a href="#">bar 2</a></li>
        <li><a href="#">bar 3</a></li>
        <li><a href="#">bar 4</a></li>
    </ul>
</nav>

这样的CSS:

header {
    position: fixed;
    top: 0;
    bottom: 0;
    left: 0;
    width: 250px;
    padding: 20px;
    background: rgb(42,42,42);
    background: rgba(10,10,10,0.95);
}
nav {
    position: fixed;
    left: 300px;
    width: 100%;
    margin-left: -50%;
    top: 50%;
    height: 75px;

    -webkit-transform: rotate(-90deg);
    -moz-transform: rotate(-90deg);
    -ms-transform: rotate(-90deg);
    -o-transform: rotate(-90deg);
    transform: rotate(-90deg);

    -webkit-transform-origin: 50% 50%;
    -moz-transform-origin: 50% 50%;
    -ms-transform-origin: 50% 50%;
    -o-transform-origin: 50% 50%;
    transform-origin: 50% 50%;

    filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
    background: blue;
    border: 2px solid red;
}
nav ul {
    margin: 0;
    padding: 0;
    list-style: none;
    width: 100%;
}
nav ul li {
    width: 100%;
}
nav ul li a {
    display: block;
    width: 100%;
    height: 32px;
    background: #f3b200;
}
nav ul li:nth-child(1) a { background: #c61c05; }
nav ul li:nth-child(2) a { background: #dc572e; }
nav ul li:nth-child(3) a { background: #d27b26; }
nav ul li:nth-child(4) a { background: #f3b200; }

现在的问题是我无法弄清楚如何定位nav就像我想要的那样。我给出的每个测量值(宽度,高度,顶部位置,左侧位置)都是基于0度旋转给出的。之后进行旋转。

因此,高度不是视口高度的100%,而是100%视口宽度。

我还尝试转动ul内的nav及其中的li,但无法确定定位此nav栏的正确方法。

我正在寻找纯CSS解决方案。

2 个答案:

答案 0 :(得分:0)

这看起来如何?

html

<div class="mainWrap">
    <header class="mainBody">

    </header>
    <nav>
        <ul>
            <li class="sBar s-1"><span class="rot">Bar 1</span></li>
            <li class="sBar s-2"><span class="rot">Bar 2</span></li>
            <li class="sBar s-3"><span class="rot">Bar 3</span></li>
            <li class="sBar s-4"><span class="rot">Bar 4</span></li>
        </ul>
    </nav>
</div>

css

html, body {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
}

body {
    border: 4px solid red;
}

* {
    box-sizing: border-box;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
}

ul {
    list-style-type: none;
    margin: 0;
    padding: 0;
}

.mainWrap, .mainWrap nav, .mainWrap ul {
    width: 100%;
    height: 100%;
}

.mainWrap li, .mainWrap header {
    float: left;
}

.mainBody {
    width: 40%;
    height: 100%;
    background: #2b2b2b;
}

.sBar {
    width: 50px;
    height: 100%;
    padding-top: 30px;
    display: block;
}

.s-1 {
    background: #c61c05;
}

.s-2 {
    background: #dc572e;
}

.s-3 {
    background: #d27b26;
}

.s-4 {
    background: #f3b200;
}

.rot {
    -webkit-transform: rotate(-90deg);
    display: block;
}

小提琴:Remove "show" in url to view and alter code

答案 1 :(得分:0)

如果我认为您希望所有内容都是页面高度的100%,请使用页面流而不是更改position。将导航浮动到标题旁边,依此类推。然后,您可以在链接中旋转一些<span>而不是整个内容。这是一个改动。我会把剩下的留给你了:

<强> HTML

<header>header</header>
<ul>
    <li><a href="#"><span>bar 1</span></a></li>
    <li><a href="#"><span>bar 2</span></a></li>
    <li><a href="#"><span>bar 3</span></a></li>
    <li><a href="#"><span>bar 4</span></a></li>
</ul>
<div class="other">Loads of other content</div>

<强> CSS

html, body {
    margin:0;
    padding:0;
    height:100%;
}
header {
    float:left;
    height:100%;
    width: 250px;
    background: rgb(42, 42, 42);
    background: rgba(10, 10, 10, 0.95);
}
ul{
    float:left;
    display:block;
    margin:0;
    padding:0;
    height:100%;
}
ul li{
    display:block;
    margin:0;
    padding:0;
    float:left;
    height:100%;
}

ul li a{
    display:block;
    height:100%;
}

ul li a span{
    position:relative;
    top:20px;
    color:#FFF;
    display:block;
    -webkit-transform: rotate(-90deg);
    -moz-transform: rotate(-90deg);
    -ms-transform: rotate(-90deg);
    -o-transform: rotate(-90deg);
    transform: rotate(-90deg);
    font-size:26px;
    width:60px;
    direction: rtl;
    white-space: nowrap;
}

JSFiddle