통화 기호가있는 HTML 텍스트 입력 필드


104

맨 처음에 "$"기호를 포함하는 텍스트 입력 필드를 갖고 싶습니다. 필드에 어떤 편집이 발생하더라도 기호가 영구적으로 유지되도록합니다.

숫자 만 입력하면 좋겠지 만 그건 멋진 추가 일뿐입니다.

답변:


103

테두리없는 입력 필드 주위에 테두리가있는 범위를 사용하여 고정 접두사 또는 접미사가있는 입력 필드를 시뮬레이션하는 것이 좋습니다. 다음은 기본적인 킥오프 예입니다.

.currencyinput {
    border: 1px inset #ccc;
}
.currencyinput input {
    border: 0;
}
<span class="currencyinput">$<input type="text" name="currency"></span>


13
또한 <Label> 태그 안에 '$'를 감쌀 수 있습니다. 그러면 '$'텍스트를 클릭 할 때 입력 필드로 포커스가 이동합니다
Cohen

2
@Cohen 좋은 생각이지만 레이블 두 개 이상 있으면 접근성에 문제가 발생할 수 있습니다 .
rybo111 2015 년

63

상위 .input-icondiv를 사용하십시오 . 선택적으로 .input-icon-right.

<div class="input-icon">
  <input type="text">
  <i>$</i>
</div>

<div class="input-icon input-icon-right">
  <input type="text">
  <i></i>
</div>

수직 아이콘 정렬 transformtop한 세트 pointer-eventsnone해당 클릭 입력에 집중되도록. paddingwidth적절하게 조정하십시오 .

.input-icon {
  position: relative;
}

.input-icon > i {
  position: absolute;
  display: block;
  transform: translate(0, -50%);
  top: 50%;
  pointer-events: none;
  width: 25px;
  text-align: center;
  font-style: normal;
}

.input-icon > input {
  padding-left: 25px;
  padding-right: 0;
}

.input-icon-right > i {
  right: 0;
}

.input-icon-right > input {
  padding-left: 0;
  padding-right: 25px;
  text-align: right;
}

허용되는 답변과 달리 오류가있을 때 빨간색 테두리와 같은 입력 유효성 검사 강조 표시가 유지됩니다.

Bootstrap 및 Font Awesome을 사용한 JSFiddle 사용 예


나는 하나의 깔끔한 라인에있는 버튼을 원했고 div 에 추가 float:left해야했습니다input-symbol
kluka

@ rybo111 아니요, input-symbol컨테이너 외부에있는 별도의 버튼을 의미했습니다
kluka

당신 말이 맞아, float나쁘기 때문에 지금 display:inline-block과 함께 사용 하고 vertical-align:bottom있다. :) 나는 빨리 바이올린을 만들 수 없지만, 내 현재 예제에는 너무 많은 다른 CSS가있다 ;-)
kluka

1
나는 이것이 (저자가 언급했듯이) 부트 스트랩의 유효성 검사 동작을 유지하기 때문에 허용 된 답변 보다이 답변을 좋아합니다!이 도움에 감사드립니다.
Vadiraj

30

입력 필드를 범위로 래핑 할 수 있습니다 position:relative;. 그런 다음 :before content:"€"통화 기호 를 추가 하고 만듭니다 position:absolute. JSFiddle 작동

HTML

<span class="input-symbol-euro">
    <input type="text" />
</span>

CSS

.input-symbol-euro {
    position: relative;
}
.input-symbol-euro input {
    padding-left:18px;
}
.input-symbol-euro:before {
    position: absolute;
    top: 0;
    content:"€";
    left: 5px;
}

업데이트 텍스트 상자의 왼쪽 또는 오른쪽에 유로 기호를 넣으려면. JSFiddle 작동

HTML

<span class="input-euro left">
    <input type="text" />
</span>
<span class="input-euro right">
    <input type="text" />
</span>

CSS

 .input-euro {
     position: relative;
 }
 .input-euro.left input {
     padding-left:18px;
 }
 .input-euro.right input {
     padding-right:18px;
     text-align:end; 
 }

 .input-euro:before {
     position: absolute;
     top: 0;
     content:"€";
 }
 .input-euro.left:before {
     left: 5px;
 }
 .input-euro.right:before {
     right: 5px;
 }

이것은 내가 원하는 것과 매우 비슷하지만 입력은 페이지 너비에 고정되지 않으며 절대를 사용할 수 없습니다. 상대는 또한 기호를 주위로 이동합니다. 입력 왼쪽 상단 모서리에 절대 / 상대 위치를 어떻게 설정할 수 있습니까?
nwolybug

