Estou com muita dificuldade para encontrar informações e exemplos específicos sobre isso. Eu tenho várias caixas de diálogo da interface do usuário do jQuery no meu aplicativo anexadas a divs carregadas com chamadas .ajax (). Todos eles usam a mesma chamada de configuração:
$(".mydialog").dialog({
autoOpen: false,
resizable: false,
modal: true
});
Eu só quero que a caixa de diálogo seja redimensionada para a largura do conteúdo que é carregado. No momento, a largura fica em 300px (o padrão) e recebo uma barra de rolagem horizontal.
Até onde eu sei, "autoResize" não é mais uma opção para caixas de diálogo, e nada acontece quando eu a especifique.
Estou tentando não escrever uma função separada para cada caixa de diálogo, por isso .dialog("option", "width", "500")
não é realmente uma opção, pois cada caixa de diálogo terá uma largura diferente.
A especificação width: 'auto'
das opções de diálogo apenas faz com que as caixas de diálogo ocupem 100% da largura da janela do navegador.
Quais são as minhas opções? Estou usando o jQuery 1.4.1 com jQuery UI 1.8rc1. Parece que isso deve ser algo realmente fácil.
Edição: Eu implementei uma solução alternativa kludgy para isso, mas ainda estou procurando uma solução melhor.
{'width':'auto'}
não funciona no IE7 e não será corrigido porque a{'width':'auto'}
opção não é suportada pela jQuery-UI de acordo com scott.gonzalez: "Os diálogos não suportam largura automática. Os documentos afirmam que a opção aceita apenas um número, que será usado para um tamanho de pixel. Consulte o tópico jquery-ui-dev para obter uma discussão sobre por que não suportamos largura automática. "Tive o mesmo problema e, graças a você mencionando que o problema real estava relacionado ao CSS, encontrei o problema:
Tendo em
position:relative
vez deposition:absolute
em sua.ui-dialog
regra CSS faz com que o diálogowidth:'auto'
se comporte de maneira estranha.fonte
Aqui está como eu fiz isso:
Caixa de diálogo jQuery UI responsiva (e uma correção para o erro maxWidth)
Corrigindo o maxWidth & width: bug automático.
fonte
Eu imagino definir float: esquerda para a caixa de diálogo funcionará. Presumivelmente, a caixa de diálogo é absolutamente posicionada pelo plug-in; nesse caso, sua posição será determinada por isso, mas o efeito colateral do float - tornando os elementos tão amplos quanto eles precisam para manter o conteúdo - ainda terá efeito.
Isso deve funcionar se você apenas colocar uma regra como
na sua folha de estilo, embora seja necessário configurá-lo usando jQuery
fonte
Eu tive o mesmo problema ao atualizar a interface do usuário do jquery para a 1.8.1 sem atualizar o tema correspondente. Apenas é necessário atualizar o tema também e "auto" funciona novamente.
fonte
Por alguma razão, eu continuava tendo esse problema de largura de página completa com o IE7, então fiz esse hack:
fonte
Você pode evitar o problema de largura de 100% especificando uma largura máxima. A
maxWidth
opção não parece funcionar; então defina amax-width
propriedade CSS no widget de diálogo.Caso você também queira restringir a altura máxima, use a
maxHeight
opção Ele mostrará corretamente uma barra de rolagem quando necessário.fonte
Eu tive um problema parecido.
Definir
width
a"auto"
fina trabalhou para mim, mas quando o diálogo continha uma grande quantidade de texto que ele fez abrangem toda a largura da página, ignorando amaxWidth
configuração.Definir
maxWidth
emcreate
fina funciona embora:fonte
Eu tive esse problema também.
Eu trabalhei com isso:
fonte
Tudo que você precisa fazer é apenas adicionar:
fonte
Eu tenho o mesmo problema e posição: absoluto no seu .ui-dialog {} css não foi suficiente. Percebi essa posição: o relativo estava sendo definido no estilo direto do elemento real, portanto a definição de .ui-dialog css estava sendo substituída. Definir posição: absoluto na div que eu ia criar estaticamente também não funcionou.
No final, mudei duas colocadas no meu jQuery local para fazer isso funcionar.
Alterei a seguinte linha no jQuery para:
em https://github.com/jquery/jquery/blob/1.8.0/src/offset.js#L62
Além disso, como meu diálogo estava definido como arrastável, eu tive que alterar essa linha também no jQuery-ui para ser:
em https://github.com/jquery/jquery-ui/blob/1-8-stable/ui/jquery.ui.draggable.js#L48
Talvez seguir o estilo que eu tenho mais detalhadamente consertaria as coisas, mas pensei em compartilhar como consegui esse trabalho.
fonte
Se você precisar que ele funcione no IE7, não poderá usar a opção não documentada, com erros e sem suporte
{'width':'auto'}
. Em vez disso, adicione o seguinte ao seu.dialog()
:A
.scrollWidth
inclusão do preenchimento do lado direito depende do navegador (o Firefox difere do Chrome); portanto, você pode adicionar um número subjetivo de pixels "bons o suficiente".scrollWidth
ou substituí-lo por sua própria função de cálculo de largura.Você pode incluir
width: 0
entre suas.dialog()
opções, pois esse método nunca diminuirá a largura, apenas aumentará.Testado para funcionar no IE7, IE8, IE9, IE10, IE11, Firefox 30, Chrome 35 e Opera 22.
fonte
edite este abaixo:
fonte