웹 프론트엔드 HTML 튜토리얼 练习:90%的css实现淘宝话费充值等快捷应用栏_html/css_WEB-ITnose

练习:90%的css实现淘宝话费充值等快捷应用栏_html/css_WEB-ITnose

Jun 21, 2016 am 09:08 AM

效果

主要的功能有

1. 网格设计
2. 充话费独占2行2列
3. 充话费鼠标移入有字体缩小的动画
4. 充话费等第一行的四个应用鼠标移入时,图标会向上弹一下
5. 充话费等第一行的四个应用鼠标移入时,会有更多的应用内容以框的显示显示在该应用下面,如:

本文的价值
1. 在html结构,css逻辑方面,有一些自己的想法可供参考和交流
2. 熟悉css的transition和animation的简单应用
3. 学习如何通过浮动和负的的margin值,实现这种网格效果
4. 学习如何利用less,编写更加清晰和易于修改的css
5. 见识下淘宝的iconfront的威力

html结构:该找个演示代码的工具了。。。贴代码不好

<div class="toolbox">                <ul>			<li class="tb-item tb-rs-2 tb-cs-2">				<a class="tb-item-wrapper tb-item-big  tb-item-hbox tb-item-huafei" href="javascript:;" title="话费充值">					<div class="tb-item-iwrapper">						<i class="tb-item-icon iconfont icon-icon"></i>						<p class="tb-item-text">充值</p>					</div>					<div class="tb-item-box">					</div>				</a>			</li>			<li class="tb-item">				<a class="tb-item-wrapper tb-item-hbox tb-item-youxi" href="javascript:;" title="游戏充值">					<div class="tb-item-iwrapper">						<i class="tb-item-icon iconfont icon-youxi"></i>						<p class="tb-item-text">游戏</p>					</div>					<div class="tb-item-box">					</div>				</a>			</li>			<li class="tb-item">				<a class="tb-item-wrapper tb-item-hbox tb-item-lvxing" href="javascript:;" title="旅行">					<div class="tb-item-iwrapper">						<i class="tb-item-icon iconfont icon-hanglvxingye"></i>						<p class="tb-item-text">旅行</p>					</div>					<div class="tb-item-box">					</div>				</a>			</li>			<li class="tb-item">				<a class="tb-item-wrapper tb-item-hbox tb-item-baoxian" href="javascript:;" title="保险">					<div class="tb-item-iwrapper">						<i class="tb-item-icon iconfont icon-baoxian"></i>						<p class="tb-item-text">保险</p>					</div>					<div class="tb-item-box">					</div>				</a>			</li>			<li class="tb-item">				<a class="tb-item-wrapper" href="javascript:;" title="彩票">					<div class="tb-item-iwrapper">						<i class="tb-item-icon iconfont icon-caipiao"></i>						<p class="tb-item-text">彩票</p>					</div>				</a>			</li>                     ...		</ul>	</div>
로그인 후 복사

最后几个省略,跟彩票应用实现相同。

结合html结构,描述下实现思路,主要是各个html元素的作用和css类的组织:

