2014-09-29 47 views
1

我写了一个小的Angular指令,它为数字生成一个步骤输入控件。我使用Bootstrap按钮(xs)作为inc/dec控件,并以某种方式设法模拟外容器上的假焦点。问题是垂直居中跨度和输入在一个稳定的布局,缩放时保持在一起。无法使用内联的div对齐引导按钮

这是该指令的模板:

<ng-form name="stepNumberForm" novalidate \> 
    <div class="step-number" 
     tabindex="{{$id}}" 
     ng-class="{\'fake-focus\': fakeFocus}" 
     ng-keyup="keyControl($event)"> 
     <span 
      ng-disabled="incDisable" 
      class="btn-primary" 
      ng-click="inc()"> 
      <i class="glyphicon glyphicon-plus "> 
      </i> 
     </span> 
     <input type="text" 
       ng-style="setWidth()" 
       name="value" 
       ng-keyup="keyControl($event)" 
       ng-model="value" 
       ng-focus="selectAll($event)" 
       ng-blur="validate()" 
       class="input-xs"> 
     <span 
      ng-disabled="decDisable" 
      class="btn-primary" 
      ng-click="dec()"> 
      <i class="glyphicon glyphicon-minus"> 
      </i> 
     </span> 
    </div> 
</ng-form> 

我使用的CSS是:

input::-webkit-outer-spin-button, 
input::-webkit-inner-spin-button { 
    -webkit-appearance: none; 
    margin: 0; 
} 
.step-number{ 
    border:1px solid; 
    display:inline-block; 
    -moz-user-select: none; 
    -webkit-user-select: none; 
    -ms-user-select:none; 
    user-select:none; 
    border-radius:4px; 
} 
.input-xs { 
    font-size: 1em; 
    text-align: center; 
    border:none; 
    line-height: 1em; 
    height:1.1em; 
    vertical-align: middle; 

} 

.step-number span{ 
    display: inline; 
    height: 100%; 
    width: 18px; 
    margin-bottom: 1px; 
    margin-top: 1px; 
    text-align: center; 
} 

.step-number span:first-child{ 
    margin-left: 1px; 
    border-top-left-radius: 2px; 
    border-bottom-left-radius: 2px; 
} 
.step-number span:last-child{ 
    margin-right: 1px; 
    border-top-right-radius: 2px; 
    border-bottom-right-radius: 2px; 
} 

.input-xs:focus{ 
    outline:none; 
} 
.step-number:focus{ 
    outline:none; 
    border-color: rgba(82, 168, 236, 0.8); 
    outline: 0; 
    outline: thin dotted \9; 
    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6); 
    -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6); 
    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6); 

} 

.fake-focus{ 
    border-color: rgba(82, 168, 236, 0.8); 
    outline: 0; 
    outline: thin dotted \9; 
    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6); 
    -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6); 
    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6); 
} 
.step-date{ 
    display: inline-block; 
} 

整个工程可在​​。 还有一个working demo并通过$ bower install stepper

安装我将不胜感激伸出援助之手的任何人发现这个有用它的可用。欢迎所有贡献者使这个小指令看起来不错。这意味着:垂直居中输入,垂直居中的按钮,元素内部的边框填充,跨浏览器稳定和缩放稳定。

+0

我修改了模板,摆脱了按钮,只留下了按钮类的范围,并产生了大量的CSS,使它看起来体面,但它感觉有点“hackish”。我不会发布答案,因为我希望有更好的答案可以肯定,我自己是网络开发初学者,具有很好的css经验。 – vladblindu 2014-09-30 09:36:10

回答

0

我在跨度或具有+标志按钮元素添加了这些CSS规则:

padding: 1px; 
position: relative; 
top: -1px; 

这似乎是工作得很好(我也尝试调整大小视口 - 通过Firefox测试)。

这里是结果的截图(记得,只适用于加号
solution-screenshot

你可以添加上述规则一类.stepper-buttons并将其添加到跨度按钮元素(与两者一起测试)。

让我知道这是否适合你。

+0

我很乐意批准你的答案,我非常感谢你的努力和时间,但从长远来看,它看起来并不是防弹解决方案。另一方面,我意识到我坚持“按钮”元素没有特别的原因。因此,在测试您的解决方案时,我认为我可以使用简单的div甚至span元素并应用btn-primary类并实现禁用状态。我会做这些改变,也许你可以支持我测试CSS。 (这也可以改善按钮的圆角半径 - 分别左右舍入)再次感谢您的努力。 – vladblindu 2014-09-30 08:41:22

+0

@vladblindu没关系,没有问题:)是的,我也认为'span'技术中'button'有问题。希望你可以管理它,如果有其他你需要的东西,你可以编辑这个问题或添加一个新的问题。祝你好运:) – Chris 2014-09-30 12:41:14

+0

我对模板做了一些改变,并拿出按钮。我插入另一个div中的输入元素,尝试正常化显示模式。如果您查看www.stepper.blinduben.ro链接,您会在输入元素周围看到蓝色背景。我绝对不明白为什么它会这样显示。(蓝色是包含输入的div的bck颜色)。我不太了解css,这是真的,但这很奇怪。顺便说一句,如果你认为这个小部件可能对任何人都有用,如果你能成为贡献者并修复css,我会很高兴。再次感谢。 – vladblindu 2014-09-30 15:18:34