首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >等间距不同宽度的流体通航项目

等间距不同宽度的流体通航项目
EN

Stack Overflow用户
提问于 2013-05-11 11:42:42
回答 2查看 3.4K关注 0票数 2

我想要创建一个流畅的横向链接导航列表,其中导航链接是均匀的间隔,并占据了容器的全部宽度。Nav链接都是不同的宽度。第一个链接应该左对齐,最后一个链接应该是右对齐的。

我在使用以下技术方面取得了有限的成功:

代码语言:javascript
运行
AI代码解释
复制
ul {display: table;width: 100%;}
li {display: table-cell;}
a {display: block;} 

同时也使用

代码语言:javascript
运行
AI代码解释
复制
ul {text-align: justify}
li {inline-block }

但是,我编写的任何代码似乎都不能很好地处理不同宽度的元素。当导航器调整尺寸时,间距似乎不相等。

我需要导航器是流体的,第一个和最后一个元素被冲到包含ul的边缘,使元素彼此等距。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-12 09:01:34

我想了一段时间,想出了两种合理的方法,这两种方法都很不错,但不完全像像素一样完美。一个是只基于CSS的,第二个是由jQuery (JavaScript)辅助的。

CSS方法-相当好的逼近

考虑以下HTML:

代码语言:javascript
运行
AI代码解释
复制
<ul class="nav ex1">
    <li class="first"><a href="#">Home</a></li>
    <li><a href="#">Collections</a></li>
    <li class="tight"><a href="#">About Us</a></li>
    <li><a href="#">Slocklists</a></li>
    <li class="tight"><a href="#">Trade Enquiries</a></li>
    <li><a href="#">Press</a></li>
    <li class="last"><a href="#">Contact Us</a></li>
</ul>

我添加了一些类作为样式的挂钩。

CSS如下:

代码语言:javascript
运行
AI代码解释
复制
.nav.ex1 {
    outline: 1px dashed blue;
    width: 100%;
    margin: 0;
    padding: 0;
    display: table;
}
.nav.ex1 li {
    display: table-cell;
    outline: 1px dotted gray;
    width: 20%;
    white-space: pre;
    text-align: center;
}
.nav.ex1 li.first {
    width: 1%;
}
.nav.ex1 li.last {
    width: 1%;
}
.nav.ex1 li.tight {
    width: 1%;
}

在示例1中,ul.nav父容器使用display: tablewidth: 100%。子li元素是table-cell的。我添加了white-space: pre以防止某些链接被包装成两行,而text-align: center则以文本为中心。

诀窍是强制一些表格单元格收缩以适合文本,您可以通过设置width: 1%来实现这一点,该设置为非零,但太小,无法容纳文本(除非屏幕宽为10,000像素)。我收缩以适应第一个也是最后一个单元格,这迫使它们对齐父容器的左右边缘。然后,我通过添加.tight类强制其他每个表单元格收缩到适合。

剩下的表格的单元格的宽度为20%,这将使它们在两个最近的邻居之间保持均匀的间隔。但是,行中的链接之间的间距会有一些微小的变化,这就是为什么我称之为近似。

jQuery辅助解决方案

在示例2中,标记本质上是相同的,CSS是:

代码语言:javascript
运行
AI代码解释
复制
.nav.ex2 {
    outline: 1px dashed blue;;
    margin: 0;
    padding: 0;
    display: block;
    overflow: auto;
    width: 100%;
}
.nav.ex2 li {
    float: left;
    display: block;
    outline: 1px dotted gray;
    width: auto;
}

在本例中,li元素向左浮动,我使用width: auto

诀窍是计算神奇的左边距值,并将其应用于除第一个元素之外的所有li元素。

jQuery的作用是:

代码语言:javascript
运行
AI代码解释
复制
$(window).resize(function () {
    navResizer();
});

// On load, initially, make sure to set the size.
navResizer();

function navResizer() {
    var $li_w = 0;
    var $ul_w = $(".nav.ex2").innerWidth();

    $( ".nav.ex2 li" ).each(function( index ) {
        $li_w += $(this).innerWidth();
    });

    var li_margin = Math.floor(($ul_w-$li_w)/6);
    $(".nav.ex2 li").not(".first").css("margin-left",li_margin);
    $("p.note").text( "Widths: ul.nav: " + $ul_w + " all li: " + $li_w + " Left margin: " + li_margin);
}