1. 整个应用包裹在div里,加了一个toolbox的类标识它这个容器
2. toolbox>ul,这个ul元素没有必要加css类,因为toobox的子元素从需求考虑不会再有其它元素,如果要对这个ul添加样式,利用子元素选择器即可
3. 每个li元素都加了一个类,一方面是为了结构更加清晰,另一方面是因为有些应用内部还会有div包括它的具体内容,这些内容很有可能也会用li元素来实现,所以要对跟应用直接相关的li元素添加css类,以便对它设置的样式不会影响更加深远的后代li元素,其实因为这个原因,li元素下面的a,div,i,p都必须加css类,道理同理
4. tb-item表示一个应用,同时考虑到话费对应的tb-item,占了两行两列,所以单独加了两个类tb-rs-2,tb-cs-2,表示rowspan或colspan为2,命名简便了点,有注释的话,代码就不难理解了,原本是想借助less的循环和mixin,将这个占多行多列的类做的更加灵活,从实际结果来看,这个还是不太好实现。。。。
5. li下面直接元素是a元素,因为字体大小,颜色和图标闪一下的动画效果都需要利用a元素的hover伪类实现
6. a元素还有一些其他的辅助类,如tb-item-big的作用是可以利用它,对需要显示大字体的应用进行处理,如tb-item-hbox,其实是tb-item-hasbox的简写,意思是它里面还有更多的内容,需要一个box来包裹,所以它里面has a box,如tb-item-huafei,tb-item-youxi,这个是用来单独标识每一个应用的,利用它可以实现它里面的box在显示的时候,left值可以得到不同的控制,以便box的左右边框总是能够跟toolbox的两边重合。
7. a元素里面有两个元素,第一个元素时tb-item-iwrapper,它把tb-item-icon和tb-item-text包裹起来,目的是为了在显示box的时候,这个iwrapper元素的底部能够把box的border-top盖住一部分以便,这个元素与box看起来是一种连通的效果;第二个元素是tb-item-box,这个没啥好说的。这两个元素都是绝对定位的,默认的时候tb-item-box不会显示,top值为父元素的100%,当父元素hover的时候,tb-item-box就会显示出来了。然后控制好left等等,微调之后就能实现效果了。
8. 网格的实现,可以这么干:每个tb-item都设置border,然后全部左浮动,并且都设置margin-top: -1px ,margin-left: -1px就搞定了。

css代码实现