유로화는 항상 오른쪽에 표시됩니다. 왼쪽 대신 오른쪽에 기호를 넣어야합니다.
jadok

Im french와 가격은 항상 € 2.50이 아닌 2.50 €와 같이 쓰여져 있으며 유로존의 다른 국가도 똑같이 할 것이라고 확신합니다.
jadok

2
@jadok 나는 네덜란드에 살고 있으며 여기 가격은 € 2,50로 표기되어 있습니다.
Vincent Kok

1
@VincentKok 주변에 물어 본 후, 라틴계 유럽인 국가 (프랑스, 스페인, ...)가 오른쪽에, 북 / 동유럽 국가를 왼쪽에 놓을 것입니다. 예를 들어 아마존으로 시도해 볼 수 있습니다. : www.amazone.fr, www.amazone.nl, ...
jadok

22

당신이 할 수 없기 때문에 ::before함께 content: '$'입력에와 절대 위치 요소를 추가하는 추가 HTML을 추가 - 나는 배경 SVG 인라인 CSS로 할 좋아한다.

다음과 같이 진행됩니다.

input {
    width: 85px;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='16px' width='85px'><text x='2' y='13' fill='gray' font-size='12' font-family='arial'>$</text></svg>");
    padding-left: 12px;
}

다음을 출력합니다.

svg 달러 기호 배경 css

참고 : 코드는 모두 한 줄에 있어야합니다. 최신 브라우저에서 지원은 꽤 훌륭하지만 테스트해야합니다.


2
좋은 솔루션입니다. background-repeat: no-repeat;입력 상자에서 $가 반복되면서 추가 되었습니다.
Hamid Tavakoli

브라우저는 입력 요소를 "대체 된 요소"(예 : 시스템 네이티브 위젯)로 background-image렌더링 할 수 있으므로 지원되지 않거나 브라우저가 시스템 제공 위젯을 사용하는 대신 위젯 자체를 렌더링 할 수 있습니다.
Dai

4

결국 유형을 숫자로 유지해야했기 때문에 CSS를 사용하여 절대 위치를 사용하여 입력 필드에 달러 기호를 넣었습니다.

<div>
   <span style="position: absolute; margin-left: 1px; margin-top: 1px;">$</span>
   <input type="number" style="padding-left: 8px;">
</div>


3

텍스트 입력 필드 내부가 아닌 앞에 '$'를 넣으십시오. 제출 후 '$'를 구문 분석 할 필요가 없기 때문에 숫자 데이터에 대한 유효성 검사가 훨씬 쉬워집니다.

당신은 함께 할 수 JQuery.validate () (또는 다른), 핸들 통화 몇 가지 클라이언트 측 유효성 검사 규칙을 추가합니다. 그러면 입력 필드 안에 '$'를 넣을 수 있습니다. 그러나 보안을 위해 여전히 서버 측 유효성 검사를 수행해야하며 '$'를 제거해야하는 위치로 돌아갑니다.


1
감사합니다! 나는 그것을 알고 있었지만 실제로 텍스트 필드 안에 통화 기호가 필요했습니다. 많은 사람들에게 도움이 될 수있는 더 나은 답변이 아래에 있습니다.
User3419

@Hristo : 적합한 솔루션을 찾아서 기쁩니다. 그러나 기록을 위해 답변으로 표시 한 사람 은 입력 필드에 $ 입력 하지 않습니다 . 스타일링이있는 것처럼 보일 뿐입니다 . 즉, 확실히 매끄 럽습니다!
dnagirl

1
예, 그것은 시각적으로 문제를 해결하지만 귀하의 제안은 (예, 여전히 올바른 방향을 향하고 있음) 문제를 해결한다고 부르지 않습니다. 다시 한번 감사 드리며 여기에서 누구에게도 기분을 상하게 할 생각은 없었습니다!
User3419


2

Safari 만 지원해야하는 경우 다음과 같이 할 수 있습니다.

input.currency:before {
  content: attr(data-symbol);
  float: left;
  color: #aaa;
}

및 다음과 같은 입력 필드

<input class="currency" data-symbol="€" type="number" value="12.9">

이렇게하면 추가 태그가 필요하지 않고 마크 업에 기호 정보를 보관할 수 있습니다.


7
: before 및 : after CSS 의사 선택기는 컨테이너 태그에만 사용할 수 있으며 입력 태그에는 작동하지 않습니다. stackoverflow.com/questions/2587669/...
Venkatesh Nannan에게

1

내가 선호하는 또 다른 해결책은 통화 기호 이미지에 추가 입력 요소를 사용하는 것입니다. 다음은 검색 텍스트 필드에 돋보기 이미지를 사용하는 예입니다.