基本上,该操作计算ul.nav ($ul_w)的宽度和所有li子元素($li_w)的总宽度。

左边边距由($ul_w - $li_w)/6计算,其中6是7个链接之间的空隙数。

关键代码行是:$(".nav.ex2 li“).not(”.first“).css(”页边距-左“,li_margin);

我使用.not(".first")省略第一个li元素,然后使用.css设置左边框。

一个轻微的缺陷是在最右边,其中的链接不是完全对齐的,但是您可以通过将最后一个li浮动到右边来解决这个问题。

在大多数情况下,如果你的链接文本在长度上是相似的,你将很难区分两者。这两种方法都不是非常完美的像素,但相当好。

小提琴:http://jsfiddle.net/audetwebdesign/xhSfs/

脚注

我尝试了一些使用text-align: justifyinline-block的其他方法,但是CSS引擎并不像对待普通单词那样对待内联块,因此不会对一行内联块进行验证。

left-margin设置为%值将无法在某些窗口宽度中完全工作,并且最右边的链接将不像所需的那样位于边缘。

以前曾尝试过jQuery方法,请参见:

Evenly-spaced navigation links that take up entire width of ul in CSS3

票数 5
EN

Stack Overflow用户

发布于 2013-05-12 09:35:22

您可以使用text-align: justify;并忽略最后一个左对齐行。#last是不可见的,因为padding-left: 100%;http://jsfiddle.net/mwRbn/占据了最后一行

如果要垂直对齐菜单文本,请结合使用heightline-height

代码语言:javascript
运行
AI代码解释
复制
ul#nav { 
  text-align: justify;
  width: 100%;
  background: yellow;
  height: 2em;
  line-height: 2em;
}

http://jsfiddle.net/mwRbn/1/。你需要IE<8黑客吗?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16501067

