Skip to content

[css] 第76天 用CSS画出一个任意角度的扇形,可以写多种实现的方法 #527

Open
@haizhilin2013

Description

@haizhilin2013
Collaborator

第76天 用CSS画出一个任意角度的扇形,可以写多种实现的方法

Activity

liuxiaole

liuxiaole commented on Jul 1, 2019

@liuxiaole

四个半圆叠加,过半调整z-index:
https://codepen.io/liuxiaole-the-sasster/full/RzQBKV

lu-xiansen

lu-xiansen commented on Jul 1, 2019

@lu-xiansen

CSS代码

先画一个圆,外加两个绝对定位的半圆
扇形可以通过两个半圆作为遮罩旋转来露出相应的角度实现
这只能切出180°以内的扇形
超过180°的扇形,就把圆作为底色,两个遮罩作为扇形的组成部分

不知道描述的好不好理解,但确实能实现任意角度的扇形了

                .contain {
			position: relative;
			width: 200px;
			height: 200px;
		}
		.main {
			height: 100%;
			background: lightgreen;
			border-radius: 100px;
		}
		.common {
			position: absolute;
			top: 0;
			width: 50%;
			height: 100%;
		}
		.mask1 {
			transform: rotate(83deg);
			border-radius: 100px 0 0 100px;
			left: 0;
			transform-origin: right center;
			background: red;
		}
		.mask2 {
			transform: rotate(-76deg);
			transform-origin: left center;
			left: 100px;
			border-radius: 0 100px 100px 0;
			background: blue;
		}

HTML代码

        <div class="contain">
		<div class="main"></div>
		<div class="mask1 common"></div>
		<div class="mask2 common"></div>
	</div>

我也附个链接,直接改变两个mask样式里的度数即可
https://codepen.io/lu-xiansen/pen/mZXQbO

zyronon

zyronon commented on Jul 1, 2019

@zyronon

2楼的方法很赞

liuxiaole

liuxiaole commented on Jul 1, 2019

@liuxiaole

想到一个更加简单的方法,直接用 clip-path 切多边形,然后 border-radius 一裁剪就是扇形了!

https://codepen.io/liuxiaole-the-sasster/pen/Zdrmxg

VilianLee

VilianLee commented on Jul 1, 2019

@VilianLee

用两个矩形叠加遮罩最底层的圆

2256184693

2256184693 commented on Jul 2, 2019

@2256184693

@liuxiaole 学到了学到了

Konata9

Konata9 commented on Jul 12, 2019

@Konata9

这一题其实和 Day33 画三角形的很类似,利用 border 就可以实现了。通过调整 border 的宽度来改变不角度。实现扇形就是再加一个 border-radius.

https://codepen.io/Konata9/pen/wLOLer?editors=1100

liuxiaole

liuxiaole commented on Jul 12, 2019

@liuxiaole

这一题其实和 Day33 画三角形的很类似,利用 border 就可以实现了。通过调整 border 的宽度来改变不角度。实现扇形就是再加一个 border-radius.

https://codepen.io/Konata9/pen/wLOLer?editors=1100

你这样可以画任意角度?300度的扇形怎么画?

hafrans

hafrans commented on Jan 7, 2020

@hafrans

对于这种场景基本上就要用canvas了。

smile-2008

smile-2008 commented on Jan 26, 2021

@smile-2008

CSS代码

先画一个圆,外加两个绝对定位的半圆
扇形可以通过两个半圆作为遮罩旋转来露出相应的角度实现
这只能切出180°以内的扇形
超过180°的扇形,就把圆作为底色,两个遮罩作为扇形的组成部分

不知道描述的好不好理解,但确实能实现任意角度的扇形了

                .contain {
			position: relative;
			width: 200px;
			height: 200px;
		}
		.main {
			height: 100%;
			background: lightgreen;
			border-radius: 100px;
		}
		.common {
			position: absolute;
			top: 0;
			width: 50%;
			height: 100%;
		}
		.mask1 {
			transform: rotate(83deg);
			border-radius: 100px 0 0 100px;
			left: 0;
			transform-origin: right center;
			background: red;
		}
		.mask2 {
			transform: rotate(-76deg);
			transform-origin: left center;
			left: 100px;
			border-radius: 0 100px 100px 0;
			background: blue;
		}

HTML代码

        <div class="contain">
		<div class="main"></div>
		<div class="mask1 common"></div>
		<div class="mask2 common"></div>
	</div>

我也附个链接,直接改变两个mask样式里的度数即可
https://codepen.io/lu-xiansen/pen/mZXQbO

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @liuxiaole@smile-2008@haizhilin2013@Konata9@VilianLee

        Issue actions

          [css] 第76天 用CSS画出一个任意角度的扇形,可以写多种实现的方法 · Issue #527 · haizlin/fe-interview