《CSS设计指南》之界面组件

ppgo8 于 2023-03-31 发布

界面组件

界面组件:HTML提供的用户界面的元素,包括列表、表单。下拉菜单和弹出层也是常见的界面组件,只是HTML没有提供对应的原生标签

导航菜单

菜单由一组链接组成。我们习惯用HTML中的列表元素ul或ol来分组链接。

纵向菜单

细节:

.list1 li + li {border-top:1px solid #f00;}
/* 等价写法 */
li {border-top:1px sold #foo;}
li:first-child {border-top:none;}

+号:兄弟选择器 A + B 选择A的兄弟元素B

li + li 任何跟在li 之后的li,翻译:除了第一个li

常见问题

当a嵌套在li中时,只有文本才可以点击。因为a是行内元素,会收缩包裹其中的内容。然而,更好的用户体验是:让列表项整行都可以点击

改进方法:把a改成块级元素,设置padding,拓展填充父元素。

横向菜单栏

常用技术

  1. 浮动:让li从垂直变水平
  2. a标签disblick:block,使其从收缩变扩张(宽度等于父元素的宽度)
  3. 选择符:li+li a {border-left:1px soild #fff}为除了第一个链接之外的每个链接左侧添加一个分割线

下拉菜单

下拉菜单通过嵌套列表来实现。

下拉菜单的两种形式:1.一级水平,其他级垂直 2.全部垂直

image-20230331203133794

image-20230331203140023

方法:把子菜单栏加在对应链接之后、包含对应链接的li元素结束标签之前。

<!-- html实现 -->
<ul>
	<li><a href='#'>链接1</a></li>
    <li><a href='#'>链接1</a></li>
    <li><a href='#'>链接1</a>            /*对应连接之后*/
		<ul>
			<li><a href='#'>链接1</a></li>
			<li><a href='#'>链接2</a></li>
			<li><a href='#'>链接3</a></li>
		</ul>                          /*包含对应连接li结束之前*/
	</li>
</ul>

视觉样式:控制字体、文本、边框

功能样式:控制布局。

对于下拉菜单这种复杂组件,视觉样式和功能样式分开写是非常值得提倡的。

注意:

顶级菜单

1.下拉菜单栏为了使ul能够包住浮动的li,不能使用overflow:hidden,而是使用了float:left。因为前者会导致下拉菜单栏无法显示,下拉菜单栏会因为在父元素ul外,溢出而被隐藏。

2.为了保证用户体验,所有的视觉体验:背景、内边距、边框都要应用给链接a,不能应用给ul或li,以便可视区域最大化。

background-clip:padding-box,阻止链接背景延伸到边框后面,此后,可以设置透明色边框,在链接和链接产生缝隙,让后面的页面可以被看到。同时,鼠标从一个菜单栏到另外一个菜单栏时,不会出现光标切换。菜单项视觉上是分开,但实际上是紧挨在一起

3.li的相对定位,为后续做准备。在菜单项处于悬停状态时显示子菜单栏

下拉菜单

下拉菜单相应鼠标事件

下拉菜单一开始是隐藏的,只有在其父元素处于鼠标悬停状态时,才需要显示。

标签顺序按照文字的逻辑顺序书写

/* 注意子代选择器符号,不然后面的ul会显示出来 */
ul li:hover>ul { 
    /* 父元素悬停时显示 */
    display:block;
}

注意,:hover触发器是设定在li元素而非链接自身上的。

三级菜单

此时鼠标悬停在二级菜单指定链接中,就会显示三级菜单,只不过位置不对。

是因为上述样式也用在了三级菜单上,当悬停在li时,就会显示三级菜单。

表单

表单与其他元素不同。其他元素是把服务器发过来的内容显示给用户,而表单把用户的信息发给服务器。大型表单:电商网站的购物车

HTML表单元素

form元素

所有表单的标记都包含在一个form元素中。

<form class='' action='' method=''>
	<!-- 表单标记 -->
</from>

from元素中有两个必要的属性:

提交表单

用户提交表单后,在表单控件中填写的数据或做出的选择,都会被发送到服务器。表单数据以名=值的方式发送给服务器,每个控件都是名/值的形式。

控件组

可以把一组相关的表单控件组织到一个控件组元素fieldset中。例如,电商网站,有一个用于收集用户姓名和地址的控件组,可能会加上一个标题叫“收货人信息”。

<fieldset>
	<legend>控件组标题</legend>   <!-- 注意:第一个子元素必须是这个代表控件组标题 -->
</fieldset>

弹出层

弹出层,也叫提示条,鼠标悬停在某个元素之上时显示出的一个界面组件。在页面空间有限的情况下,弹出层是为用户提供更多信息的一种有效手段。

CSS两个十分强大的特性:z-index属性和动态生成HTML元素。

设置弹出层

设置弹出层:

父元素:hover>子元素 {display:block;以及其他定位元素}

堆叠上下文和z-index

弹出层会被旁边的内容挡住一部分。

默认的堆叠上下文次序:子元素会被父元素的同辈元素压住,同辈元素会被后面的同辈元素压住。

z-index控制元素在堆叠上下文中的次序,z-index只对定位元素有效,且涉及的两个元素都应该是定位元素。

z-index的值越高,就显示越上层。

用CSS创造三角形

使用边框创造三角形。

image-20230331205738955

通过加宽盒子的边框,将盒子的宽和高都设定为0,同时将其他三个边框设定为transparent,就可以用CSS 造出一个三角形。

把这个技术与::before 伪元素结合起来。大家知道,::before 和::after 这两个伪元素是用于添 加文本或图标等少量内容的。不过,完全可以为它们生成的内容设定任何样式,就像给标记中其他元素设定样式一样。在这个例子中,就是要把伪元素生成内容的盒子,通过CSS 制作成一个三角形,并把它放到弹出层的左边。

注意,::before 伪元素的content 属性中必须有点内容,否则就不能显示生成的元素。