- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前有 This其中将成为我的“坦克小部件 View ”的一部分。我希望将我的设计样式/格式设置为类似于:
+------------------------------------------+
| HEADER X |
+------------------------------------------+
| ______________________________________ |
| <______________________________________> |
| | % full | |
| | | |
| |WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW| | <-- tank fills its container, should be centered
| | O o O | | hoz. shouldn't overflow box
| ___________o_____________________O____ |
| <______________________________________> |
| |
| +------------------------------------+ |
| | | |
| | TABULAR DATA | |
| | here | | <-- table has 100% width (working)
| | | |
| +------------------------------------+ |
+------------------------------------------+
| FOOTER |
+------------------------------------------+
我这里的内部布局有问题,由于我创建坦克形状的方式,很难将它放在页面顶部。
我如何创建像上面这样的布局,其中水箱和 table 填满了小部件的主要部分,并且“小部件的包含墙”没有重叠?
.tankWidget {
position: relative;
width: 45%;
height: 400px;
float: left;
background-color: #c4c4c4;
margin: 1.5%;
}
.banner {
min-height: 40px;
width: 100%;
background-color: #383838;
color: #ececec;
margin: 0;
}
.widget-footer {
min-height: 40px;
width: 100%;
background-color: #383838;
bottom: 0;
position: absolute;
color: #ececec;
}
#container {
margin: 0;
margin-top: -50px;
width: 100%;
padding: 0;
-moz-perspective: 1000px;
/*required to make cylinder shape*/
-webkit-perspective: 1000px;
}
#frame {
-moz-transform-style: preserve-3d;
-webkit-transform-style: preserve-3d;
-moz-transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg) translate3d(125px, 70px, 50px);
-webkit-transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg) translate3d(125px, 70px, 50px);
}
.strip {
-moz-transform-style: preserve-3d;
-webkit-transform-style: preserve-3d;
}
.strip div {
position: fixed;
background: blue;
background-repeat: repeat;
border-width: thin 10px;
height: 120px;
/*height and width of tank display*/
width: 34px;
}
.strip div:before {
border-bottom: 2px solid black;
content: "";
position: absolute;
z-index: -1;
/*Make this lower so any text appears in front*/
top: 0;
right: 0;
bottom: 50%;
/*used for tank level setting*/
left: 0;
background: green;
}
.strip .a {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(0deg) translateZ(124px);
-webkit-transform: rotateY(0deg) translateZ(124px)
}
.strip .b {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(15deg) translateZ(124px);
-webkit-transform: rotateY(15deg) translateZ(124px)
}
.strip .c {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(30deg) translateZ(124px);
-webkit-transform: rotateY(30deg) translateZ(124px);
}
.strip .d {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(45deg) translateZ(124px);
-webkit-transform: rotateY(45deg) translateZ(124px)
}
.strip .e {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(60deg) translateZ(124px);
-webkit-transform: rotateY(60deg) translateZ(124px)
}
.strip .f {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(75deg) translateZ(124px);
-webkit-transform: rotateY(75deg) translateZ(124px)
}
.strip .g {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(90deg) translateZ(124px);
-webkit-transform: rotateY(90deg) translateZ(124px)
}
.strip .h {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(105deg) translateZ(124px);
-webkit-transform: rotateY(105deg) translateZ(124px)
}
.strip .i {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(120deg) translateZ(124px);
-webkit-transform: rotateY(120deg) translateZ(124px)
}
.strip .j {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(135deg) translateZ(124px);
-webkit-transform: rotateY(135deg) translateZ(124px)
}
.strip .k {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(150deg) translateZ(124px);
-webkit-transform: rotateY(150deg) translateZ(124px)
}
.strip .l {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(165deg) translateZ(124px);
-webkit-transform: rotateY(165deg) translateZ(124px)
}
.strip .m {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(180deg) translateZ(124px);
-webkit-transform: rotateY(180deg) translateZ(124px)
}
.strip .n {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(195deg) translateZ(124px);
-webkit-transform: rotateY(195deg) translateZ(124px)
}
.strip .o {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(210deg) translateZ(124px);
-webkit-transform: rotateY(210deg) translateZ(124px)
}
.strip .p {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(225deg) translateZ(124px);
-webkit-transform: rotateY(225deg) translateZ(124px)
}
.strip .q {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(240deg) translateZ(124px);
-webkit-transform: rotateY(240deg) translateZ(124px)
}
.strip .r {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(255deg) translateZ(124px);
-webkit-transform: rotateY(255deg) translateZ(124px)
}
.strip .s {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(270deg) translateZ(124px);
-webkit-transform: rotateY(270deg) translateZ(124px)
}
.strip .t {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(285deg) translateZ(124px);
-webkit-transform: rotateY(285deg) translateZ(124px)
}
.strip .u {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(300deg) translateZ(124px);
-webkit-transform: rotateY(300deg) translateZ(124px)
}
.strip .v {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(315deg) translateZ(124px);
-webkit-transform: rotateY(315deg) translateZ(124px)
}
.strip .w {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(330deg) translateZ(124px);
-webkit-transform: rotateY(330deg) translateZ(124px)
}
.strip .x {
border-top: 1px solid black;
border-bottom: 1px solid black;
-moz-transform: rotateY(345deg) translateZ(124px);
-webkit-transform: rotateY(345deg) translateZ(124px);
}
<div class="tankWidget">
<div class="banner">Tank 1: Kero</div>
<div id="container">
<div id="frame">
<div class="strip">
<div class="a">50% Full</div>
<div class="b"></div>
<div class="c"></div>
<div class="d"></div>
<div class="e"></div>
<div class="f"></div>
<div class="g"></div>
<div class="h"></div>
<div class="i"></div>
<div class="j"></div>
<div class="k"></div>
<div class="l"></div>
<div class="m"></div>
<div class="n"></div>
<div class="o"></div>
<div class="p"></div>
<div class="q"></div>
<div class="r"></div>
<div class="s"></div>
<div class="t"></div>
<div class="u"></div>
<div class="v"></div>
<div class="w"></div>
<div class="x"></div>
</div>
</div>
</div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<table id="specTab1">
<tr>
<th>Volume:</th>
<td>50L</td>
</tr>
<tr>
<th>Capacity:</th>
<td>100L</td>
</tr>
<tr>
<th>Ullage (AL):</th>
<td>1.24</td>
</tr>
<tr>
<th>
<br />
</th>
</tr>
</table>
<div class="widget-footer"></div>
</div>
我显然在需要换行符以实现当前目标方面做错了什么。
如有任何帮助,我们将不胜感激。
请注意
小部件的高度不太可能改变。但是,宽度可能取决于屏幕的宽度(因此使用 % 而不是 px)
我想要的是一个响应式设计,例如:
表格实际上将是一个 KendoGrid,其中已经为它做了很多样式。
linked question我希望使它充满活力
最佳答案
首先,通过对元素应用转换,您可以隐式(绝对)定位。因此,由于容器和框架元素没有设置高度,您需要添加额外的换行符来定位表格。
因为小部件的高度是固定的,所以可以在该表上设置绝对位置:
#specTab1 {
position: absolute;
bottom: 50px; // to leave space for the 40px footer
}
接下来是坦克本身。小部件的宽度设置为相对 (40%),但单个 strip 的 translateZ 和宽度值是固定的。
.strip div {
...
width:34px;
...
}
.strip .a {
...
transform: rotateY(0deg) translateZ(124px);
...
}
这两个值对于实际渲染圆柱形对象当然很重要,但是由于固定值,这不能很好地适应。主要问题是缺少 z 轴引用,它不允许您使用相对单位,translateX(100%)
甚至 translateY(calc(50% + 15px))
工作正常,但 translateZ()
并非如此。
长话短说,恕我直言,纯 CSS 目前不允许您以响应方式渲染您的坦克。您很可能需要 javascript 来获取小部件的实际宽度(以绝对数字表示)并计算每个 strip 的值。这可以通过这样的函数来完成(这只会设置 webkitTransform,您也需要为其他前缀执行此操作):
function resize3d() {
var container = document.getElementById('container');
w = container.offsetWidth / 10;
z = container.offsetWidth / 30 * 11;
var grad = 0;
var alphabet = "abcdefghijklmnopqrstuvwx";
for(var i=0; i<alphabet.length; i++)
{
var letter = alphabet.charAt(i);
var el = document.querySelector(".strip ."+letter);
el.style.width = w+"px";
el.style.webkitTransform = "rotateY("+grad+"deg) translateZ("+z+"px)";
grad += 15;
}
}
请参阅 DEMO (只为 webkit 编写)并调整窗口大小。我还调整了相当多的变换值,使坦克或多或少地以旋转动画为中心(尝试将坦克悬停!;)或获取它 started automatically ).
关于html - Widget 类设计中的 Css 定位/响应式设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26972171/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!