2014-09-29 148 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