纯css实现倾斜tab切换,并且加上两边圆角

前端开发过程中难免会遇到倾斜的tab设计,并且两边要做成圆角效果,如下图:

我的想法:

    1. 给每个tab项设置transform:skew(角度值)实现倾斜效果,但是,此时里边内容也会跟着倾斜,所以给内容单独加一个容器,给该容器重新设置偏转回去即可;

    2. 两边的圆角,在tab项外边套一个div,给这个div设置border-radius,但是,因为此时这个父容器是被tab项撑开的,但是tab项左右两边是倾斜的,出现如下效果:

    

需要想办法把tab项的尖角去掉,怎么去掉呢?没错,overflow:hiddden;所以给父容器(content)加上,因为两边都需要盖住尖角(上图左上角和右下角),那么父容器的宽度就需要比tab项的宽度稍微少那么点,但是也不能少太多,不然圆角会有瑕疵,正好遮住最好(数值自行测试),并且需要把tab项整体(此时需要给tab再加一层父容器content-nav,在上文的父容器content之内)往左移动一点,正好显示出来为好。

项目代码:

    <div class="content">
		<div class="content-nav">
			<div class="item">
				<div class="item-word">测试tab111</div>
			</div>
			<div class="item">
				<div class="item-word">测试tab222</div>
			</div>
			<div class="item">
				<div class="item-word">测试tab333</div>
			</div>
		</div>
	</div>
        .content {
			width: 550px;
			background: #f00;
			white-space: nowrap;
			border-radius: 15px;
			overflow: hidden;
		}

		.content-nav {
			margin-left: -33px;
		}

		.item {
			width: 200px;
			height: 30px;
			display: inline-block;
			font-size: 24px;
			text-align: center;
			line-height: 30px;
			background: linear-gradient(90deg, rgba(255, 163, 0, 1) 0%, rgba(249, 214, 45, 1) 100%);
			transform: skew(30deg);
		}

		.item-word {
			transform: skew(-30deg);
		}

如此,即可出现本文最开始的效果。

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
可以使用以下代码实现tab标签切换: HTML代码: ```html <div class="tab"> <button class="tablinks" onclick="openTab(event, 'tab1')">标签1</button> <button class="tablinks" onclick="openTab(event, 'tab2')">标签2</button> <button class="tablinks" onclick="openTab(event, 'tab3')">标签3</button> </div> <div id="tab1" class="tabcontent"> <p>这是标签1的内容。</p> </div> <div id="tab2" class="tabcontent"> <p>这是标签2的内容。</p> </div> <div id="tab3" class="tabcontent"> <p>这是标签3的内容。</p> </div> ``` CSS代码: ```css .tab { overflow: hidden; border: 1px solid #ccc; background-color: #f1f1f1; } .tab button { background-color: inherit; float: left; border: none; outline: none; cursor: pointer; padding: 14px 16px; transition: 0.3s; } .tab button:hover { background-color: #ddd; } .tab button.active { background-color: #ccc; } .tabcontent { display: none; padding: 6px 12px; border: 1px solid #ccc; border-top: none; } .tabcontent.show { display: block; } ``` JavaScript代码: ```javascript function openTab(evt, tabName) { var i, tabcontent, tablinks; tabcontent = document.getElementsByClassName("tabcontent"); for (i = 0; i < tabcontent.length; i++) { tabcontent[i].classList.remove("show"); } tablinks = document.getElementsByClassName("tablinks"); for (i = 0; i < tablinks.length; i++) { tablinks[i].classList.remove("active"); } document.getElementById(tabName).classList.add("show"); evt.currentTarget.classList.add("active"); } ``` 在JavaScript代码中,openTab()函数会根据传入的参数tabName来显示相应的标签页,并将对应的按钮设为激活状态。同时,如果有其他标签页处于激活状态,会将其隐藏并将对应的按钮设为非激活状态。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端卡卡西呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值