<strong>@import (inline)"icon-font.css";* {  box-sizing: border-box}@tb-cols: 5;//5行@tb-rows: 3;//3列@tb-item-width: 59px;//每个item的宽@tb-item-height: 78px;//每个item的高@tb-item-bdcolor: #EAEAEA;//item默认的边框颜色@tb-item-icon-small-size: 24px;//图标默认的字体大小@tb-item-icon-big-size: 60px;//大图标的字体大小body {    font: 12px/1.5 tahoma,arial,'Hiragino Sans GB',sans-serif;}/*设置整站的a元素,ul元素,li元素的默认样式*/a {  text-decoration: none;}ul {  list-style: none;}ul,li {  margin: 0;  padding: 0;}//以上元素应该在整站做一些整体样式的设置,以便整个网站的风格能够一致@-webkit-keyframes toTopFromBottom {  49% {    -webkit-transform: translateY(-100%);  }  50% {    opacity: 0.3;    -webkit-transform: translateY(40%);  }  51% {    opacity: 1;  }/* 假如动画动画声明的时候使用了forwards,在动画结束后,元素将保持在to定义的状态,如果没有定义to这个状态,即使配置了forwards,元素在动画结束后会回到起始状态   意思就是本例中,不使用forwards也没有关系  to {    opacity: 0.3;  } */}//从bootstrap中找出来的清除浮动的mixin.clearfix() {  &:before,  &:after {    content: " ";    display: table;  }  &:after {    clear: both;  }}//forwards 参考:http://www.w3school.com.cn/cssref/pr_animation-fill-mode.asp,.toTopFromBottom() {  -webkit-animation: toTopFromBottom 0.3s forwards;  -moz-animation: toTopFromBottom 0.3s forwards;  animation: toTopFromBottom 0.3s forwards;}.toolbox {  //这部分样式设置其实是根据需求定的,比如宽度跟定位,本例只是为了实现效果,毕竟这个toolbox的样式不太关键  width: 600px;  height: 600px;  position: fixed;  top: 50%;  left: 50%;  margin-left: -300px;  margin-top: -300px;  //组件内部可能还包含有其它的ul,li,p,a,i等元素,先用元素选择器定义一些统一的样式,针对不同位置的元素,可以结合类选择器来单独定义  //设置本组件内p元素的默认样式,之所以不设置在外面,是因为不是整站的p元素都需要清掉padding和margin,段落还是带一些行距要好看些  p {    margin: 0;    padding: 0;  }  ul {    //根据行列数跟每个item的高宽计算整个ul元素的高宽    width: @tb-item-width * @tb-cols - @tb-cols + 1;    height: @tb-item-height * @tb-rows - @tb-rows + 1;    .clearfix();  }  .tb-item {    float: left;    width: @tb-item-width;    height: @tb-item-height;    border: 1px solid @tb-item-bdcolor;    margin-left: -1px;    margin-top: -1px;    position: relative;    //定义占两列的item宽度    &.tb-cs-2 {        width: @tb-item-width * 2 - 1;    }    //定义占两行的item高度    &.tb-rs-2 {      height: @tb-item-height * 2 - 1;    }  }    .tb-item-wrapper {    text-align: center;    &,& .tb-item-iwrapper {      position: absolute;      top: 0;      right: 0;      left: 0;      bottom: 0;    }    & .tb-item-iwrapper {      overflow: hidden;    }    //图标    .tb-item-icon {      display: block;      color: #ff4400;      font-size: @tb-item-icon-small-size;      margin-top: 12px;    }    //文本    .tb-item-text {      transition: color 0.3s ease-in-out;      color: #6c6c6c;    }    //大图标    &.tb-item-big .tb-item-icon {      font-size: @tb-item-icon-big-size;      transition: font-size 0.3s ease-in-out;    }    .tb-item-box {      position: absolute;      display: none;      background-color: #fff;      top: @tb-item-height - 2;      height: @tb-item-height * 2 - 1;      width: @tb-item-width * @tb-cols - @tb-cols + 1;      border: 1px solid #ff4400;      z-index: 1;    }    //以下几处控制每个应用的box的left    &.tb-item-huafei .tb-item-box {           left: -1px;    }    &.tb-item-youxi .tb-item-box {           left: -@tb-item-width * 2 + 1;    }    &.tb-item-lvxing .tb-item-box {           left: -@tb-item-width * 3 + 2;    }    &.tb-item-baoxian .tb-item-box {           left: -@tb-item-width * 4 + 3;    }    &:hover .tb-item-text {      color: #ff4400;    }    //定义带box的wrapper元素hover时候的样式,主要是为了显示红色的边框,并且盖住父的item元素的边框    &.tb-item-hbox:hover {      top: -1px;      left: -1px;      bottom: -1px;      right: -1px;      border: 1px solid #ff4400;      z-index: 1;      .tb-item-iwrapper {              bottom: -1px;        z-index: 2;        background-color: #fff;      }    }    &.tb-item-big:hover .tb-item-iwrapper {              bottom: @tb-item-height - 2;    }    &.tb-item-hbox:hover .tb-item-box {      display: block;    }    &.tb-item-big:hover .tb-item-icon {      font-size: @tb-item-icon-small-size;    }    &:hover .tb-item-icon {      .toTopFromBottom();    }  }  //tb-on的添加和删除是通过js控制的,完全通过css做实现不了,主要是为了鼠标在滑入游戏,保险,旅行等item时,话费item的文字大小能够跟它们保持一致  &.tb-on {    .tb-item-big {      .tb-item-icon{        font-size: @tb-item-icon-small-size;      }    }  }}</strong>
로그인 후 복사

Js部分:

<script type="text/javascript">		(function() {			var $tb = $('.toolbox');			var toggleTb = function(e){				$('.toolbox').toggleClass('tb-on');				}			$('.toolbox').on('mouseenter','.tb-item-hbox',toggleTb).on('mouseleave','.tb-item-hbox',toggleTb);		})();	</script>
로그인 후 복사

这个tb-on的作用是为了实现,比如鼠标滑过游戏这个应用,话费这个应用的图标能够设置成普通的字体大小而不是大图标大小。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

& lt; Progress & Gt의 목적은 무엇입니까? 요소? & lt; Progress & Gt의 목적은 무엇입니까? 요소? Mar 21, 2025 pm 12:34 PM

