水平列表的响应分隔符 [英] Responsive Separator for Horizontal List
问题描述
该问题通过询问如何删除 导航分离器展开。换行符由视口大小引起。
This question expands upon 'Separators For Navigation' by asking, how it is possible to remove the separators at the line breaks cause by viewport size.
-> Item 1 | Item 2 | Item 3 | Item 4 | Item 5 <-
小视口
Small Viewport
-> Item 1 | Item 2 | Item 3 <-
-> Item 4 | Item 5 <-
此处是一个小提琴,显示了管道如何保持在换行处:
Here is a fiddle that shows how a pipe remains at the line break:
小提琴。
我对仅使用CSS的解决方案感兴趣,但是如果javascript提供了唯一可行的解决方案,则可以接受。
I'm interested in a css-only solution, but javascript is acceptable if it provides the only possible solution.
推荐答案
您可以利用以下事实:尾随和行尾空白会自动折叠: https:// jsfiddle .net / vnudrsh6 / 7 /
You can exploit fact that trailing and line trailing white space automatically collapses: https://jsfiddle.net/vnudrsh6/7/
nav {
text-align: center;
padding-right: 1em; /* = li::after@word-spacing */
}
ul {
display: inline;
margin: 0;
padding: 0;
}
li {
display: inline;
/*
white-space: nowrap should be moved to child A
because IE fails to wrap resulting list completely
*/
}
li::before {
content: ' ';
/*
this content is important only for Chrome in case
the HTML will be minified with *no whitespaces* between </li><li>
*/
}
li::after {
content: ' ';
/*
this is actual placeholder for background-image
and it really must be space (or tab)
*/
white-space: normal;
word-spacing: 1em;
/*
= nav@padding-right - this actually makes width
*/
background-image: radial-gradient(circle, black, black 7%, transparent 15%, transparent 35%, black 45%, black 48%, transparent 55%);
background-size: 1em 1em;
background-repeat: no-repeat;
background-position: center center;
opacity: 0.5;
}
/*
no need to unset content of li:last-child::after
because last (trailing) space collapses anyway
*/
a {
white-space: nowrap;
display: inline-block; /* for padding */
padding: 1em;
text-decoration: none;
color: black;
transition-property: background-color;
transition-duration: 500ms;
}
a:hover {
background-color: #ccc;
}
/*
For demonstrative purposes only
Give items some content and uneven width
*/
nav:hover > ul > li {
outline: 3px dotted rgba(0,0,255,.5);
}
nav:hover > ul > li::after {
opacity: 1;
background-color: rgba(255, 0, 0, .5);
}
nav:hover > ul > li > a {
outline: 3px solid rgba(0,255,0,.5);
outline-offset: -3px;
}
nav > ul {
counter-reset: c;
}
nav > ul > li {
counter-increment: c;
}
nav > ul > li > a::before {
content: counter(c, upper-roman) '. ';
letter-spacing: .3em;
}
nav > ul > li > a::after {
content: ' item ' counter(c, lower-roman);
word-spacing: .3em;
letter-spacing: .1em;
transform: translatex(.1em);
display: inline-block;
}
<nav>
<ul><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li><li><a href="#"></a></li>
</ul>
</nav>
<!-- For demonstrative purposes is content of links made by CSS
-->
此概念验证使用最终消失的背景图像, CSS在每个< li>
之后生成内容 space 。在当前的Firefox,Chrome和IE11中进行了测试。
This proof-of-concept uses background-image of "eventually colapsing" CSS generated content space after each <li>
. Tested in current Firefox, Chrome and IE11.
这篇关于水平列表的响应分隔符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!