/* 通用 */
html {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
font-family: Helvetica, Arial, sans-serif;
font-size: 14px;
overflow: hidden;
user-select: none;
}
hr {
border: 0;
border-top: 1px solid #ccc;
}
button {
position: relative;
color: #555;
background-color: #fff;
border: 1px solid #ddd;
font-weight: 400;
padding: 5px 8px;
cursor: pointer;
outline: none;
border-radius: 3px;
will-change: box-shadow;
transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}
button:hover {
background-color: #ddd;
}
button.selected {
background-color: #ddd;
}
button.IconButton {
background-color: #fff;
border: 1px solid #ddd;
border-radius: 3px;
}
button.IconButton:hover {
background-color: #ddd;
}
button.IconButton.selected {
background-color: rgba(0, 0, 0, 0.6);
color: #fff;
}
button.IconButton i {
font-size: 20px;
}
textarea {
tab-size: 4;
white-space: pre;
word-wrap: normal;
outline: none;
border: 1px solid transparent;
color: #444;
padding: 2px;
}
textarea.success {
border-color: #8b8 !important;
}
textarea.fail {
border-color: #f00 !important;
background-color: rgba(255, 0, 0, 0.05);
}
input {
outline: none;
border: 1px solid #ddd;
color: #444;
}
input.Input {
padding: 4px;
}
input.Number {
color: #08f !important;
font-size: 12px;
border: 0px;
padding: 2px;
cursor: col-resize;
width: 40px;
background-color: transparent;
}
input.Color {
width: 64px;
height: 17px;
border: none;
padding: 2px;
background-color: transparent;
}
select {
color: #666;
background-color: #ddd;
border: 0px;
cursor: pointer;
outline: none;
padding: 2px;
}
select:hover {
background-color: #fff;
}
span.Text {
cursor: default;
display: inline-block;
vertical-align: middle;
}
span.Checkbox {
margin-right: 10px;
}
span.Checkbox>input {
vertical-align: middle;
}
span.Checkbox>span {
cursor: default;
display: inline-block;
margin-left: 3px;
color: rgb(136, 136, 136);
vertical-align: middle;
}
div.CloseButton {
display: flex;
align-items: center;
justify-content: center;
color: #fff;
cursor: pointer;
}
div.CloseButton>i {
font-size: 16px;
}
div.Texture {
display: inline-block;
}
div.Texture canvas {
cursor: pointer;
margin-right: 5px;
border: 1px solid #888;
}
div.Texture input {
width: 40px;
border: 1px solid #ccc;
}
div.Modal {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: none;
align-items: center;
justify-content: center;
z-index: 1300;
border-radius: 3px;
}
div.Modal.NoShade {
visibility: hidden;
}
div.Modal .Container {
position: relative;
background-color: #fff;
box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.5);
visibility: visible;
}
div.Window .Container {
border-radius: 3px;
}
div.Window .header {
width: 100%;
padding: 8px;
background-color: rgba(0, 0, 0, 0.14);
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: center;
cursor: move;
}
div.Window .header .caption {
flex: 1;
}
div.Window .header .CloseButton {
color: #555;
}
div.Window .body {
position: relative;
height: calc(100% - 35px);
background-color: #eee;
flex: 1;
padding: 8px;
box-sizing: border-box;
border-radius: 0 0 3px 3px;
overflow-y: auto;
}
div.Window .body .TabPanel {
height: calc(100% - 40px);
overflow-y: auto;
}
div.Window .body .Row {
min-height: 32px;
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-start;
}
div.Window .body .Row label {
width: 80px;
text-align: right;
margin-left: 24px;
margin-right: 16px;
}
div.Window .footer {
width: 100%;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
background-color: #eee;
}
div.Window .footer .Button {
margin: 8px;
}
div.ImageList {
box-sizing: border-box;
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-start;
flex-wrap: wrap;
}
div.ImageList .Container {
position: relative;
box-sizing: border-box;
margin: 3px;
}
div.ImageList .Container .Item {
width: 160px;
height: 160px;
margin: 2px;
display: inline-block;
cursor: pointer;
}
div.ImageList .Container .Item img {
width: 100%;
height: 100%;
border-radius: 3px;
pointer-events: none;
}
div.ImageList .Container .Item>i {
position: absolute;
font-size: 36px;
left: calc(50% - 18px);
top: calc(50% - 18px);
pointer-events: none;
}
div.ImageList .Container .Item .cornerText {
position: absolute;
left: 8px;
top: 8px;
font-weight: bold;
}
div.ImageList .Container .Item .IconButton {
padding: 2px;
opacity: 0.8;
pointer-events: all;
}
div.ImageList .Container .Item .EditButton {
position: absolute;
right: 28px;
top: 4px;
}
div.ImageList .Container .Item .DeleteButton {
position: absolute;
right: 4px;
top: 4px;
}
div.ImageList .Container .Item .IconButton i {
font-size: 14px;
}
div.ImageList .Container .title {
position: absolute;
left: 2px;
bottom: 2px;
right: 2px;
background-color: rgba(0, 0, 0, 0.5);
font-size: 16px;
color: #fff;
padding: 3px 8px;
pointer-events: none;
word-break: break-word;
}
div.MessageBox {
position: fixed;
left: 0;
top: 0;
z-index: 9999;
display: inline-block;
background-color: rgba(0, 0, 0, 0.5);
color: #fff;
padding: 16px 24px;
pointer-events: none;
border-radius: 3px;
box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.14);
}
div.SearchField {
display: flex;
flex-direction: row;
max-width: 240px;
}
div.SearchField .Input {
flex: 1;
}
div.SearchField .IconButton i {
font-size: 14px;
}
table.Table {
width: 100%;
border-collapse: collapse;
}
table.Table .TableHead {
font-weight: bold;
background: #fff;
}
table.Table .TableHead td {
border: 1px solid #ddd;
}
table.Table .TableHead {
border-bottom: 2px solid #ccc;
}
table.Table .TableBody {
background-color: #fff;
}
table.Table .TableBody tr:nth-child(odd) {
background-color: #eee;
}
table.Table .TableBody tr:hover {
background-color: #ccc;
}
table.Table .TableBody td {
border: 1px solid #ddd;
}
::-webkit-scrollbar {
width: 0.2em;
}
::-webkit-scrollbar:horizontal {
height: 0.5em;
}
::-webkit-scrollbar-track {
box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
border-radius: 10px;
}
::-webkit-scrollbar-thumb {
border-radius: 10px;
background: rgba(0, 0, 0, 0.3);
box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);
}
::-webkit-scrollbar-thumb:window-inactive {
background: rgba(169, 169, 169, 0.4);
}
#container {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
display: flex;
flex-direction: column;
}
/* 菜单栏 */
.menubar {
width: 100%;
height: 32px;
background-color: #fff;
color: rgba(0, 0, 0, 0.88);
z-index: 24;
border-radius: 3px;
box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.14);
}
.menubar .logo {
float: left;
width: 56px;
margin-top: 2px;
display: flex;
align-items: center;
justify-content: center;
}
.menubar .logo i {
font-size: 26px;
}
.menubar .menu {
float: left;
cursor: pointer;
padding-right: 8px;
}
.menubar .menu.right {
float: right;
cursor: auto;
padding-right: 0;
text-align: right;
}
.menubar .menu .title {
display: inline-block;
padding: 8px;
}
.menubar .menu .options {
position: absolute;
width: 150px;
display: none;
padding: 4px 0;
background-color: #fff;
z-index: 24;
border-radius: 1px;
border: 1px solid #ddd;
}
.menubar .menu:hover .options {
display: block;
}
.menubar .menu .options hr {
border-color: #ddd;
}
.menubar .menu .options .option {
color: rgba(0, 0, 0, 0.88);
background-color: transparent;
padding: 5px 10px;
margin: 0 !important;
}
.menubar .menu .options .option:hover {
color: #fff;
background-color: #08f;
}
.menubar .menu .options .option:active {
color: #666;
background: transparent;
}
.menubar .menu .options .inactive {
color: #bbb;
background-color: transparent;
padding: 5px 10px;
margin: 0 !important;
}
.menubar .menu .version {
opacity: 0.5;
cursor: default;
display: inline-block;
vertical-align: middle;
}
/* 工具栏 */
.toolbar {
width: 48px;
height: 100%;
display: flex;
align-items: center;
justify-content: flex-start;
flex-direction: column;
background-color: #eee;
color: rgba(0, 0, 0, 0.88);
z-index: 16;
border-radius: 3px;
box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.14);
box-sizing: border-box;
}
.toolbar .Button {
margin-top: 3px;
}
.toolbar .Button:first-child {
margin-top: 8px;
}
/* 场景编辑区 */
.viewport {
position: absolute;
width: 100%;
height: 100%;
}
/* 状态栏 */
.statusBar {
width: 100%;
height: 32px;
display: flex;
background-color: #fff;
color: rgba(0, 0, 0, 0.88);
z-index: 8;
border-radius: 3px;
font-size: 12px;
}
.statusBar .Row {
width: 100%;
display: flex;
align-items: baseline;
justify-content: flex-start;
align-self: center;
}
.statusBar label {
margin-right: 8px;
}
.statusBar label:first-child {
margin-left: 16px;
}
.statusBar span {
min-width: 32px;
margin-right: 16px;
}
/* 侧边栏 */
.sidebar {
position: relative;
width: 220px;
height: 100%;
background: #eee;
border-left: 1px solid #ddd;
box-sizing: border-box;
overflow: auto;
}
.sidebar * {
vertical-align: middle;
}
.sidebar .Panel {
color: #888;
padding: 8px;
border-top: 1px solid #ddd;
}
.sidebar .Panel.collapsed {
margin-bottom: 0;
}
.sidebar .Row {
margin-top: 8px;
}
.sidebar .Row:nth-child(1) {
margin-top: 0;
}
.sidebar label {
width: 60px;
cursor: default;
display: inline-block;
vertical-align: middle;
}
.tabs {
background-color: #ddd;
border-top: 1px solid #ccc;
}
.tabs span {
color: #aaa;
border-right: 1px solid #ccc;
padding: 10px;
cursor: default;
display: inline-block;
vertical-align: middle;
}
.tabs span.selected {
color: #888;
background-color: #eee;
}
.tabs+div>div.Panel:first-child {
border-top: 0px;
}
/* 底部面板 */
.bottomPanel {
width: 100%;
height: 240px;
display: flex;
flex-direction: column;
}
/* 脚本编辑窗口 */
.script {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0.97;
}
/* 启动测试窗口 */
.player {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.9);
}
/* CodeMirror插件 */
.CodeMirror {
position: absolute !important;
top: 37px;
width: 100% !important;
height: calc(100% - 37px) !important;
}
.CodeMirror .errorLine {
background: rgba(255, 0, 0, 0.25);
}
.CodeMirror .esprima-error {
color: #f00;
text-align: right;
padding: 0 20px;
}
/* 大纲控件 */
.Outliner {
color: #444;
background-color: #fff;
padding: 0;
width: 100%;
height: 320px;
font-size: 12px;
cursor: default;
overflow: auto;
outline: none !important;
}
.Outliner .option {
padding: 4px;
color: #666;
white-space: nowrap;
border: 1px solid transparent;
}
.Outliner .option:hover {
background-color: rgba(0, 0, 0, 0.02);
}
.Outliner .option.active {
background-color: rgba(0, 0, 0, 0.04);
}
.Outliner .option.drag {
border: 1px dashed #999;
}
.Outliner .option.dragTop {
border-top: 1px dashed #999;
}
.Outliner .option.dragBottom {
border-bottom: 1px dashed #999;
}
.Outliner .type {
position: relative;
top: -2px;
padding: 0 2px;
color: #ddd;
}
.Outliner .type:after {
content: '■';
}
.Outliner .Scene {
color: #ccccff;
}
.Outliner .Object3D {
color: #aaaaee;
}
.Outliner .Mesh {
color: #8888ee;
}
.Outliner .Line {
color: #88ee88;
}
.Outliner .LineSegments {
color: #88ee88;
}
.Outliner .Points {
color: #ee8888;
}
.Outliner .PointLight {
color: #dddd00;
}
.Outliner.Geometry {
color: #88ff88;
}
.Outliner .BoxGeometry {
color: #bbeebb;
}
.Outliner .TorusGeometry {
color: #aaeeaa;
}
.Outliner .Material {
color: #ff8888;
}
.Outliner .MeshPhongMaterial {
color: #ffaa88;
}
.Outliner .Script:after {
content: '{...}'/* ❮/❯ */
}
/* 动画面板 */
.animation-panel {
position: relative;
height: 100%;
display: flex;
flex-direction: column;
}
.animation-panel .controls {
position: sticky;
top: 40px;
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-start;
background-color: #eee;
border-bottom: 1px solid #ddd;
z-index: 20;
}
.animation-panel .controls .IconButton {
margin: 2px;
padding: 2px 4px;
}
.animation-panel .box {
position: relative;
display: flex;
flex: 1;
flex-direction: row;
overflow: auto;
}
.animation-panel .box .left-area {
position: sticky;
left: 0;
width: 64px;
display: flex;
flex-direction: column;
background-color: #eee;
border-right: 1px solid #ccc;
box-sizing: border-box;
padding-top: 34px;
z-index: 10;
}
.animation-panel .box .left-area .group-info {
position: relative;
height: 32px;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
border-bottom: 1px solid #ddd;
box-sizing: border-box;
}
.animation-panel .box .left-area .group-info:first-child {
border-top: 1px solid #ddd;
}
.animation-panel .box .right-area {
position: relative;
display: flex;
flex: 1;
flex-direction: column;
}
.animation-panel .box .right-area .timeline {
position: absolute;
height: 32px;
border-bottom: 1px solid #ddd;
}
.animation-panel .box .right-area .groups {
position: absolute;
top: 34px;
width: 100%;
flex: 1;
}
.animation-panel .box .right-area .groups .group {
position: relative;
width: 100%;
height: 32px;
border-bottom: 1px solid #ddd;
box-sizing: border-box;
}
.animation-panel .box .right-area .groups .group .item {
position: absolute;
left: 0;
width: 80px;
height: 100%;
background-color: #ddd;
border: 1px solid #ccc;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: center;
}
.animation-panel .box .right-area .groups .group .item:hover {
background-color: #ccc;
}
.animation-panel .box .right-area .slider {
position: absolute;
left: 0;
top: 0;
width: 0;
height: 100%;
border: 1px solid red;
box-sizing: border-box;
}