我正在使用ZURB Foundation框架进行响应式布局。
我在导航栏上的文本旁边添加了一些图标(图标字体跨度),这就是我想要发生的事情:
当视口不够宽以在一行上显示所有导航项时,应隐藏仅将级联到下一行的项的文本标签,并且该项的字体大小(图标大小)应增加到一个新的固定值。
我附上了 3 张图片(我刚刚被 chrome 检查员欺骗)来展示我在寻找什么。
如果没有 JavaScript,这可能吗?如果是这样,怎么做?
我正在使用ZURB Foundation框架进行响应式布局。
我在导航栏上的文本旁边添加了一些图标(图标字体跨度),这就是我想要发生的事情:
当视口不够宽以在一行上显示所有导航项时,应隐藏仅将级联到下一行的项的文本标签,并且该项的字体大小(图标大小)应增加到一个新的固定值。
我附上了 3 张图片(我刚刚被 chrome 检查员欺骗)来展示我在寻找什么。
如果没有 JavaScript,这可能吗?如果是这样,怎么做?
所以...
这是 W3C 建议的隐藏部分链接文本的解决方案:
height: 1px;
width: 1px;
position: absolute;
overflow: hidden;
top: -10px;
假设您要使用以下 HTML 代码:
<li><a href="#">Documentation</a></li>
如果您想要(例如)30px => 50px 转换,这是一个解决方案:
li {
padding-left : 30px;
line-height : 30px; /* vertical align */
background : transparent url(http://placehold.it/30) no-repeat scroll 0 0;
}
/* Put whatever you want as a size here */
@media (max-width: 600px) {
li {
background : transparent url(http://placehold.it/50) no-repeat scroll 0 0;
width : 50px;
height : 50px;
}
a {
height : 1px;
width : 1px;
position : absolute;
overflow : hidden;
top : -1000px;
}
}
此解决方案强制您为图像创建 2 个版本。但实际上不建议调整图像大小,因此处理一张图像的 2 个版本并不是一个坏主意。
在您的特定情况下,如果您使用字体图标,您可能会使用这种 HTML 代码:
<li>
<a href="#">
<span class="icon">X</span>
<span class="text">Documentation</span>
</a>
</li>
所以你可以这样调整 CSS 代码:
span {
font-size : medium;
}
@media (max-width: 600px) {
span.icon {
font-size : x-large;
}
span.text {
height : 1px;
width : 1px;
position : absolute;
overflow : hidden;
top : -1000px;
}
}
试试这样的东西?
CSS:
@media (max-width: 320px)
.noshow {
display: none;
}
在您的 HTML 标记中,将“noshow”类应用于您要隐藏的文本。
我通过迭代Charles-Edouard Coste的答案找到了解决方案。我正在使用Sass,但我将首先显示它的 CSS 输出:
nav .nav-bar .icon {
font-size: 24px;
padding-right: 4px;
}
@media only screen and (max-width: 700px) {
nav .nav-bar li:nth-child(1) .icon-label {
display: none;
}
}
@media only screen and (max-width: 800px) {
nav .nav-bar li:nth-child(2) .icon-label {
display: none;
}
}
@media only screen and (max-width: 900px) {
nav .nav-bar li:nth-child(3) .icon-label {
display: none;
}
}
@media only screen and (max-width: 1000px) {
nav .nav-bar li:nth-child(4) .icon-label {
display: none;
}
}
@media only screen and (max-width: 1100px) {
nav .nav-bar li:nth-child(5) .icon-label {
display: none;
}
}
该解决方案可以在每减少一百像素时隐藏一个标签。不幸的是,它要求列表中的每个元素都有一个新规则,因此它要求样式表要么
我选择创建一个Sass mixin以供重用并使源代码不那么冗长。
@mixin iconlist( $min-width, $label-selector, $step: 100px, $count: 5 )
//
The iconlist() mixin will responsively hide labels,
starting from the last, as the viewport width is decreased.
This can be included in a horizontal list to show only icons
on small screens, while still displaying as many labels as
possible, assuming items are prioritized from most important
to least.
@for $i from 1 through $count
$max-width: $min-width + ( $step * $i )
@media only screen and (max-width: #{$max-width})
li:nth-child(#{$i})
#{$label-selector}
display: none
用法
.nav-bar
// Responsively hide 0-3 labels from the end of the list.
@include iconlist(600px, '.icon-label', 100px, 3)
如果有人愿意建议一个重构来产生更小或更好解耦的 CSS,那就太棒了!但我不确定它会如何完成。
根据您的喜好和需要进行编辑。
@media only screen and (max-device-width: 480px) {
html {
-webkit-text-size-adjust: none;
}
.tooBig {
display: none;
}
}