이 기사는 HTML & lt; Progress & Gt에 대해 설명합니다. 요소, 그 목적, 스타일 및 & lt; meter & gt의 차이; 요소. 주요 초점은 & lt; progress & gt; 작업 완료 및 & lt; meter & gt; Stati의 경우

& lt; datalist & gt의 목적은 무엇입니까? 요소? & lt; datalist & gt의 목적은 무엇입니까? 요소? Mar 21, 2025 pm 12:33 PM

이 기사는 HTML & LT; Datalist & GT에 대해 논의합니다. 자동 완성 제안을 제공하고, 사용자 경험을 향상시키고, 오류를 줄임으로써 양식을 향상시키는 요소. 문자 수 : 159

& lt; meter & gt의 목적은 무엇입니까? 요소? & lt; meter & gt의 목적은 무엇입니까? 요소? Mar 21, 2025 pm 12:35 PM

이 기사는 HTML & lt; meter & gt에 대해 설명합니다. 범위 내에 스칼라 또는 분수 값을 표시하는 데 사용되는 요소 및 웹 개발의 일반적인 응용 프로그램. & lt; meter & gt; & lt; Progress & Gt; 그리고 Ex

HTML5의 크로스 브라우저 호환성에 대한 모범 사례는 무엇입니까? HTML5의 크로스 브라우저 호환성에 대한 모범 사례는 무엇입니까? Mar 17, 2025 pm 12:20 PM

기사는 HTML5 크로스 브라우저 호환성을 보장하기위한 모범 사례에 대해 논의하고 기능 감지, 점진적 향상 및 테스트 방법에 중점을 둡니다.

HTML5 양식 유효성 검사 속성을 사용하여 사용자 입력을 유효성있게하려면 어떻게합니까? HTML5 양식 유효성 검사 속성을 사용하여 사용자 입력을 유효성있게하려면 어떻게합니까? Mar 17, 2025 pm 12:27 PM

이 기사에서는 브라우저에서 직접 사용자 입력을 검증하기 위해 필요한, Pattern, Min, Max 및 Length 한계와 같은 HTML5 양식 검증 속성을 사용하는 것에 대해 설명합니다.

뷰포트 메타 태그는 무엇입니까? 반응 형 디자인에 중요한 이유는 무엇입니까? 뷰포트 메타 태그는 무엇입니까? 반응 형 디자인에 중요한 이유는 무엇입니까? Mar 20, 2025 pm 05:56 PM

이 기사는 모바일 장치의 반응 형 웹 디자인에 필수적인 Viewport Meta Tag에 대해 설명합니다. 적절한 사용이 최적의 컨텐츠 스케일링 및 사용자 상호 작용을 보장하는 방법을 설명하는 반면, 오용은 설계 및 접근성 문제로 이어질 수 있습니다.

html5 & lt; time & gt; 의미 적으로 날짜와 시간을 나타내는 요소? html5 & lt; time & gt; 의미 적으로 날짜와 시간을 나타내는 요소? Mar 12, 2025 pm 04:05 PM

이 기사는 html5 & lt; time & gt; 시맨틱 날짜/시간 표현 요소. 인간이 읽을 수있는 텍스트와 함께 기계 가독성 (ISO 8601 형식)에 대한 DateTime 속성의 중요성을 강조하여 Accessibilit를 향상시킵니다.

& lt; iframe & gt; 꼬리표? 보안을 사용할 때 보안 고려 사항은 무엇입니까? & lt; iframe & gt; 꼬리표? 보안을 사용할 때 보안 고려 사항은 무엇입니까? Mar 20, 2025 pm 06:05 PM

이 기사는 & lt; iframe & gt; 외부 컨텐츠를 웹 페이지, 공통 용도, 보안 위험 및 객체 태그 및 API와 같은 대안을 포함시키는 태그의 목적.

See all articles