复制
相关文章
利用jQuery not()方法选取除某个元素外的所有元素
这时我们可以使用 jQuery 遍历中的 not() 方法来排除某些元素,例如根据元素的 #id ,.class 等排除,代码如下:
德顺
2019/11/12
3.3K0
jquery获取第几个子元素_js获取元素的指定子元素
通过children方法,children(“input:first-child”)
全栈程序员站长
2022/08/03
27.3K0
点击除元素以外的任意地方隐藏元素js
比如想实现点击列表弹出筛选器,点击其他任意地方关闭筛选器,如图 该筛选器class名 1 $(document).click(function () { 2 $(".subMenu"
蓓蕾心晴
2018/04/12
4.6K0
点击除元素以外的任意地方隐藏元素js
WPF 得到子指定元素方法和得到指定子元素集合方法MvvM得到焦点
public class UIHelper { /// <summary> /// 在Visual里找到想要的元素 /// childName可为空,不为空就按名字找 /// </summary> public static T FindChild<T>(DependencyObject parent, string childName) where T : DependencyObject
lpxxn
2018/01/31
1K0
jQuery中排除指定元素,同时选择剩下的所有元素
场景:某页面用了js延时加载技术处理所有图片,以改善用户体验,但是有几个图片不想延时加载,要求把它们单独挑出来。 研究了一下jQuery的API文档,搞掂了,jQuery真的很方便,贴在这里备份: <!doctype html> <html> <head> <title>菩提树下的杨过</title> <script type="text/javascript" src="http://img.24city.com/js/jquery-1.4.3.min.js"></script> <scri
菩提树下的杨过
2018/01/22
1.7K0
JQuery干货篇之选择元素
实例 $("img:odd").css("border","thick double red");选择序号为奇数的img元素 $("img:first").css("border","thick double red") 选择第一个img元素
爱撒谎的男孩
2019/12/31
1.8K0
vue组件中修改组件外元素样式
以上方式修改某些组件的样式,这样会涉及到从 html 层级选择,由于我 style 标签是这样写的
蓓蕾心晴
2023/05/31
6070
css选择器选择父元素下子元素仅有一个指定 class 的时候
对于仅指定一个 class 的场景,我们通常会想到使用 :last-child  或者 :only-child 
蓓蕾心晴
2023/05/31
1.8K0
css中伪元素选择器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>68-伪元素选择器</title> <style> *{ margin: 0; padding: 0; } div{ width: 200px; height: 200px; ba
贵哥的编程之路
2020/10/28
1.9K0
CSS 块元素、内联元素、内联块元素
元素就是标签,布局中常用的有三种标签,块元素、内联元素、内联块元素,了解这三种元素的特性,才能熟练的进行页面布局。
Devops海洋的渔夫
2019/05/31
4K0
【CSS3】CSS3 伪元素选择器 ( 伪元素选择器语法简介 | 伪元素选择器权重计算 | 代码示例 )
属性选择器 , 伪类选择器 的 权重 , 与 类选择器 权重相同 , 都是 10 ;
韩曙亮
2023/04/24
1.2K0
【CSS3】CSS3 伪元素选择器 ( 伪元素选择器语法简介 | 伪元素选择器权重计算 | 代码示例 )
纯CSS选择器控制子元素或兄弟元素的hover效果
一般 hover 效果只用在自身元素和控制子元素,那么可以直接用 CSS 控制兄弟元素的 hover 效果吗?
德顺
2019/11/13
6.4K0
纯CSS选择器控制子元素或兄弟元素的hover效果
Selenium 元素checkbox元素操作与元素等待
检测百度页面搜索按钮是否存在,存在就输入关键词“自学网 Selenium” 然后点击搜索
清风穆云
2021/08/09
1.6K0
selenium元素定位中css或者xpath不选择某一类元素
例如,下列标签中,不选择class为disable的span标签 则 这样写 dd:not(.disabled) > span 或者 dd:not(.disabled) span
小黑同学
2020/08/16
1.9K0
selenium元素定位中css或者xpath不选择某一类元素
谷歌调试工具选取元素选择不到页面的具体元素问题
z-index的问题 document的默认值是0. 一旦出现这种问题,检查下是否对大背景设置了z-index:-1; 如果设置了这个,那么所有的被设元素的内容都会在document之下,选取不到。包括不会出现链接点击、文字选取、hover等效果。 所以解决这个问题的方法就是把大背景的z-index:-1;去掉即可。
smy
2018/04/03
9920
vue获取当前点击元素的父元素、子元素、上级元素等
<div @click = "clickfun($event)">点击</div> methods: { clickfun(e) { // e.target 是你当前点击的元素 // e.currentTarget 是你绑定事件的元素 #获得点击元素的前一个元素 e.currentTarget.previousElementSibling.innerHTML #获得点击元素的第一个子元素 e.curre
用户1349575
2022/01/26
11.4K0
<noscript>元素[通俗易懂]
早期浏览器都面临一个特殊的问题,即当浏览器不支持 JavaScript 时如何让页面平稳地退化。对这
全栈程序员站长
2022/11/17
5570
使用CSS选择器进行元素定位
在selenium webdriver中,支持使用CSS选择器来进行元素定位,事实在真的投入工作,大量编辑用例和元素定位的时候,使用css 和 xpath才是经常需要用到的。 之前有专门讲过使用xpath对元素定位的使用,下面要介绍css选择器来进行元素定位。 【参见W3C官网说明】 http://www.w3school.com.cn/cssref/css_selectors.asp 先看看css选择器定位的webdriver函数: def find_elements_by_css_selector(
苦叶子
2018/04/17
3.2K0
HTML5 元素选择流程图
?
疯狂的技术宅
2019/03/28
2.4K0
HTML5 元素选择流程图
前端基础-CSS相邻元素选择器
相邻元素选择器 哥哥+弟弟{} /*通过哥哥选择到弟弟 */ 例: <style> div+p{/* 兄弟选择器,哥哥标签+弟弟标签,,,,修饰的是弟弟 */ color:red; } <
cwl_java
2020/04/07
1.5K0
前端基础-CSS相邻元素选择器

相似问题

如何选择除特定元素外的所有元素的子元素?

40

选择除禁用元素外的所有复选框元素

81

jQuery选择除一个元素外的所有元素

20

隐藏除特定子元素内容之外的所有元素

20

如何读取除特定子元素以外的元素?

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档