我尝试将<select>
元素中的文本与safari中的右侧或中心对齐。但没有任何效果。 text-align:center;
在除safari之外的所有浏览器中都有效。 direction:rtl;
和dir="rtl"
没有做任何事情。该列表始终与Safari中的左侧对齐。 -webkit-appearance: none;
也无济于事。我需要一个解决方案。
答案 0 :(得分:3)
答案 1 :(得分:1)
如果你没有找到任何解决方案,你可以在angularjs上使用这个技巧或使用js将所选值与div上的文本映射,这个解决方案是完全符合角度的css但是需要在select和DIV:
var myApp = angular.module('myApp', []);
myApp.controller('selectCtrl', ['$scope',
function($scope) {
$scope.value = '';
}]);
&#13;
.ghostSelect {
opacity: 0.1;
/* Should be 0 to avoid the select visibility but not visibility:hidden*/
display: block;
width: 200px;
position: absolute;
}
.select {
border: 1px solid black;
height: 20px;
width: 200px;
text-align: center;
border-radius: 5px;
display: block;
}
&#13;
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example - example-guide-concepts-1-production</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
</head>
<body ng-app="myApp">
<div ng-app ng-controller="selectCtrl">
<div class=select>
<select ng-model="value" class="ghostSelect">
<option value="Option 1">Option 1</option>
<option value="Option 2">Option 2</option>
<option value="Option 3">Option 3</option>
</select>
<div>{{value}}
</div>
</div>
</div>
</body>
&#13;
希望这对某些人有用,因为我花了一天时间在phonegap上找到这个解决方案。
答案 2 :(得分:0)
正如我在上面的评论中所说,我知道这实际上并不是一个css解决方案,但是如果它对你很重要,那么如果你愿意使用jquery那就可以解决这个问题....它不起作用Chrome正确,但是如果你检查浏览器,你可以加载它来进行safari:
答案 3 :(得分:0)
答案 4 :(得分:0)
我遇到了一个非常相似的问题。我的问题是要根据<select>
样式在text-align
元素内对齐文本。这是正确处理基于media
的样式所必需的。
在Chrome中,我使用的是text-align-last
样式,但是在Safari中不支持这种样式(根据MDN)。
这就是为什么我想出以下JavaScript函数(使用text-indent
)来完成left
和right
文本对齐(不是center
的OP问题,而是在我的辩护中,我认为可以修改此代码以正确计算text-indent
以居中):
function SELECT_applyTextAlign(element) {
let styles = document.defaultView.getComputedStyle(element, "");
if ( styles.textAlign == 'left'
|| (styles.direction === 'ltr' && styles.textAlign === 'start')) {
// Left alignment doesn't require any kind of calculations.
element.style.textIndent = 0;
return;
}
if ( styles.textAlign == 'right'
|| (styles.direction === 'ltr' && styles.textAlign === 'end')) {
// Right alignment requires a proper width calculations.
let option = element.querySelector('option[value=\'' + element.value + '\']');
if (!option) {
return;
}
// Get original element width
let width = element.getBoundingClientRect().width;
// Create temporary <select> and <option> elements
let sz_select = document.createElement('select');
let sz_option = document.createElement('option');
// This should ensure both <select> have the same styles and <option> have the same text
sz_select.style.cssText = styles.cssText;
sz_select.style.width = 'auto';
sz_select.value = option.value;
sz_option.value = option.value;
sz_option.text = option.text;
// Append <option>
sz_select.appendChild(sz_option);
// Append <select>
element.parentNode.insertBefore(sz_select, element.nextSibling);
// Copy calculated width
let sz_width = sz_select.getBoundingClientRect().width;
element.style.textIndent = (width - sz_width) + 'px'
// Remove unnecessary element
sz_select.remove();
}
}
然后我附加了load
和resize
事件处理程序,以确保在加载页面和更改窗口大小时处理所有<select>
元素:
window.addEventListener('load', function() {
let selects = document.getElementsByTagName('select');
Array.prototype.filter.call(selects, function(element) {
SELECT_applyTextAlign(element);
element.addEventListener('change', function () {
SELECT_applyTextAlign(element);
}, false);
});
}, false);
window.addEventListener('resize', function () {
let selects = document.getElementsByTagName('select');
Array.prototype.filter.call(selects, function(element) {
SELECT_applyTextAlign(element);
});
}, false);
希望这可以帮助某人(在chrome,iOS和Safari中测试)
答案 5 :(得分:0)
这是一个完整的工作示例,只需要 CSS 就可以在 Safari 的中心对齐选择标签。它适用于所有浏览器。
.select-wrap {
border: 1px solid #777;
border-radius: 4px;
width:200px;
background-color:#fff;
position:relative;
}
.select-wrap label{
font-size: 20px;
text-transform: uppercase;
color: #777;
width: 100%;
text-align: center;
display: block;
position: absolute;
tex-align: center;
margin: 10px auto;
pointer-events: none;
}
select{
background-color: #fff;
border:0px;
height:50px;
font-size: 16px;
}
<div class="select-wrap">
<label>Color</label>
<select name="color" style="width: 100%;">
<option value=""></option>
<option value="yellow">Yellow</option>
<option value="red">Red</option>
<option value="green">Green</option>
</select>
</div>
答案 6 :(得分:-3)
这对我有用。
select {
text-align:-moz-center;
text-align:-webkit-center;
}