html :

<input type="image" alt="Subscribe" src="/graphics/icons/search-button.png">
<input type="text" placeholder="Search" name="query">

css :

#search input[type="image"] {
background-color: transparent;
border: 0 none;
margin-top: 10px;
vertical-align: middle;
margin: 5px 0 0 5px;
position: absolute;
}

그러면 여기 왼쪽 사이드 바에 입력이 나타납니다.

https://fsfe.org


1

방금 사용했습니다 : 입력 전에 $를 내용으로 전달했습니다.

input{ 
   margin-left: 20px;
 }
input:before {
  content: "$";
  position: absolute;
}

1
Chrome에서 재현 할 수 없습니다. 작동하는 JSFiddle 예제를 게시 할 수 있습니까?
다이

입력은 CSS3에서 의사 요소를 지원하지 않습니다. 즉, 순수한 CSS로는 불가능합니다. 그러나 jquery를 사용하는 경우 $ ( "input"). after ( "$");
TaterJuice

0

부트 스트랩의 경우

<span class="form-control">$ <input type="text"/></span>

입력 필드에 class = "form-control"을 사용하지 마십시오.


0

.currencyinput {
    border: 1px inset #ccc;
    padding-bottom: 1px;//FOR IE & Chrome
}
.currencyinput input {
    border: 0;
}
<span class="currencyinput">$<input type="text" name="currency"></span>


설명이없는 코드는이 답변의 OP 또는 미래 시청자에게 거의 도움이되지 않습니다. 이것이 질문에 어떻게 답하는지 설명해야합니다.
leigero

0

입력 양식의 다른 텍스트 필드와 왼쪽 테두리를 정렬하는 데 관심이있는 경우이 답변 중 어느 것도 실제로 도움이되지 않습니다.

달러 기호를 절대 왼쪽에 -10px 또는 왼쪽 5px (입력 상자 내부 또는 외부에 원하는지 여부에 따라 다름)에 배치하는 것이 좋습니다. 내부 솔루션에는 입력 css에 direction : rtl이 필요합니다.

또한 direction : rtl을 피하기 위해 입력에 패딩을 추가 할 수 있지만, 입력 컨테이너의 너비가 동일한 너비의 다른 컨테이너와 일치하지 않도록 변경됩니다.

<div style="display:inline-block">
 <div style="position:relative">
  <div style="position:absolute; left:-10px;">$</div>
 </div>
 <input type='text' />
</div>

또는

<div style="display:inline-block">
 <div style="position:relative">
  <div style="position:absolute; left:5px;">$</div>
 </div>
 <input type='text' style='direction: rtl;' />
</div>

https://i.imgur.com/ajrU0T9.png

예 : https://plnkr.co/edit/yshyuRMd06K1cuN9tFDv?p=preview


1
질문이 요청한 것이 아니기 때문에 답변 중 어느 것도 도움이되지 않습니다. 기호는 입력 내부에 있어야합니다.
rybo111

기술적으로 CSS 답변은 입력 컨테이너 안에 달러 기호를 넣지 않습니다. 받아 들여진 CSS 솔루션은 전형적인 형태에 적용될 때 복잡한 정렬 문제를 도입하고 있다고 생각합니다. 여기에 표시된
Ted Scheckler

이 솔루션을 업데이트하여 입력 내부에 달러 기호를 배치했습니다. plnkr.co/edit/yshyuRMd06K1cuN9tFDv?p=preview (절대 왼쪽 5px 위치 및 입력 방향을 rtl로 설정)
Ted Scheckler 2018 년

0

<style>
.currencyinput {
    border: 1px inset #ccc;
    
    border-left:none;
}
.currencyinput input {
    border: 0;
}
</style>
<!DOCTYPE html>
<html>
<head>

</head>
<body>

<input type="text" oninput="this.value = this.value.replace(/[^0-9]/.g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');" style="text-align:right;border-right:none;outline:none" name="currency"><span class="currencyinput">%</span>
</body>
</html>

%


-1

예, 부트 스트랩을 사용하는 경우 작동합니다.

.form-control input {
    border: none;
    padding-left: 4px;
}

<span class="form-control">$ <input type="text"/></span>

-1
.currencyinput {
    border: 1px inset #ccc;

    border-left:none;
}
.currencyinput input {
    border: 0;`enter code here`
}

<input type="text" oninput="this.value = this.value.replace(/[^0-9]/.g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');" style="text-align:right;border-right:none;outline:none" name="currency"><span class="currencyinput">%</span>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.